ゆるりっとIaCをやってみよう #2 VPC
こんにちわ。
zennの記事も書きたいけど、動画編集もやりたいゲームもしたい、AWSの試験対策もしたい、、、
プライベートの時間がさっぱり足りない系男子です。
さて、前回はTerraformのリソース構成を共有するためのs3 bucketを作成してみました。
今回はVPCを作ってみます
新しく「networks」というフォルダを作成しました。
ネットワーク関連はここに作っていこうと思います。
フォルダ構成はこんな感じ
terraform
├── common
└── networks
1つ目:networks/terraform.tf
今回から作成するリソースの構成情報をローカルではなく、前回作成したs3に保存していきます。
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.2.0"
}
}
backend "s3" {
bucket = "yururitto-tfstate-backet"
key = "tfstate-files/dev/vpc.tfstate"
region = "ap-northeast-1"
}
required_version = "~> 1.1.3"
}
backend "s3"
この部分でtfstateの保存先を設定していきます。
bucket
: 前回作ったバケット名を指定
key
: プレフィックス
region
: リージョンの指定
2つ目:networks/provider.tf
common/provider.tfと同じ
3つ目:networks/resource_network.tf
VPCをコンソールから作るとしたらこんな感じですかね。
では早速、コード化していくとします。
resource "aws_vpc" "main-vpc" {
cidr_block = "172.16.0.0/16"
instance_tenancy = "default"
tags = {
Name = "yururitto-infra-vpc"
}
}
確認してみましょう : terraform plan
今回は作業フォルダが違うので、 terraform init
も忘れずに。
$ 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.yururitto-vpc will be created
+ resource "aws_vpc" "main-vpc" {
+ arn = (known after apply)
+ cidr_block = "172.16.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_classiclink = (known after apply)
+ enable_classiclink_dns_support = (known after apply)
+ enable_dns_hostnames = (known after apply)
+ enable_dns_support = true
+ 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" = "yururitto-infra-vpc"
}
+ tags_all = {
+ "Environments" = "dev"
+ "Managed" = "terraform"
+ "Name" = "yururitto-infra-vpc"
+ "Service" = "Yururitto"
}
}
Plan: 1 to add, 0 to change, 0 to destroy.
う・・・美しい・・・ハッ!!
今まで手作業でやってた事がコード化されるって本当に素晴らしいですよね。
うーん、もうちょっと楽したいな
まだ小さいリソースなのでハードコーディングでやってますが、今後、修正が出た時に
面倒になってくるな、、、という事でちょっと変数化をしてみたいと思います。
変数に切り出そう:local values
後々の運用で修正が大変になりそうな共通の値などは変数化した方が管理も楽になりますね。
なので、variables.tfを作ってそこに変数を用意しましょう。
公式:local values
locals {
service_name = "yururitto"
vpc_cidr = "172.16.0.0/16"
}
locals{ key = "value" }
で作っていきます。
これに合わせて、resource_network.tfの方も修正します。
resource "aws_vpc" "main-vpc" {
cidr_block = "${local.vpc_cidr}"
instance_tenancy = "default"
tags = {
Name = "${local.service_name}-infra-vpc"
}
}
local.key
で変数を呼び出してあげます。
planはどうじゃろ?
+ resource "aws_vpc" "main-vpc" {
+ arn = (known after apply)
+ cidr_block = "172.16.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_classiclink = (known after apply)
+ enable_classiclink_dns_support = (known after apply)
+ enable_dns_hostnames = (known after apply)
+ enable_dns_support = true
+ 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" = "yururitto-infra-vpc"
}
+ tags_all = {
+ "Environments" = "dev"
+ "Managed" = "terraform"
+ "Name" = "yururitto-infra-vpc"
+ "Service" = "Yururitto"
}
}
Plan: 1 to add, 0 to change, 0 to destroy.
いい感じじゃないですか(恍惚)
<余談>
下のような事ってできないもんかなと思ってしまいました(ansible脳)
たぶん何かしらやり方はあるんだろうなぁと思いつつ先にいきます。
terraform
├── vars # ←こんな感じの
| └── develop_vars.tf
├── common
└── networks # この下で実行しても読み込めたら嬉しい
いざ実行!:terraform apply
Enter a value: yes
aws_vpc.main-vpc: Creating...
aws_vpc.main-vpc: Creation complete after 1s [id=vpc-0e62d30b251ee1aaf]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
無事成功!!
見事、VPCが完成です。
まとめ
今回はvpcの作成とlocal valuesを使用してみました。
ここからsubneetやinternet gatewayを作っていこうと思いますので、
次回もゆるりっとお付き合い頂ければと思います。
ありがとうございました。
Discussion