はじめに
VPCを作らないことには各種サービスを使うことができなかったりするので、Public/Privateのよく使われるVPCを構築できるようになりましょう。
必要なコンポーネントはこんな感じかな。
- VPC
- Subnet(Public*2、Private*2)
- Route Table(Public、Private)
- Internet Gateway
設定ファイル
一旦設定ファイルの全体を公開。
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 2.70"
}
}
}
provider "aws" {
profile = "default"
region = "ap-northeast-1"
}
# VPC
resource "aws_vpc" "default" {
cidr_block = "10.0.0.0/16"
tags = {
Name = "vpc-NAME"
}
}
# Subnet
resource "aws_subnet" "pub-1" {
vpc_id = aws_vpc.default.id
cidr_block = "10.0.1.0/24"
tags = {
Name = "subnet-pub-NAME-1"
}
}
resource "aws_subnet" "pub-2" {
vpc_id = aws_vpc.default.id
cidr_block = "10.0.2.0/24"
tags = {
Name = "subnet-pub-NAME-2"
}
}
resource "aws_subnet" "prv-1" {
vpc_id = aws_vpc.default.id
cidr_block = "10.0.11.0/24"
tags = {
Name = "subnet-prv-NAME-1"
}
}
resource "aws_subnet" "prv-2" {
vpc_id = aws_vpc.default.id
cidr_block = "10.0.12.0/24"
tags = {
Name = "subnet-prv-NAME-2"
}
}
# Internet GW
resource "aws_internet_gateway" "default" {
vpc_id = aws_vpc.default.id
tags = {
Name = "igw-NAME"
}
}
# Route Table
resource "aws_route_table" "pub" {
vpc_id = aws_vpc.default.id
route {
cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.default.id
}
tags = {
Name = "rtb-pub-NAME"
}
}
resource "aws_route_table" "prv" {
vpc_id = aws_vpc.default.id
tags = {
Name = "rtb-prv-NAME"
}
}
resource "aws_route_table_association" "pub-1" {
subnet_id = aws_subnet.pub-1.id
route_table_id = aws_route_table.pub.id
}
resource "aws_route_table_association" "pub-2" {
subnet_id = aws_subnet.pub-2.id
route_table_id = aws_route_table.pub.id
}
resource "aws_route_table_association" "prv-1" {
subnet_id = aws_subnet.prv-1.id
route_table_id = aws_route_table.prv.id
}
resource "aws_route_table_association" "prv-2" {
subnet_id = aws_subnet.prv-2.id
route_table_id = aws_route_table.prv.id
}
VPC
TerraformのVPCのドキュメントを見ながら構築しましょう。
resource "aws_vpc" "default" {
cidr_block = "10.0.0.0/16"
tags = {
Name = "vpc-NAME"
}
}
resource名
aws_vpc
※defaultとしているのは、このVPCのIDなので何でも良いです。複数ある場合はより適切につけた方が良いでしょう。
必須項目
- cidr_block
※Nameタグはつけておいた方がConsole上見やすかったりするのでつけておこう。
Subnet
TerraformのSubnetドキュメントを見ながら構築しましょう。
resource "aws_subnet" "pub-1" {
vpc_id = aws_vpc.default.id
cidr_block = "10.0.1.0/24"
tags = {
Name = "subnet-pub-NAME-1"
}
}
resource "aws_subnet" "pub-2" {
vpc_id = aws_vpc.default.id
cidr_block = "10.0.2.0/24"
tags = {
Name = "subnet-pub-NAME-2"
}
}
resource "aws_subnet" "prv-1" {
vpc_id = aws_vpc.default.id
cidr_block = "10.0.11.0/24"
tags = {
Name = "subnet-prv-NAME-1"
}
}
resource "aws_subnet" "prv-2" {
vpc_id = aws_vpc.default.id
cidr_block = "10.0.12.0/24"
tags = {
Name = "subnet-prv-NAME-2"
}
}
resource名
aws_subnet
※pub-1とかはサブネットのIDとなるので、わかりやすくpub-1/pub-2/prv-1/prv-2としています。
必須項目
- vpc_id
- cidr_block
vpc_idの設定も、aws_vpc.default.idと他のサービスを参照できるので
※Nameタグはつけておいた方がConsole上見やすかったりするのでつけておこう。
Internet Gateway
TerraformのInternet Gatewayドキュメントを見ながら構築しましょう。
resource "aws_internet_gateway" "default" {
vpc_id = aws_vpc.default.id
tags = {
Name = "igw-NAME"
}
}
※編集中
Route Table
TerraformのRoute Tableドキュメントを見ながら構築しましょう。
resource "aws_route_table" "pub" {
vpc_id = aws_vpc.default.id
route {
cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.default.id
}
tags = {
Name = "rtb-pub-NAME"
}
}
resource "aws_route_table" "prv" {
vpc_id = aws_vpc.default.id
tags = {
Name = "rtb-prv-NAME"
}
}
TerraformのRoute Table Associationドキュメントを見ながら構築しましょう。
resource "aws_route_table_association" "pub-1" {
subnet_id = aws_subnet.pub-1.id
route_table_id = aws_route_table.pub.id
}
resource "aws_route_table_association" "pub-2" {
subnet_id = aws_subnet.pub-2.id
route_table_id = aws_route_table.pub.id
}
resource "aws_route_table_association" "prv-1" {
subnet_id = aws_subnet.prv-1.id
route_table_id = aws_route_table.prv.id
}
resource "aws_route_table_association" "prv-2" {
subnet_id = aws_subnet.prv-2.id
route_table_id = aws_route_table.prv.id
}
※編集中