lifecycleとメタ引数ブロックのフォーマット

create_before_destroy、prevent_destroy、ignore_changes、replace_triggered_byを含むlifecycleブロックを適切なインデントと揃えでフォーマットします。

Resources

詳細な説明

lifecycleブロックのフォーマット

lifecycleメタ引数はTerraformがリソースを作成、更新、破棄する方法を制御します。リソースブロック内に配置され、重要なインフラの動作に影響するため、慎重なフォーマットが必要です。

lifecycleブロックの例

resource "aws_instance" "critical" {
  ami           = var.ami_id
  instance_type = var.instance_type

  lifecycle {
    prevent_destroy = true
  }

  tags = {
    Name = "critical-server"
  }
}

resource "aws_launch_template" "web" {
  name_prefix   = "web-"
  image_id      = data.aws_ami.ubuntu.id
  instance_type = var.instance_type

  lifecycle {
    create_before_destroy = true
    ignore_changes = [
      image_id,
      tags,
    ]
  }

  tags = {
    Name = "web-launch-template"
  }
}

フォーマットの詳細

  • 単一行 vs 複数行: 単一値のlifecycleルール(prevent_destroy = true)は1行に収まる
  • リスト属性: 複数の値を持つignore_changesは末尾カンマ付きの複数行リストを使用
  • ブロック配置: lifecycleブロックは通常リソース属性の後、tagsの前に配置
  • 区切り: lifecycleの前の空行で通常の属性と視覚的に区切り

メタ引数の順序規則

フォーマッターが維持する一般的な順序規則:

  1. countまたはfor_each(最初)
  2. 通常の属性
  3. ネストブロック(connectionprovisioner
  4. lifecycleブロック
  5. depends_on
  6. tags(最後)

ユースケース

誤削除からの保護が必要な重要インフラリソースの管理、またはcreate-before-destroyパターンによるゼロダウンタイム更新が必要なリソースの管理。

試してみる — Terraform HCL Formatter

フルツールを開く