我遇到了同样的问题,以下是我的用例。
AWS账户1:管理账户(在此创建IAM用户,该用户将扮演Dev和Prod账户的角色)
AWS账户2:开发环境账户(在此为受信任的账户创建角色,在这种情况下是管理账户用户)
AWS账户3:生产环境账户(在此为受信任的账户创建角色,在这种情况下是管理账户用户)
因此,我创建了一个名为
dev-backend.conf和
prod-backend.conf的文件,其内容如下。解决此问题的主要方法是在S3后端配置中传递“role_arn”值。
在dev-backend.conf和prod-backend.conf文件中定义以下内容。
bucket = "<your bucket name>"
key = "< your key path>"
region = "<region>"
dynamodb_table = "<db name>"
encrypt = true
profile = "< your profile>" # this profile has access key and secret key of the IAM user created in Management account
role_arn = "arn:aws:iam::<dev/prod account id>:role/<dev/prod role name >"
使用本地状态的dev s3桶配置初始化Terraform,并将其转换为S3状态。
$ terraform init -reconfigure -backend-config="dev-backend.conf"
使用开发环境变量文件执行Terraform apply
$ terraform apply --var-file="dev-app.tfvars"
使用dev s3 bucket中的prod s3 bucket配置初始化Terraform,以便将状态存储到prod s3 bucket中
$ terraform init -reconfigure -backend-config="prod-backend.conf"
使用生产环境变量文件进行Terraform应用程序执行
$ terraform apply --var-file="prod-app.tfvars"