はじめに
学習目的でTerraformの簡単な構成を作っています。
今回作った構成はこんな形

Githubはこちら
GitHub - mura651/terraform_alb_and_ec2
Contribute to mura651/terraform_alb_and_ec2 development by creating an account on GitHub.
AZは冗長でパブリック、プライベートサブネットがそれぞれ存在し、ALB配下の片方のプライベートサブネットにWebサーバを配置。
外に出る経路としてNatGatewayを片系のみに配置しました。
それぞれ片系のみにしているのは深い意味は無く、学習目的であれば十分かなという所です。
解説
解説というほどではないけどいくつかポイントを羅列しておきます。
モジュール分割
terraform_alb_and_ec2/
├ env/
│ └ dev/ # ← tfvars と main.tf がある
└ modules/
├ vpc/ # VPC + IGW
├ route_table/ # Public / Private RT
├ public_subnet_alb/
├ private_subnet_web/
├ nat_gateway/
├ sec_grp/ # ALB SG + Web SG
├ alb/ # ALB + Target Group + Listener
└ web/ # EC2 + UserData
モジュールの分割については結構迷う所だと思います。
企業やプロジェクトによって方針も異なります。
今回のは実際に作っていく中でいい感じの所をさぐっていった感じです。これが正解とは思ってないですが。
localsについて
各モジュールの中で、locals.tfというファイルを作っています。
実際のコードはこちら
locals {
resource_name = "${var.name_prefix}-vpc"
common_tags = {
Name = local.resource_name
Environment = var.env
Application = var.app_name
}
}
VPCモジュールの中身はこれ
resource "aws_vpc" "this" {
enable_dns_hostnames = true
enable_dns_support = true
cidr_block = var.cidr_block
tags = local.common_tags
}
resource "aws_internet_gateway" "this" {
vpc_id = aws_vpc.this.id
tags = local.common_tags
}
タグは全リソース共通の部分があるので、これを各リソースに記述しておけば、全リソースに同一のタグを設定できます。
変更したい時は呼び出しもとの変数の値だけ変更すればOK。