Terraformでは、count はリソースを条件に応じて動的に作成するために非常に便利なメタパラメータです。
1. 基本的な使い方
count をリソースブロックに指定すると、作成するリソースの数を決められます。
resource "aws_instance" "example" {
count = 3
ami = "ami-12345678"
instance_type = "t2.micro"
}
- 上記では3つのEC2インスタンスが作成されます。
- Terraformは各インスタンスに自動的にインデックスを付けます:
aws_instance.example[0],aws_instance.example[1],aws_instance.example[2]
2. 条件に応じたリソース作成
条件式を使って、作成するかどうかを制御できます。
variable "create_instance" {
default = true
}
resource "aws_instance" "example" {
count = var.create_instance ? 1 : 0
ami = "ami-12345678"
instance_type = "t2.micro"
}
-
create_instanceがfalseの場合は作成されません。 -
trueの場合は1つ作成されます。
3. インデックスを使ったリソース属性の指定
count.index は現在のリソースインデックスを表します。名前やタグなどに動的に使用できます。
resource "aws_instance" "example" {
count = 3
ami = "ami-12345678"
instance_type = "t2.micro"
tags = {
Name = "example-${count.index}"
}
}
- タグは順に
example-0,example-1,example-2になります。
4. リストやマップに基づく動的作成
リストやマップの長さに応じてリソースを作成できます。
variable "servers" {
default = ["web1", "web2", "web3"]
}
resource "aws_instance" "example" {
count = length(var.servers)
ami = "ami-12345678"
instance_type = "t2.micro"
tags = {
Name = var.servers[count.index]
}
}
- 3つのインスタンスが作成され、タグは
web1,web2,web3となります。
5. 注意点
-
countは整数または整数を返す条件式である必要があります。 - 同じリソースブロックで
for_eachと同時に使用できません。 -
countの数を変更すると:- 数を増やす → 新しいリソースが作成されます。
- 数を減らす → 余分なリソースが破棄されます。
まとめ
-
countはリソースを複数作成したり、条件付きで作成したりするために使います。 - よく使われるケース:
- 同じリソースを複数作成
- 条件に応じてリソースを作成(0または1)
- リストやマップに基づく動的作成
-
count.indexを活用すると、動的に名前やタグを設定可能です。