0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[IaCを学ぼう第4回] Terraform(HCL)におけるリソースIDの動的参照

Posted at

これは何?

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_vpcvpcという名前のリソースのidを参照してねという書き方ができます。
このように書いておくと、サブネットもTerraformで作成したVPCに紐づく形で作成してくれます。

まとめ

この書き方はほぼ確実に多用するので是非覚えておきましょう。
次回は繰り返し構文について書きますー。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?