これは何?
IaCを学ぼうの第4回、Terraform(HCL)を使う場合のリソースIDの動的参照について説明する記事です。
どういうこと?
前回までの記事で以下のようにaws_vpc
を利用してVPCを作成したと思います。
resource "aws_vpc" "vpc" {
cidr_block = "10.0.0.0/16"
tags = {
Name = "test-vpc"
}
}
今回はここに追加でサブネットを作成できるようにコードを書いてみたいと思います。
書き方は以下です。
resource "aws_subnet" "subnet" {
vpc_id = "サブネットを紐づけるVPCのID"
cidr_block = "サブネットのIP範囲"
availability_zone = "サブネットを作成するアベイラビリティーゾーン"
map_public_ip_on_launch = "サブネット内に起動したリソースに対してパブリックIPを自動付与するか?"
tags = {
Name = "名前タグ名"
}
}
見るとわかる通り、vpc_id
としてサブネット作成時に「どのVPCに紐づけるか?」という情報が必要になるため
Terraformのコードにおいても紐づけるVPCのIDを記載する必要があります。
ところでこのID、VPC作成後に判明するのでterraform apply
を実行していない状況だとわからないですよね。
じゃあコード書けないじゃんどうすんの?というのが今回の主題となります。
どうすればいい?
Terraformはterraform apply
を実行して作成されたリソースが持つ属性(Attribute)を動的参照することができます。
resource "aws_subnet" "subnet" {
vpc_id = aws_vpc.vpc.id
cidr_block = "10.0.0.0/24"
availability_zone = "ap-northeast-1a"
map_public_ip_on_launch = "true"
tags = {
Name = "public-subnet-1a"
}
}
上記のようにaws_vpc
のvpc
という名前のリソースのid
を参照してねという書き方ができます。
このように書いておくと、サブネットもTerraformで作成したVPCに紐づく形で作成してくれます。
まとめ
この書き方はほぼ確実に多用するので是非覚えておきましょう。
次回は繰り返し構文について書きますー。