在多个AWS账户中执行terraform

我想做的事情 (Wǒ zuò de

我想使用Terraform工作区,在多个AWS环境中执行Terraform。

前提 tí)

在这篇文章中,我们假设对于hoge项目,希望在不同的AWS账户中分别创建dev/stg/prd环境。此外,假设已经获得了具有创建资源权限的access_key / secret_key,并将其保存在执行terraform命令的机器的$HOME/.aws/credentials文件中。

实施

最终的实施采取了以下形式。

[dev-hoge]
aws_access_key_id=AKIAXXXXXXXXXXXXXX
aws_secret_access_key=eD1vNSXXXXXXXXXXXXXXXXXXXXXXXXXXXX

[stg-hoge]
aws_access_key_id=AKIAXXXXXXXXXXXXXX
aws_secret_access_key=eD1vNSXXXXXXXXXXXXXXXXXXXXXXXXXXXX

[prd-hoge]
aws_access_key_id=AKIAXXXXXXXXXXXXXX
aws_secret_access_key=eD1vNSXXXXXXXXXXXXXXXXXXXXXXXXXXXX
terraform {
  backend "s3" {
    bucket                  = "<bucket_name>"
    key                     = "terraform.tfstate"
    region                  = "ap-northeast-1"
    dynamodb_table          = "<dynamo_db_table_name>"
    shared_credentials_file = "$HOME/.aws/credentials"
    profile                 = "dev-hoge"
  }
  required_providers {
    aws = ">= 2.43.0"
  }
}

provider "aws" {
  shared_credentials_file = "$HOME/.aws/credentials"
  profile                 = "${terraform.workspace}-hoge"
  region                  = "ap-northeast-1"
}

需要两个权限。
1. 需要访问保存terraform state的S3权限。
2. 需要对terraform执行时所涉及的账户创建资源的权限。
其中,1对应于上述代码中的terraform {}部分,2对应于provider “aws”部分。

作为要点,Terraform会将各个工作区的环境名称嵌入到${terraform.workspace}中,因此我们可以在这里切换要读取的配置文件。

执行

## 開発環境への適用
terraform workspace select dev
terraform plan
terraform apply 

## 検証環境への適用
terraform workspace select stg
terraform plan
terraform apply

## 本番環境への適用
terraform workspace select prd
terraform plan
terraform apply

如果你有更不同的方法或者你自己有其他的做法,请告诉我。

广告
将在 10 秒后关闭
bannerAds