はじめに
初めまして、こうへいです。今回からTerraformの記事を作成していきます。
Terraformを用いてAWSのアーキテクチャを構築することで、AWSのコンソールから確認することなくコードを見るだけでAWSの構成がわかるので、非常に便利だと思います。
記事の概要
TerraformでAWSのネットワークを作成したいと思います。今回はRegistryにあるmoduleを使用します。
記事執筆の背景
趣味でregistryのmoduleを使用してネットワークを作成しようとしたときに、
せっかくなら記事にしてみようと考えました。
想定読者
- AWSのネットワークをTerraformで構築しようと考えてる方
- registryのmoduleを使用して、構築したい方
今回作成するアーキテクチャ
今回作成するAWSリソース
- VPC
- Subnet
- Route-Table
- Internet-Gateway
- Elastic-Ip
- Nat-Gateway
ディレクトリ構成
.
├── modules
│ └── network
│ └── main.tf # networkを作成
└── provider.tf # networkのmoduleを呼び出し
Terraformのコードと解説
provider.tfではこのようにnetworkのmoduleを呼び出しています。
terraform {
required_version = "1.3.9"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~>5.0"
}
}
}
provider "aws" {
region = "ap-northeast-1"
}
module "network" {
source = "./modules/network"
}
modules/network/main.tfではこのようなコードを作成しました。
module "network" {
source = "terraform-aws-modules/vpc/aws"
version = "5.1.1"
cidr = "10.0.0.0/24" # VPCのcidr
azs = ["ap-northeast-1a", "ap-northeast-1c"] # 展開するAZ
public_subnets = ["10.0.0.0/26", "10.0.0.64/26"] # public-subnetのcidr
private_subnets = ["10.0.0.128/26", "10.0.0.192/26"] # private-subnetのcidr
public_subnet_names = ["public-subnet-1a", "public-subnet-1c"] # public-subnetの名前
private_subnet_names = ["private-subnet-1a", "private-subnet-1c"] # private-subnetの名前
enable_dns_hostnames = true # DNSホスト名を有効化
enable_dns_support = true # DNS解決を有効化
enable_nat_gateway = true # NatGatewayを有効化
one_nat_gateway_per_az = true # 1AZに対してNatGatewayを作成
map_public_ip_on_launch = true # publicサブネットにIPv4を自動割り当てる
vpc_tags = { Name = "vpc" }
public_route_table_tags = { Name = "route-table-public" }
private_route_table_tags = { Name = "route-table-private" }
igw_tags = { Name = "internet-gateway" }
nat_gateway_tags = { Name = "nat-gateway" }
nat_eip_tags = { Name = "elatic-ip" }
}
コード解説
- cidr : VPCのcidr
- azs : 展開するAZ名
- public_subnets : public-subnetのcidr
- private_subnets : private-subnetのcidr
- public_subnet_names : public-subnetの名前
- private_subnet_names : private-subnetの名前
- enable_dns_hostnames : DNSホスト名を有効化
- enable_dns_support : DNS解決を有効化
- enable_nat_gateway : NatGatewayを有効化
- one_nat_gateway_per_az : 1AZに対してNatGatewayを作成
- map_public_ip_on_launch : publicサブネットにIPv4を自動割り当てる
Nat-GatewayをAZごとに作成するのではなく、
一つしか作成したくないという場合はこのようにコードを書くと作成できます。
enable_dns_hostnames = true # DNSホスト名を有効化
enable_dns_support = true # DNS解決を有効化
enable_nat_gateway = true # NatGatewayを有効化
one_nat_gateway_per_az = false # 1AZに対してNatGatewayを作成しない
single_nat_gateway = true # NatGatewayを1つしか作成しない
map_public_ip_on_launch = true # publicサブネットにIPv4を自動割り当てる
振り返り
今回はRegistryにあるmoduleを使用してネットワークを作成しました。
NatGatewayは料金がかかりますので、不要なら必ずリソースを削除してください。
こちらのサイトを元に料金計算すると、1つのNatGatewayあたり6,703円かかりますのでご注意ください。(2023/9/10現在)
今回作成したgithubのリポジトリ : https://github.com/hikobend/terraform-qiita
ブランチ : https://github.com/hikobend/terraform-qiita/pull/1
今後作成予定の記事
- セキュリティグループの作成
- Terraform Plan ・ ApplyのCIを作成