如果我错了,请纠正我,当您运行terraform init
时,系统会要求您为Terraform状态命名存储帐户和容器。
这些也可以自动用terraform制作吗?
编辑:我正在使用Azure。
答案 0 :(得分:1)
我通常将Terraform配置分为两部分。
一个使用容器创建带有特定标签(例如tf=backend
)的存储帐户的帐户。第二个创建所有其他资源。我在两者之间共享一个backend.tfvars
,在第二个中,我使用Azure CLI和先前设置的标签获取了存储帐户密钥(这样,我不必获取密钥并将其手动传递给我第二个脚本)。
如果您不想依赖本地状态,甚至可以在部署后迁移第一个terraform配置的状态
答案 1 :(得分:0)
是的,绝对如此。通常,您可能希望为每个环境都使用一个S3存储桶,尽管也可以在所有环境中共享一个存储桶,然后使用存储桶策略来设置访问控制。不要在提供其他资源时创建该存储桶,因为它们的生命周期可能会有所不同(您可能希望将存储桶保留很长时间,并且不太可能希望销毁它)。
您要做的是首先使用本地状态在Terraform中定义此存储桶。创建完毕后,您将添加一个指向此存储桶的远程后端。
terraform {
required_version = ">= 0.11.7"
backend "s3" {
bucket = "my-state-bucket"
key = "s3_state_bucket"
region = "us-west-2"
encrypt = "true"
}
}
运行terraform init
后,Terraform将询问您是否要将本地状态文件迁移到S3。回答是,完成此操作后,您可以删除不再使用的本地状态文件。
这种方法使您可以摆脱困境,仍然可以将所有基础结构作为代码进行管理,而不必使用Web控制台或bash脚本手动创建。