在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"
    }
  }
}
 
    