命名規則
一般的な規則
少なくともこれらの規則には従うべきですよ :)
クラウドリソースの実際の名前には、多くの場合、使用可能な名前に制限があることに注意してください。例えば、一部のリソースではダッシュ(-)を含めることができなかったり、キャメルケースでなければならなかったりします。本書で説明する規則は、Terraform自体の名前に関するものです。
リソース名、データソース名、変数名、出力など、すべての場所で
-
(ダッシュ)の代わりに_
(アンダースコア)を使用してください。UTF-8がサポートされていても、小文字とアルファベットを使用することを推奨します。
リソースとデータソースの引数
リソース名にリソースタイプを(部分的にも、完全にも)繰り返さないでください:
より説明的で一般的な名前が利用できない場合、またはリソースモジュールがこのタイプのリソースを1つだけ作成する場合(例えば、AWS VPCモジュールでは
aws_nat_gateway
タイプのリソースは1つだけで、aws_route_table
タイプのリソースは複数ある場合、aws_nat_gateway
はこのままの名前にし、aws_route_table
にはprivate
、public
、database
のようなより説明的な名前をつけるべき)、リソース名はこのままにすべきです。名前には常に単数名詞を使用してください。
引数の値の中や、人が目にする場所(例:RDSインスタンスのDNS名)では、
-
(ハイフン)を使用してください。リソースまたはデータソースのブロック内で、
count
/for_each
引数を最初の引数として一番上に記述し、その後に改行を入れて区切ってください。リソースでサポートされている場合は
tags
引数を実質的な最後の引数として記述し、必要に応じてその後にdepends_on
とlifecycle
を続けてください。これらはすべて空行1行で区切ってください。count
/for_each
引数で条件を使用する場合は、length
やその他の式を使用するのではなく、ブール値を使用することを推奨します。
resource
のコード例
resource
のコード例count
とfor_each
の使用方法
count
とfor_each
の使用方法tags
の配置
tags
の配置count
内の条件
count
内の条件変数
リソースモジュールで車輪の再発明をしないでください:作業しているリソースの "Argument Reference" セクションで定義されている通りに、変数の
name
、description
、default
値を使用してください。変数のバリデーションサポートはかなり限定的です(例:他の変数へのアクセスや参照ができません)。多くの場合この機能は役に立たないので、それを考慮して計画してください。
型が
list(...)
またはmap(...)
の場合は、変数名に複数形を使用してください。変数ブロック内のキーは次の順序で並べてください:description、type、default、validation
明白だと思える場合でも、将来必要になるので、すべての変数に必ずdescriptionを含めてください。
各キーに厳密な制約が必要な場合を除き、
object()
のような特定の型よりも、シンプルな型(number
、string
、list(...)
、map(...)
、any
)の使用を推奨します。マップのすべての要素が同じ型(例:
string
)を持つ場合、または変換可能な場合(例:number
型はstring
に変換可能)は、map(map(string))
のような特定の型を使用してください。特定の深さから型バリデーションを無効にする場合や、複数の型をサポートする必要がある場合は、
any
型を使用してください。値
{}
は時にマップであり、時にオブジェクトです。オブジェクトを作成する方法がないため、マップを作成するにはtomap(...)
を使用してください。
出力
出力はスコープ外でも一貫性があり理解しやすいものにしてください(モジュールを使用するユーザーにとって、返される値の型と属性が明らかであるべきです)。
出力名は、含まれるプロパティを説明するものであり、通常望むよりも自由度は低くすべきです。
出力名の良い構造は
{name}_{type}_{attribute}
のようになります。ここで:{name}
はリソースまたはデータソース名ですdata "aws_subnet" "private"
の{name}
はprivate
ですresource "aws_vpc_endpoint_policy" "test"
の{name}
はtest
です
{type}
はプロバイダーのプレフィックスを除いたリソースまたはデータソースの型ですdata "aws_subnet" "private"
の{type}
はsubnet
ですresource "aws_vpc_endpoint_policy" "test"
の{type}
はvpc_endpoint_policy
です
{attribute}
は出力によって返される属性です例を参照してください。
出力が補間関数と複数のリソースを使用した値を返す場合、
{name}
と{type}
はできるだけ一般的にすべきです(プレフィックスとしてのthis
は省略すべき)。例を参照してください。返される値がリストの場合は、複数形の名前にすべきです。例を参照してください。
明白だと思える場合でも、すべての出力に必ず
description
を含めてください。すべてのモジュールのすべての場所でその出力の使用を完全に制御できない限り、
sensitive
引数の設定は避けてください。(0.13以前のバージョンでの従来のアプローチである)
element(concat(...))
よりも(Terraform 0.13以降で利用可能な)try()
を推奨します。
output
のコード例
output
のコード例セキュリティグループのIDを最大1つ返す場合:
同じタイプの複数のリソースがある場合、出力名ではthis
を省略すべきです:
返される値がリストの場合は、複数形の名前を使用してください
Last updated