在AWS上进行团队开发时,使用Terraform进行配置设置

首先

在AWS上进行团队开发的设置。
在CloudFormation中不需要考虑的设置,在Terraform中是必需的。
为了团队开发,需要单独构建以下资源。

    • S3をBackendとし、terraform.tfstateを管理する。

 

    DynamoDBにてlockをし、開発者の terraform apply の実行の排他制御をする。

将Terraform的版本设置为v1.1.6。

准备执行环境

请参考AWS上运行Terraform所需的配置。

※ 与CloudFormation相同。

建立S3和DynamoDB

    1. 使用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 资源构建步骤

    1. 执行以下命令以创建资源

 

    1. 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"
    }
  }
}
bannerAds