我正在寻找在S3存储桶中创建和存储我的状态文件的最佳实践。
如果它是一个不同的文件我还需要存储创建的s3存储桶的状态文件,那么在这种情况下我应该创建两个s3存储桶,一个用于基础架构状态,另一个用于s3存储桶状态文件。
其次,如果设置了远程配置并且执行'terraform destroy'会让我错误上传状态文件:找不到这样的存储桶,因为存储桶已被销毁。我应该首先禁用terraform远程配置-disable然后运行terraform destroy? 我应该遵循的最佳做法是什么?
答案 0 :(得分:2)
如果你想存储将存储州的物品的状态,你在这里有鸡和蛋的问题。
在Terraform之外创建一个S3存储桶非常简单,所以我永远不会在Terraform中为实际的状态存储桶做这件事,然后使用Terraform创建其他所有东西。
创建S3存储桶(或者现在由远程状态覆盖的其他S3类型存储选项之一)的简便性是使用S3来支持状态文件的主要好处之一,而不是像Consul那样需要你的在存储任何状态文件之前构建实例集并配置它们。
答案 1 :(得分:2)
我个人使用Terraform基础堆栈来有效地引导AWS账户以便与Terraform一起使用。此堆栈仅在本地存储其状态文件,然后将其提交到版本控制。这个堆栈应该只需要运行一次,所以我认为没有使用远程后端没有问题。
My Terraform基础堆栈创建:
var count = Db.RESOURCE_Resource
.Include(i => i.RESOURCE_Value.Where(s => s.ApplicatieID == applicationId))
.Include(i => i.RESOURCE_Category)
.Where(w => missingCultureIds.All(a => w.RESOURCE_Value.All(an => an.CultureID != a))).Count();
var results = Db.RESOURCE_Resource
.Include(i => i.RESOURCE_Value.Where(s => s.ApplicatieID == applicationId))
.Include(i => i.RESOURCE_Category)
.Where(w => missingCultureIds.All(a => w.RESOURCE_Value.All(an => an.CultureID != a))).Skip(pageSize).Take(pageSize*pageNumber);
&之外的任何操作的存储策略声明s3:putObject
状态s3:getObject
&之外的任何操作kms:GenerateDataKey*
这可以扩展为包含角色,特别是如果您的Terraform用户将在多个帐户中部署。