在AWS上进行团队开发时,使用Terraform进行配置设置
首先
在AWS上进行团队开发的设置。
在CloudFormation中不需要考虑的设置,在Terraform中是必需的。
为了团队开发,需要单独构建以下资源。
-
- S3をBackendとし、terraform.tfstateを管理する。
- DynamoDBにてlockをし、開発者の terraform apply の実行の排他制御をする。
将Terraform的版本设置为v1.1.6。
准备执行环境
请参考AWS上运行Terraform所需的配置。
※ 与CloudFormation相同。
建立S3和DynamoDB
-
- 使用terraform-aws-tfstate-backend创建。
git clone https://github.com/cloudposse/terraform-aws-tfstate-backend
自定义S3存储桶名称。
variables.tf
variable “s3_bucket_name” {
type = string
default = “akane-dev-terraform-state”
description = “S3存储桶名称。如果没有提供,名称将由标签模块按照命名空间-阶段-名称的格式生成”
}
自定义DynamoDB表格名称。
variables.tf
variable “dynamodb_table_name” {
type = string
default = “akane-dev-terraform-state-lock”
description = “覆盖DynamoDB表格的名称,默认使用module.dynamodb_table_label.id”
}
使用terraform构建S3和DynamoDB。
terraform init
terraform apply -auto-approve
AWS资源构建内容
-
- VPC
-
- パブリックサブネット
-
- プライベートサブネット
-
- インターネットゲートウェイ
-
- ナットゲートウェイ
- ルートテーブル
为了构建VPC,需要单独创建以下文件。
akane (システム)
└── terraform
├── common
│ ├── variables.tf (パラメータ定義)
│ └── vpc.tf (VPC)
└── dev
└── main
├── backend.tf (S3とDynamoDBの利用設定)
├── main.tf (パラメータ設定)
└── providers.tf (AWSの設定)
AWS 资源构建步骤
-
- 执行以下命令以创建资源
-
- cd ~/akane/terraform/dev/main
terraform init
terraform apply -auto-approve
执行以下命令以删除资源
cd ~/akane/terraform/dev/main
terraform destroy -auto-approve
构建模板
1. 参数设置
variable "aws_default_region" {
type = string
default = "ap-northeast-1"
}
variable "aws_account_id" {
type = string
}
variable "env" {
type = string
}
variable "akane_cidr" {
type = string
}
2. 虚拟专用网络 (VPC)
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
name = "jins-${var.env}"
cidr = var.jins_cidr
azs = ["ap-northeast-1a", "ap-northeast-1c", "ap-northeast-1d"]
public_subnets = [cidrsubnet(var.akane_cidr, 8, 10), cidrsubnet(var.akane_cidr, 8, 11), cidrsubnet(var.jins_cidr, 8, 12)]
private_subnets = [cidrsubnet(var.akane_cidr, 8, 20), cidrsubnet(var.akane_cidr, 8, 21), cidrsubnet(var.jins_cidr, 8, 22)]
database_subnets = [cidrsubnet(var.akane_cidr, 8, 30), cidrsubnet(var.akane_cidr, 8, 31), cidrsubnet(var.jins_cidr, 8, 32)]
enable_nat_gateway = true
single_nat_gateway = false
one_nat_gateway_per_az = true # One NAT Gateway per availability zone
enable_vpn_gateway = true
enable_dns_hostnames = true
enable_dns_support = true
dhcp_options_domain_name_servers = ["AmazonProvidedDNS"]
public_subnet_tags = {
"kubernetes.io/role/elb" = "1"
}
}
3. 为S3和DynamoDB进行配置设置
terraform {
required_version = ">= 1.1.6"
backend "s3" {
bucket = "akane-dev-terraform-state"
key = "terraform.tfstate"
region = "ap-northeast-1"
encrypt = true
dynamodb_table = "akane-dev-terraform-state-lock"
}
}
四. 参数设定 (Sì.
module "common" {
source = "../../common"
env = "dev"
aws_account_id = "XXXXXXXXXXXX"
aws_default_region = "ap-northeast-1"
jins_cidr = "10.0.0.0/16"
}
5. AWS的配置
provider "aws" {
region = "ap-northeast-1"
default_tags {
tags = {
Environment = "dev"
Terraform = "true"
}
}
}