【发布时间】:2023-03-22 21:33:01
【问题描述】:
地形 0.9.5。
我正在整理一组模块,我们的基础架构团队和自动化团队将使用这些模块以标准方式创建资源,然后创建堆栈以提供不同的环境。一切运作良好。
像所有使用terraform 共享状态的团队一样,成为一个问题。我已将 terraform 配置为使用 s3 后端,即版本化和加密,通过 dynamo db 表添加锁。完美的。一切都适用于本地帐户...好的问题...
我们有多个 aws 帐户,1 个用于 IAM,1 个用于计费,1 个用于生产,1 个用于非生产,1 个用于共享服务等等……你知道我要去哪里。我的问题如下。
我以 IAM 账户中的用户身份进行身份验证并担任所需角色。在我引入 terraform 后端配置以利用 s3 共享状态之前,这一直像梦一样工作。看起来 terraform 中的后端配置需要在 ~/.aws/credentials 中设置默认凭据。看起来这些用户必须是创建 s3 存储桶的帐户的本地用户。
有没有办法让后端配置设置使用在提供程序中配置的凭据和角色?有没有更好的方法来配置共享状态和锁定?欢迎任何建议:)
更新:搞定了。我在创建 s3 存储桶的帐户中创建了一个新用户。创建了一个策略,只允许新用户 s3:DeleteObject、GetObject、PutObject、ListBucket 和 dynamodb:* 在特定的 s3 存储桶和 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"
}
}
它可以工作,但需要在您的个人资料中进行初始配置才能使其正常工作。如果有人知道更好的设置或可以识别我的后端配置的问题,请告诉我。
【问题讨论】:
-
从你的描述来看,很多主要观点都是基于的。 Terraform 从不要求您共享状态文件。
-
它似乎按预期工作。我为每个堆栈使用不同的键,并使用一个 dynamodb 表。
-
@BMW 这是推荐的。 “在团队中使用 Terraform 时,使用本地文件会使 Terraform 的使用变得复杂,因为每个用户在运行 Terraform 之前必须确保他们始终拥有最新的状态数据,并确保没有其他人同时运行 Terraform”terraform.io/docs/state/remote.html
标签: amazon-s3 amazon-dynamodb terraform