プロビジョナーブロック付きリソースのフォーマット
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レベルのネストを処理します:
- リソースレベル:
ami、instance_type、key_name— 2スペースで揃え - ブロックレベル:
connection、provisioner、lifecycle— 内容は4スペースで - リスト値:
vpc_security_group_idsとinlineリストの項目はブラケット内でインデント
リストのフォーマット
文字列のリスト(セキュリティグループIDやインラインコマンドなど)は以下のようにフォーマットされます:
- 開きブラケットはキーと同じ行
- 各項目は末尾カンマ付きで独自の行
- 閉じブラケットはキーのインデントレベルで独自の行
ユースケース
初期サーバーセットアップ、構成管理ブートストラップ、デプロイ後スクリプトのためにプロビジョナーを使用するTerraform設定のフォーマット。