プロビジョナーブロック付きリソースのフォーマット

remote-exec、local-exec、fileプロビジョナーを含むTerraformリソースを適切なネストとconnectionブロックでフォーマットします。

Resources

詳細な説明

プロビジョナーブロックのフォーマット

プロビジョナーはリソースブロックに複雑さを追加します。リソース自体、プロビジョナーブロック、そして多くの場合connectionブロックという複数レベルのネストを導入するためです。実行フローを理解するためにクリーンなフォーマットが不可欠です。

プロビジョナー付きの例

resource "aws_instance" "web" {
  ami           = data.aws_ami.ubuntu.id
  instance_type = var.instance_type
  key_name      = aws_key_pair.deployer.key_name
  subnet_id     = aws_subnet.public[0].id

  vpc_security_group_ids = [
    aws_security_group.web.id,
    aws_security_group.ssh.id,
  ]

  connection {
    type        = "ssh"
    user        = "ubuntu"
    private_key = file("~/.ssh/deployer.pem")
    host        = self.public_ip
  }

  provisioner "remote-exec" {
    inline = [
      "sudo apt-get update",
      "sudo apt-get install -y nginx",
      "sudo systemctl enable nginx",
      "sudo systemctl start nginx",
    ]
  }

  provisioner "local-exec" {
    command = "echo ${self.public_ip} >> inventory.txt"
  }

  lifecycle {
    create_before_destroy = true
    ignore_changes        = [ami]
  }

  tags = {
    Name = "web-server"
    Role = "frontend"
  }
}

ネスト構造

フォーマッターは3レベルのネストを処理します:

  1. リソースレベル: amiinstance_typekey_name — 2スペースで揃え
  2. ブロックレベル: connectionprovisionerlifecycle — 内容は4スペースで
  3. リスト値: vpc_security_group_idsinlineリストの項目はブラケット内でインデント

リストのフォーマット

文字列のリスト(セキュリティグループIDやインラインコマンドなど)は以下のようにフォーマットされます:

  • 開きブラケットはキーと同じ行
  • 各項目は末尾カンマ付きで独自の行
  • 閉じブラケットはキーのインデントレベルで独自の行

ユースケース

初期サーバーセットアップ、構成管理ブートストラップ、デプロイ後スクリプトのためにプロビジョナーを使用するTerraform設定のフォーマット。

試してみる — Terraform HCL Formatter

フルツールを開く