命名規則

一般的な規則

少なくともこれらの規則には従うべきですよ :)

クラウドリソースの実際の名前には、多くの場合、使用可能な名前に制限があることに注意してください。例えば、一部のリソースではダッシュ(-)を含めることができなかったり、キャメルケースでなければならなかったりします。本書で説明する規則は、Terraform自体の名前に関するものです。

  1. リソース名、データソース名、変数名、出力など、すべての場所で -(ダッシュ)の代わりに _(アンダースコア)を使用してください。

  2. UTF-8がサポートされていても、小文字とアルファベットを使用することを推奨します。

リソースとデータソースの引数

  1. リソース名にリソースタイプを(部分的にも、完全にも)繰り返さないでください:

  1. より説明的で一般的な名前が利用できない場合、またはリソースモジュールがこのタイプのリソースを1つだけ作成する場合(例えば、AWS VPCモジュールでは aws_nat_gateway タイプのリソースは1つだけで、aws_route_table タイプのリソースは複数あるため、aws_nat_gatewaythis という名前にし、aws_route_table には privatepublicdatabase のようなより説明的な名前をつけるべき)、リソース名は this にすべきです。

  2. 名前には常に単数名詞を使用してください。

  3. 引数の値の中や、人が目にする場所(例:RDSインスタンスのDNS名)では、-(ハイフン)を使用してください。

  4. リソースまたはデータソースのブロック内で、count/for_each引数を最初の引数として一番上に記述し、その後に改行を入れて区切ってください。

  5. リソースでサポートされている場合はtags引数を実質的な最後の引数として記述し、必要に応じてその後にdepends_onlifecycleを続けてください。これらはすべて空行1行で区切ってください。

  6. count/for_each引数で条件を使用する場合は、lengthやその他の式を使用するのではなく、ブール値を使用することを推奨します。

resourceのコード例

countfor_eachの使用方法

tags の配置

count内の条件

変数

  1. リソースモジュールで車輪の再発明をしないでください:作業しているリソースの "Argument Reference" セクションで定義されている通りに、変数のnamedescriptiondefault値を使用してください。

  2. 変数のバリデーションサポートはかなり限定的です(例:他の変数へのアクセスや参照ができません)。多くの場合この機能は役に立たないので、それを考慮して計画してください。

  3. 型がlist(...)またはmap(...)の場合は、変数名に複数形を使用してください。

  4. 変数ブロック内のキーは次の順序で並べてください:description、type、default、validation

  5. 明白だと思える場合でも、将来必要になるので、すべての変数に必ずdescriptionを含めてください。

  6. 各キーに厳密な制約が必要な場合を除き、object()のような特定の型よりも、シンプルな型(numberstringlist(...)map(...)any)の使用を推奨します。

  7. マップのすべての要素が同じ型(例:string)を持つ場合、または変換可能な場合(例:number型はstringに変換可能)は、map(map(string))のような特定の型を使用してください。

  8. 特定の深さから型バリデーションを無効にする場合や、複数の型をサポートする必要がある場合は、any型を使用してください。

  9. {}は時にマップであり、時にオブジェクトです。オブジェクトを作成する方法がないため、マップを作成するにはtomap(...)を使用してください。

出力

出力はスコープ外でも一貫性があり理解しやすいものにしてください(モジュールを使用するユーザーにとって、返される値の型と属性が明らかであるべきです)。

  1. 出力名は、含まれるプロパティを説明するものであり、通常望むよりも自由度は低くすべきです。

  2. 出力名の良い構造は{name}_{type}_{attribute}のようになります。ここで:

    1. {name}はリソースまたはデータソース名です

      • data "aws_subnet" "private"{name}privateです

      • resource "aws_vpc_endpoint_policy" "test"{name}testです

    2. {type}はプロバイダーのプレフィックスを除いたリソースまたはデータソースの型です

      • data "aws_subnet" "private"{type}subnetです

      • resource "aws_vpc_endpoint_policy" "test"{type}vpc_endpoint_policyです

    3. {attribute}は出力によって返される属性です

    4. を参照してください。

  3. 出力が補間関数と複数のリソースを使用した値を返す場合、{name}{type}はできるだけ一般的にすべきです(プレフィックスとしてのthisは省略すべき)。を参照してください。

  4. 返される値がリストの場合は、複数形の名前にすべきです。を参照してください。

  5. 明白だと思える場合でも、すべての出力に必ずdescriptionを含めてください。

  6. すべてのモジュールのすべての場所でその出力の使用を完全に制御できない限り、sensitive引数の設定は避けてください。

  7. (0.13以前のバージョンでの従来のアプローチである)element(concat(...))よりも(Terraform 0.13以降で利用可能な)try()を推奨します。

outputのコード例

セキュリティグループのIDを最大1つ返す場合:

同じタイプの複数のリソースがある場合、出力名ではthisを省略すべきです:

返される値がリストの場合は、複数形の名前を使用してください

Last updated