在多个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
如果你有更不同的方法或者你自己有其他的做法,请告诉我。