【入門#4】TerraformでAWS基礎のネットワーク(VPC/サブネット等)を作ろう
今回の目標
AWS環境の基礎。ネットワーク部分をTerraformで構築していきます。
AWSコンソールでVPCを手動作成すると自動的にできちゃうセットがありますが
あれらを今回Terraformで用意していこうと思います!
※セット:VPC/サブネット/ルートテーブル/インターネットゲートウェイ
今回の記事での完成するAWS構成図は下記です。
最終的には別の記事でEC2が動く環境を作っていきます!
前提条件
下記記事の「【入門#3】TerraformでAWS情報と連携させよう」までが完了していること
TerraformでAWS(EC2/ECS)環境を作るまでの目次
実際に手を動かしていきましょう!
1.VPCを作る!
VPCを作っていきましょう。
今回はcask-tokyo-ec2-vpcという名前のVPCを作ります。
network.tfというファイルを新規で作成し、下記を記述します。
resource "aws_vpc" "cask-tokyo-ec2-vpc"{
cidr_block = "10.0.0.0/16"
enable_dns_hostnames = true
tags = {
Name = "cask-tokyo-ec2-vpc"
}
}
以上!!
えっ!!これだけ!?短すぎる、、、
この状態で下記を実行します。
terraform plan
そうすると下記のように、「あんた今回VPC作ろうとしてるね?」と表示されます。
現状のAWSに対して、変化点を表示してくれるようです。
ちなみにplanだけではAWSの環境に影響はありません。あくまでどうなるかのデモみたいなものですね。
$ terraform plan
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_vpc.cask_tokyo_ec2_vpc will be created
+ resource "aws_vpc" "cask_tokyo_ec2_vpc" {
+ arn = (known after apply)
+ cidr_block = "10.0.0.0/16"
+ default_network_acl_id = (known after apply)
+ default_route_table_id = (known after apply)
+ default_security_group_id = (known after apply)
+ dhcp_options_id = (known after apply)
+ enable_dns_hostnames = true
+ enable_dns_support = true
+ enable_network_address_usage_metrics = (known after apply)
+ id = (known after apply)
+ instance_tenancy = "default"
+ ipv6_association_id = (known after apply)
+ ipv6_cidr_block = (known after apply)
+ ipv6_cidr_block_network_border_group = (known after apply)
+ main_route_table_id = (known after apply)
+ owner_id = (known after apply)
+ tags = {
+ "Name" = "cask-tokyo-ec2-vpc"
}
+ tags_all = {
+ "Name" = "cask-tokyo-ec2-vpc"
}
}
Plan: 1 to add, 0 to change, 0 to destroy.
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now.
planの結果で問題なければ、実際に反映していきます。
terraform apply
>yes
できたのか。。?
おそるおそるAWSを確認すると。。
おっ!!できている!!
すごく簡単ですね!
引き続きサブネット/インターネットゲートウェイも作っていきましょう!!
2.サブネットを作る!
サブネットもVPCと同じ要領で行っていきましょう。
記述するファイルは、VPCと同じくでnetwork.tf
です。
ネットワーク関連はnetwork.tfに集めるのがベストプラクティスみたいです。
下記をnetwork.tfに記述していきます。
resource "aws_subnet" "cask_tokyo_ec2_subnet_public1" {
vpc_id = aws_vpc.cask_tokyo_ec2_vpc.id # ここはVPC作成時の名前を指定
cidr_block = "10.0.1.0/24"
availability_zone = "ap-northeast-1a"
map_public_ip_on_launch = true
tags = {
Name = "cask-tokyo-ec2-subnet-public1-ap-northeast-1a"
}
}
resource "aws_subnet" "cask_tokyo_ec2_subnet_public2" {
vpc_id = aws_vpc.cask_tokyo_ec2_vpc.id # ここはVPC作成時の名前を指定
cidr_block = "10.0.1.0/24"
availability_zone = "ap-northeast-1c"
map_public_ip_on_launch = true
tags = {
Name = "cask-tokyo-ec2-subnet-public2-ap-northeast-1c"
}
}
※設定値はよくあるAWSのデフォルト設定です。
これもterraform planを実行し、問題がなければそのままapplyしてみましょう。
実行した結果はAWSで下記のように確認ができるかと思います!
3.インターネットゲートウェイを作る!
こちらも記述するファイルは、VPCと同じくでnetwork.tf
です。
下記を記載し、terraform applyを行います。
resource "aws_internet_gateway" "cask_tokyo_ec2_igw" {
vpc_id = aws_vpc.cask_tokyo_ec2_vpc.id
tags = {
Name = "cask_tokyo_ec2_igw"
}
}
実行結果
ほぇぇ、、
4.ルートテーブルを作る!
ルートテーブルを定義し、VPC内の通信でインターネットゲートウェイへの通信路を作ります。
# ルートテーブルの作成
resource "aws_route_table" "cask_tokyo_ec2_rt" {
vpc_id = aws_vpc.cask_tokyo_ec2_vpc.id
route {
cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.cask_tokyo_ec2_igw.id
}
tags = {
Name = "cask_tokyo_ec2_rt"
}
}
# ルートテーブルとサブネットを紐づける
resource "aws_route_table_association" "cask_tokyo_ec2_rt_association_public1" {
subnet_id = aws_subnet.cask_tokyo_ec2_subnet_public1.id
route_table_id = aws_route_table.cask_tokyo_ec2_rt.id
}
resource "aws_route_table_association" "cask_tokyo_ec2_rt_association_public2" {
subnet_id = aws_subnet.cask_tokyo_ec2_subnet_public2.id
route_table_id = aws_route_table.cask_tokyo_ec2_rt.id
}
ここもいつものごとくterraform applyを行います。
VPCのリソースマップを見るとネットワークの構成ができています!!
これでネットワークは整いました。
いやー簡単ですね。。
まだ簡単なネットワークのみですが、Terraformすごく簡単に作れちゃいますね。
次回のリソース作成も期待。
VPCの名前や各リソースの名前は変数化していきますが、諸々構築が完了した段階で
別の記事に書いていきます!
関連記事
上記でEC2環境構築の続きをTerraformで作っていきますので、この先をTerraformで構築されたいかたは参考にどうぞ!
Discussion