如果我错了,请纠正我,当您运行时terraform init
,系统会要求您为 terraform 状态命名一个存储帐户和容器。
这些也可以用 terraform 自动制作吗?
编辑:我正在使用 Azure。
如果我错了,请纠正我,当您运行时terraform init
,系统会要求您为 terraform 状态命名一个存储帐户和容器。
这些也可以用 terraform 自动制作吗?
编辑:我正在使用 Azure。
我通常将我的 terraform 配置分为两部分。
一种创建带有容器的存储帐户,带有特定标签(tf=backend
例如)。第二个创建所有其他资源。我在两者之间共享一个backend.tfvars
,在第二个中,我使用 Azure CLI 和先前设置的标记获取存储帐户密钥(这样我就不必获取密钥并将其手动传递给我的第二个脚本)。
如果您不想依赖本地状态,您甚至可以在部署后迁移第一个 terraform 配置的状态
是的,一点没错。通常,您的每个环境都需要一个 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 脚本手动创建它。