1

如果我错了,请纠正我,当您运行时terraform init,系统会要求您为 terraform 状态命名一个存储帐户和容器。

这些也可以用 terraform 自动制作吗?

编辑:我正在使用 Azure。

4

2 回答 2

1

我通常将我的 terraform 配置分为两部分。

一种创建带有容器的存储帐户,带有特定标签(tf=backend例如)。第二个创建所有其他资源。我在两者之间共享一个backend.tfvars,在第二个中,我使用 Azure CLI 和先前设置的标记获取存储帐户密钥(这样我就不必获取密钥并将其手动传递给我的第二个脚本)。

如果您不想依赖本地状态,您甚至可以在部署后迁移第一个 terraform 配置的状态

于 2019-02-12T08:08:17.007 回答
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 脚本手动创建它。

于 2018-09-07T22:31:49.937 回答