Traffine I/O

日本語

2023-03-19

Terraformにおける命名規則

Terraformにおける命名規則

コードの可読性、理解性、保守性は、適切な命名規則の適用に大きく依存しています。この記事では、Terraformにおけるさまざまな命名規則について説明します。

一般的な規則

アンダースコアの使用

Terraformにおける要素の命名において、ハイフン (-) の代わりにアンダースコア (_) の使用は、もっとも一般的な慣行の一つです。アンダースコアは、リソース名、データソース名、変数名、出力などを包括的にカバーするべきです。このアプローチは、コード全体での統一性を促進し、アンダースコアとハイフンの使用の不一致から生じる潜在的な混乱を回避します。

大文字と文字の考慮

文字の使用に関しては、一般的に小文字が好まれます。TerraformはUTF-8文字をサポートしていますが、小文字と数字の使用は、よりシンプルで読みやすい形式を提供し、さまざまなスキルレベルの開発者がコードにアクセスしやすくします。

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

リソースの命名

従うべき重要なルールの一つは、リソース名にリソースタイプを繰り返さないことです。部分的な繰り返しも完全な繰り返しも推奨されません。例えば、aws_route_tableというリソースタイプに対して、route_tableを繰り返すべきではありません。

# good
`resource "aws_route_table" "public" {}`

# bad
`resource "aws_route_table" "public_route_table" {}`

# bad
`resource "aws_route_table" "public_aws_route_table" {}`

'this'または'main'リソース名

もしもより具体的で一般的な名前が利用できない場合、またはリソースモジュールが特定のタイプの単一のリソースのみを作成する場合、リソース名はthisまたはmainとするべきです。

resource "aws_security_group" "this" {
  # ... other arguments omitted
}

ハイフンの使用

ハイフンは、引数の値の内部や、人間に公開される場所で使用するべきです。例えば、RDSインスタンスのDNS名の内部で使用します。

resource "aws_db_instance" "this" {
  identifier = "my-rds-instance"
  # ... other arguments omitted
}

'count'と'for_each'引数の配置

countまたはfor_each引数は、リソースまたはデータソースブロック内の最初の引数として、それらの上に改行で区切って含めると良いです。

# good
resource "aws_route_table" "public" {
  count = 2

  vpc_id = "vpc-12345678"
  # ... remaining arguments omitted
}

# bad
resource "aws_route_table" "public" {
  vpc_id = "vpc-12345678"
  count  = 2

  # ... remaining arguments omitted
}

'tags'、'depends_on'、および'lifecycle'引数の配置

リソースがサポートしている場合、tags引数は最後の実際の引数として含めるべきであり、必要であればdepends_onlifecycleが続きます。それぞれは、空行を1つ空けて区切られると良いです。

# good
resource "aws_nat_gateway" "this" {
  count = 2

  allocation_id = "..."
  subnet_id     = "..."

  tags = {
    Name = "..."
  }

  depends_on = [aws_internet_gateway.this]

  lifecycle {
    create_before_destroy = true
  }
}

# bad
resource "aws_nat_gateway" "this" {
  count = 2

  tags = "..."

  depends_on = [aws_internet_gateway.this]

  lifecycle {
    create_before_destroy = true
  }

  allocation_id = "..."
  subnet_id     = "..."
}

参考

https://www.terraform-best-practices.com/naming

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!