🧚‍♀️

ゆるりっとIaCをやってみよう #4 gatewayとroute

2022/02/27に公開

コンニチワ。
前回はサブネットまで作成したので、Internet GatewayとRoute Tableを作って
ネットワークをつなげていきたいと思います。
今日もゆるりっとTerraformでインフラを組んでいきますので、お付き合い頂ければ幸いです。

前回の記事はこちら
https://zenn.dev/yururitto_ryuji/articles/ecac421231313f

まずはInternetGateway

インターネットと前回作成したパブリックサブネットを繋ぐInternetGatewayをつくりましょ。
公式:internet_gateway

# networks/resource_network.tf
resource "aws_internet_gateway" "igw" {
  vpc_id = aws_vpc.main-vpc.id
  tags = {
    Name = "${local.service_name}-internet-gateway"
  }
}

これは楽勝ですね。次はRoute TableですがVPCを作った時に出来るデフォルトのルートテーブルを
タグだけ付けてそのまま使っちゃいましょう。
公式:default_route_table

This is an advanced resource with special caveats. Please read this document in its entirety before using this resource
の資料は、特別な注意事項がある上級者向けの資料です。このリソースを使用する前に、このドキュメント全体をお読みください。

公式にもかかれていますが、default_route_tableはVPC作成時に生成されるデフォルトの
ルートテーブルなので扱いには注意しましょう。
今回はあくまで「リソースを判別するのにタグをつけるだけ」にします。

# networks/resource_network.tf
# 前述のinternet_gatewayの下に書いていきます。

resource "aws_default_route_table" "default_route_t" {
  default_route_table_id = aws_vpc.tof-vpc.default_route_table_id
  tags = {
    Name = "${local.name}-default-route-table"
  }
}

以下で直前に作ったinternet gatewayからデフォルトのルートテーブルのIDを参照してます。

default_route_table_id = aws_vpc.main-vpc.default_route_table_id

よぉぉぉぉし!!いいよ!いいよ!!バンバンいこう!!!!

ルートテーブルにサブネットを関連付けちゃおう

ルートテーブルへのサブネット登録はroute_table_associationを使います。
ここもlocal_variables.tfの値を使って登録していきます。

公式:route_table_association

resource "aws_route_table_association" "pub_route" {
  for_each = local.public_subnets
  subnet_id = aws_subnet.public-subnets[each.value.name].id
  route_table_id = aws_vpc.main-vpc.default_route_table_id
}

登録するsubnetのidは aws_subnet.public[each.value.name].id という感じで先に作成した
サブネットから参照します。
[each.value.name]にはlocal_variables.tfのnameが入ってきます。

それでは確認・実行タイム!:terraform plan & apply

$ terraform apply
aws_vpc.main-vpc: Refreshing state... [id=vpc-0e62d30b251ee1aaf]
aws_subnet.public-subnets["public-1a-secondary"]: Refreshing state... [id=subnet-05dd8634d5460da8a]
aws_subnet.public-subnets["public-1c-secondary"]: Refreshing state... [id=subnet-0ec32d108cdee7f16]
aws_subnet.public-subnets["public-1a-primary"]: Refreshing state... [id=subnet-0d32512d24eeb8559]
aws_subnet.public-subnets["public-1c-primary"]: Refreshing state... [id=subnet-0219bdd22899506d8]

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # aws_default_route_table.default_route_t will be created
  + resource "aws_default_route_table" "default_route_t" {
      + arn                    = (known after apply)
      + default_route_table_id = "rtb-0077b0f8a34fa03df"
      + id                     = (known after apply)
      + owner_id               = (known after apply)
      + route                  = (known after apply)
      + tags                   = {
          + "Name" = "yururitto-default-route-table"
        }
      + tags_all               = {
          + "Environments" = "dev"
          + "Managed"      = "terraform"
          + "Name"         = "yururitto-default-route-table"
          + "Service"      = "Yururitto"
        }
      + vpc_id                 = (known after apply)
    }

  # aws_internet_gateway.igw will be created
  + resource "aws_internet_gateway" "igw" {
      + arn      = (known after apply)
      + id       = (known after apply)
      + owner_id = (known after apply)
      + tags     = {
          + "Name" = "yururitto-internet-gateway"
        }
      + tags_all = {
          + "Environments" = "dev"
          + "Managed"      = "terraform"
          + "Name"         = "yururitto-internet-gateway"
          + "Service"      = "Yururitto"
        }
      + vpc_id   = "vpc-0e62d30b251ee1aaf"
    }

  # aws_route_table_association.pub_route["public-1a-primary"] will be created
  + resource "aws_route_table_association" "pub_route" {
      + id             = (known after apply)
      + route_table_id = "rtb-0077b0f8a34fa03df"
      + subnet_id      = "subnet-0d32512d24eeb8559"
    }

(中略)


Apply complete! Resources: 6 added, 0 changed, 0 destroyed.
  • デフォルト・ルートテーブルの変更x1
  • インターネットゲートウェイの作成x1
  • サブネットの関連づけx4

合計6箇所の変更で予定通りでした!
関連付けもバッチリ!

今回のまとめ

今回、何度か出てきた「作ったリソースの情報を参照する」というのは色々な所で使うんだろうな
とおもいます。
次回はここにインスタンスを・・・と思いましたが、その前にIAMやSecurityGroupの方を
やってみようかなと思いますので、ゆるりっとお付き合い頂ければと思います。

何か、それっぽくなってきましたね!!

次回予告

次はこの調子でEC2を立てたいなと思いますが、、、

自身の見通しが甘かったという事に気付くのはこれから数時間後の事であった

というフラグでした。
ぐぬぬ!とあれこれ調べたり試したりしてますので、少々お待ちください(ぺこり

Discussion