Terraform 0.9.5。
我正在组建一组模块,我们的基础设施团队和自动化团队将使用这些模块以标准方式创建资源,并进而创建堆栈以提供不同的环境。所有工作都进行得很顺利。
像所有使用terraform的团队一样,共享状态成为一个问题。我已经配置了terraform使用S3后端,该后端是版本化和加密的,并通过dynamo db表添加了锁定。完美。所有本地帐户都可以正常工作...好吧,问题是...
我们有多个AWS帐户,1个用于IAM,1个用于计费,1个用于生产,1个用于非生产,1个用于共享服务等等...你知道我要说什么了。我的问题如下。
我以IAM帐户中的用户身份进行身份验证并承担所需的角色。这一直运行得很好,直到我引入了terraform后端配置来利用s3进行共享状态。看起来terraform中的后端配置需要在~/.aws/credentials中设置默认凭据。看起来这些凭据必须是属于创建s3存储桶所在帐户的本地用户。
有没有办法以这样的方式设置后端配置,使其使用在提供程序中配置的凭据和角色?有没有更好的方式来配置共享状态和锁定?欢迎任何建议:)
更新: 已解决。我在创建S3存储桶所在的帐户中创建了一个新用户。创建一个策略,只允许该新用户在特定的s3存储桶和dynamodb表上执行s3:DeleteObject,GetObject,PutObject,ListBucket和dynamodb:*操作。创建了一个自定义凭据文件,并添加了默认配置文件,其中包含分配给该新用户的访问和密钥。使用类似于以下的后端配置。
terraform {
required_version = ">= 0.9.5"
backend "s3" {
bucket = "remote_state"
key = "/NAME_OF_STACK/terraform.tfstate"
region = "us-east-1"
encrypt = "true"
shared_credentials_file = "PATH_TO_CUSTOM_CREDENTAILS_FILE"
lock_table = "MY_LOCK_TABLE"
}
}
它能够正常工作,但是在你的个人资料中需要进行初始配置才能使其正常工作。如果有人知道更好的设置或者可以识别我的后端配置问题,请让我知道。