状态文件中包含 Terraform 远程状态 s3 存储桶创建?

vam*_*hna 5 amazon-s3 amazon-web-services terraform

我正在寻找在 S3 存储桶中创建和存储状态文件的最佳实践。

  1. 我应该将 S3 存储桶的创建与基础设施一起包括在内吗?
  2. 为其 S3 存储桶创建一个单独的状态文件,并为资源创建一个不同的状态文件。

如果它是一个不同的文件,我还需要存储创建的 s3 存储桶的状态文件,那么在这种情况下,我应该创建两个 s3 存储桶,一个用于基础设施状态,另一个用于 s3 存储桶状态文件。

其次,如果设置了远程配置并执行 'terraform destroy' 会抛出一个错误,无法上传状态文件:找不到这样的存储桶,因为存储桶已被销毁。我应该先禁用 terraform remote config -disable 然后运行 ​​terraform destroy 吗?我应该遵循的最佳实践是什么?

小智 5

我个人使用 Terraform 基础堆栈来有效引导 AWS 帐户以与 Terraform 一起使用。该堆栈仅在本地存储其状态文件,然后将其提交给版本控制。这个堆栈应该只需要运行一次,所以我认为不使用远程后端没有问题。

我的 Terraform 基础堆栈创建:

  • Terraform 的 IAM 用户将在未来运行
  • s3 存储状态的 Bucket
  • 用于加密/解密状态的 KMS CMK
  • 强制加密的存储桶策略声明
  • 斗政策声明,以防止Terraform用户做任何事情,但s3:putObjects3:getObject与国家
  • KMS 策略声明,以防止 Terraform 用户执行除kms:GenerateDataKey*& 之外的任何操作kms:Decrypt
  • 用于状态锁定的 DynamoDB 表。

这可以扩展为包括角色,尤其是当您的 Terraform 用户将跨多个帐户进行部署时。


yda*_*coR 2

如果您想存储将存储状态的事物的状态,那么这里就会遇到先有鸡还是先有蛋的问题。

在 Terraform 之外创建 S3 存储桶很容易,因此我永远不会费心在 Terraform 中为实际状态存储桶执行此操作,然后使用 Terraform 创建其他所有内容。

轻松创建 S3 存储桶(或远程状态现在涵盖的其他 S3 类型存储选项之一)是使用 S3 来支持状态文件的主要好处之一,而不是使用 Consul,后者需要您构建一个实例集群并配置它们,然后才能存储任何状态文件。