この記事では、Terraformの count
の使い方をサンプルコードを交え記載しております。
尚、AWSリソースの作成を繰り返す方法を紹介しています。
countとは
count
は、特定のリソースを複数回作成するために利用します。
数値を指定することで、その数値の回数だけリソースを作成することが可能です。
https://developer.hashicorp.com/terraform/language/meta-arguments/count
基本的な使い方1
count
の基本的な使い方を見てみましょう。
以下のコードスニペットは、AWSのセキュリティグループを3つ作成します。
resource "aws_security_group" "example" { count = 3 name = "sg-example-${count.index}" description = "Example security group" ingress { from_port = 22 to_port = 22 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] } }
ここで、count
キーワードにより、3つのセキュリティグループが作成されます。
また、${count.index}
は、現在の反復のインデックスを返す特殊な変数です。(詳細は後述)
基本的な使い方2
resource "aws_instance" "example" { count = 3 ami = "ami-0c94855ba95c574c8" instance_type = "t2.micro" }
このコードは、同じ設定のEC2インスタンスを3つ作成します。
count
の値を変更することで、作成するインスタンスの数を調整できます。
count.indexの利用
count
と組み合わせてcount.index
を利用することで、インスタンスごとに異なる設定を行うことも可能です。以下にその例を示します。
resource "aws_instance" "example" { count = 3 ami = "ami-0c94855ba95c574c8" instance_type = "t2.micro" tags = { Name = "example-instance-${count.index + 1}" } }
この例では、各インスタンスのNameタグにインスタンスの番号を付けています。
count.index
は0から始まるため、人間が使いやすい1から始まる数字にするために+ 1
をしています。
条件付きでリソースを作成する
count
は、条件によってリソースを作成するかどうかを制御するのにも使えます。以下にその例を示します。
variable "create_instance" { description = "Create instance or not" type = bool default = false } resource "aws_instance" "example" { count = var.create_instance ? 1 : 0 ami = "ami-0c94855ba95c574c8" instance_type = "t2.micro" }
この例では、create_instance
変数がtrueの場合にのみインスタンスを作成します。
変数のデフォルト値はfalseなので、何も指定しなければインスタンスは作成されません。
countの注意点
count
は強力ですが、注意点もあります。
順序の変更:
count
を使用すると、リソースの順序が重要になります。順序が変わると、Terraformは新しいリソースを作成し、既存のリソースを破棄します。これはコストやダウンタイムにつながる可能性があります。条件付き作成:
count
は、条件付きのリソース作成をサポートしています。条件付きリソースの作成には、三項演算子 (condition ? true_val : false_val
) を使用します。
以下に例を示します:
variable "create_sg" { description = "Should we create the security group?" default = false } resource "aws_security_group" "example" { count = var.create_sg ? 1 : 0 name = "sg-example" description = "Example } 以上です。