はじめに
Terraformを利用して、VPCを構築するテンプレートのサンプルです。
Terraformのバージョンは v1.1.6
とする。
コードはGitHubにもあります。
今回は、akane というシステムの dev 環境を想定しています。
同じ構成で違う環境を作成する場合は、{環境名}のディレクトリを別途作成します。
ディレクトリ構成
akane (システム)
├── common (共通テンプレート)
│ ├── network.tf (スタック)
│ ├── outputs.tf (リソースのアプトプット生成)
│ └── variables.tf (パラメータ型定義)
└── dev (dev 環境)
└── main (dev 環境のテンプレート)
├── locals.tf (dev 環境の共通パラメータ)
├── main.tf (dev 環境のパラメータ)
├── outputs.tf (リソースのアプトプット出力)
└── providers.tf (AWS プロバイダー)
AWS リソース構築内容
- VPC (10.0.0.0/16)
AWS システム構成図
実行環境の準備
AWSでTerraformを動かすための設定を参考にしてください。
AWS リソース構築手順
-
下記を実行してスタックを作成
cd akane/dev/main terraform init terraform apply
-
下記を実行してスタックを削除
cd akane/dev/main terraform destroy
構築テンプレート
1. 共通テンプレート
network.tf
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
name = "${var.system_name}-${var.env_type}-vpc"
cidr = var.vpc_cidr
}
outputs.tf
##############################
# Network
##############################
output "network_vpc_id" {
value = module.vpc.vpc_id
description = "The name of the VPC id."
}
variables.tf
variable "system_name" {
type = string
}
variable "env_type" {
type = string
}
variable "vpc_cidr" {
type = string
}
2. 環境毎のテンプレート
locals.tf
locals {
tags = {
"EnvType" = "dev"
"SystemName" = "akane"
"Terraform" = "true"
}
}
main.tf
module "common" {
source = "../../common"
system_name = local.tags.SystemName
env_type = local.tags.EnvType
vpc_cidr = "10.0.0.0/16"
}
outputs.tf
##############################
# Network
##############################
output "network_vpc_id" {
value = module.common.network_vpc_id
description = "The name of the VPC id."
}
providers.tf
provider "aws" {
region = "ap-northeast-1"
default_tags {
tags = local.tags
}
}