🦔
【Terraform】VPCとサブネットの作成
はじめに
TerraformでVPCとサブネットを作成します。
ファイル構成
.
├── main.tf
├── network.tf
└── terraform.tfvars
main.tfとterraform.tfvars
main.tf
#------------------
# Terraform configuration
#------------------
terraform {
#0.13以上
required_version = ">=0.13"
required_providers {
aws = {
source = "hashicorp/aws"
#おおよそ3.0以上(マイナーは気にしない)
version = "~> 3.0"
}
}
}
#------------------
# Provider
#------------------
provider "aws" {
profile = "ユーザー名"
region = "ap-northeast-1"
}
#------------------
# Variables
#------------------
variable "project" {
type = string
}
variable "environment" {
type = string
}
terraform.tfvars
project = "プロジェクト名"
environment = "dev"
VPC
- cidr_block : string : IPv4 CIDRブロック
- assign_generated_ipv6_cidr_block : string : IPv6 CIDRブロック
- instance_tenancy : enum : テナンシー(default,dedicated)
- enable_dns_support : bool : DNS解決
- enable_dns_hostnames : bool : DNSホスト名
- tags : object : タグ
network.tf
#------------------
#VPC
#------------------
resource "aws_vpc" "vpc" {
cidr_block = "192.168.0.0/20"
instance_tenancy = "default"
enable_dns_support = true
enable_dns_hostnames = true
assign_generated_ipv6_cidr_block = false
tags = {
Name = "${var.project}-${var.environment}-vpc"
Project = var.project
Env = var.environment
}
}
サブネット
- vpc_id : string : VPC ID
- availability_zone : string : アベイラビリティゾーン
- cidr_block : string : CIDRブロック
- map_public_ip_on_launch : bool : 自動割り当てIP設定
- tags : object : タグ
network.tf
#------------------
#Subnet
#------------------
#パブリックサブネット
resource "aws_subnet" "public_subnet_1a" {
vpc_id = aws_vpc.vpc.id
availability_zone = "ap-northeast-1a"
cidr_block = "192.168.1.0/24"
map_public_ip_on_launch = true
tags = {
Name = "${var.project}-${var.environment}-private-subnet-1a"
Project = var.project
Env = var.environment
Type = "public"
}
}
#プライベートサブネット
resource "aws_subnet" "private_subnet_1a" {
vpc_id = aws_vpc.vpc.id
availability_zone = "ap-northeast-1a"
cidr_block = "192.168.2.0/24"
map_public_ip_on_launch = false
tags = {
Name = "${var.project}-${var.environment}-private-subnet-1a"
Project = var.project
Env = var.environment
Type = "private"
}
}
ルートテーブル
下記2つを設定。
aws_route_table
- vpc_id : string : VPC ID
- tags : object : タグ
aws_route_table_association
- route_table_id : string : ルートテーブルID
- subnet_id : string : サブネットID
network.tf
#------------------
#Route Table
#------------------
resource "aws_route_table" "public_rt" {
vpc_id = aws_vpc.vpc.id
tags = {
Name = "${var.project}-${var.environment}-public-rt"
Project = var.project
Env = var.environment
Type = "public"
}
}
resource "aws_route_table_association" "public_rt_1a" {
route_table_id = aws_route_table.public_rt.id
subnet_id = aws_subnet.public_subnet_1a.id
}
resource "aws_route_table" "private_rt" {
vpc_id = aws_vpc.vpc.id
tags = {
Name = "${var.project}-${var.environment}-private-rt"
Project = var.project
Env = var.environment
Type = "private"
}
}
resource "aws_route_table_association" "private_rt_1a" {
route_table_id = aws_route_table.private_rt.id
subnet_id = aws_subnet.private_subnet_1a.id
}
インターネットゲートウェイ
パブリックサブネットをインターネットに繋げる。
下記2つを設定。
aws_route
- route_table_id : string : ルートテーブルID
- destination_cidr_block : string : 送信先
- gateway_id : string : インターネットゲートウェイID
aws_internet_gateway
- vpc_id : string : VPC ID
- tags : object : タグ
network.tf
#------------------
#Internet Gateway
#------------------
resource "aws_internet_gateway" "igw" {
vpc_id = aws_vpc.vpc.id
tags = {
Name = "${var.project}-${var.environment}-igw"
Project = var.project
Env = var.environment
}
}
resource "aws_route" "public_rt_igw_r" {
route_table_id = aws_route_table.public_rt.id
destination_cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.igw.id
}
Discussion