在运行Terraform初始化之前创建Azure存储帐户和容器?

时间:2018-09-07 12:32:05

标签: azure terraform terraform-provider-azure

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

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

编辑:我正在使用Azure。

2 个答案:

答案 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脚本手动创建。