【问题标题】:Terraform apply command not using its state file from azure blob storageTerraform 应用命令不使用 azure blob 存储中的状态文件
【发布时间】:2021-08-22 11:26:28
【问题描述】:

我在 azure blob 存储帐户中有 terraform 状态,我在我的 jenkins 管道中引用了这个 terraform 状态。

我正在使用 terraform init 命令,该命令通过使用“-backend-config”参数在 blob 存储中引用此 terraform 状态,如下所示。

terraform init -input=false \
                  -backend-config="resource_group_name=RESOURCE_GROUP_NAME" \
                  -backend-config="storage_account_name=STORAGE_ACCOUNT_NAME" \
                  -backend-config="container_name=CONTAINER_NAME" \
                  -backend-config="key=STATE_FILE_NAME" 

之后我正在运行 terraform plan 命令,该命令将其数据写入 terraform 状态,该状态处于 azure blob 存储中,我可以看到该文件正在 blob 存储帐户中更新。

但是,当我运行 terraform apply 命令时,它会在本地寻找其 terraform 状态,而我的 jenkins 管道正在失败。

因此,我尝试提供相同的 terraform 状态文件名,该文件名位于 azure blob 存储中,但仍然失败,因为它正在 jenkins 管道中本地查找此文件。 因此,想检查如何强制执行我的 terraform apply 命令以默认从 azure blob 存储获取其 terraform 状态文件,例如 terraform plan 命令会自动从 azure blob 存储引用它的 terraform 状态文件?

【问题讨论】:

    标签: jenkins-pipeline terraform terraform-provider-azure


    【解决方案1】:

    最好在 terraform 后端提供程序中硬编码这些值,因为您不会经常更改它。更改此配置将对您的基础架构产生巨大影响。这些值不是秘密,特别是如果您将它们传递到保存历史的 shell 中。

    建议对 Azure 凭据使用 environment 变量。如果要指定后端,请传递这样的文件。

    azurecreds.conf:

    ARM_SUBSCRIPTION_ID="123"
    ARM_CLIENT_ID = "123"
    ARM_CLIENT_SECRET="123"
    ARM_TENANT_ID="123"
    

    terraform init -backend-config=azurecreds.conf

    【讨论】:

    • 感谢您的回复。但是,是的,这些值也提供了,这就是为什么我的 terraform plan 命令正在工作并且它正在更新 blob 存储中的 terraform 状态文件。但我面临的问题是 terraform apply 命令,因为它无法从 blob 存储中选择它的 terraform 状态文件。
    • 这是我提供的命令。 sh "terraform apply -input=false" 现在,就像 terraform plan 一样,它如何识别它应该从 blob 存储中引用它的 terraform 状态文件?
    • @svw1105 如果您的计划阶段正确并从 blob 存储读取状态。请将-out=plan1 添加到您的计划命令中。申请时请使用terraform apply --auto-approve -input=false plan1 。请试试这个,如果您需要任何进一步的帮助,请告诉我。
    • 是的,我试过了,它正在工作。但是此命令将在本地创建一个 plan1 文件,而 terraform apply 命令将从本地磁盘引用它。现在,如何验证 terraform apply 命令是否从 blob 存储引用相同的状态文件?
    • 这样它从本地磁盘读取plan。这并不意味着您的 state 是本地的。通过添加资源(例如小型 VM)对 Terraform 进行更改。应用此更改后,进入您的 blob 存储并检查您的状态文件的last updated time。也可以下载下来查看是否远程状态下添加了VM。
    猜你喜欢
    • 2021-08-01
    • 2021-10-29
    • 2021-03-02
    • 2021-05-20
    • 2021-07-09
    • 1970-01-01
    • 2019-12-19
    • 2018-11-07
    • 1970-01-01
    相关资源
    最近更新 更多