【问题标题】:Terraform back-end to azure blob storage errorsTerraform 后端到 azure blob 存储错误
【发布时间】:2019-05-19 19:47:01
【问题描述】:

我一直在使用以下内容成功地在 Azure 存储中为 terraform 创建后端状态文件,但由于某种原因它停止工作。我已经回收了存储密码,尝试了两个密钥并每次都得到相同的错误

backend.tf

    terraform {
    backend "azurerm" {
        storage_account_name    = "terraformstorage"
        resource_group_name     = "automation"
        container_name          = "terraform" 
        key                     = "testautomation.terraform.tfstate"
        access_key              = "<storage key>"
    }
}

错误返回

地形初始化
正在初始化后端...
成功配置后端“azurerm”! Terraform 将自动 除非后端配置更改,否则请使用此后端。
错误刷新状态:存储:服务返回错误:StatusCode=403,ErrorCode=AuthenticationFailed,ErrorMessage=Server 未能对请求进行身份验证。确保 Authorization 标头的值正确形成,包括签名。 请求编号:665e0067-b01e-007a-6084-97da67000000
时间:2018-12-19T10:18:18.7148241Z,RequestInitiated=Wed,2018 年 12 月 19 日 10:18:18 GMT,RequestId=665e0067-b01e-007a-6084-97da67000000,API 版本=,QueryParameterName=,QueryParameterValue=

任何想法我做错了什么?

【问题讨论】:

  • 您的凭据似乎有误。您可以尝试通过其他机制访问 blob 存储中的状态文件吗? Azure 是否有一个有用的 CLI 工具可以用来测试这个?
  • 嗨,ydaetskcoR,我可以使用“Azure 存储资源管理器”使用存储帐户名称和密钥成功连接到存储,这几乎是 terraform 使用的所有内容。只是为了增加混乱!
  • 探索的另一个选项:确保 container_name 与用于生成 sas_token 的容器相匹配

标签: azure terraform


【解决方案1】:

对我有用的是删除本地 .terraform 文件夹并重试。

【讨论】:

  • 完美运行
【解决方案2】:

另一个问题可能是时间分辨率。

我也遇到了这些问题,尝试了上述所有步骤,但没有任何帮助。

在我的系统(Windows 10、WSL2)上发生的事情是,WSL 失去了时间同步,而我的时间相隔数小时。 https://github.com/microsoft/WSL/issues/4245 中描述了此行为。

对我有帮助

  • 在 WSL (sudo hwclock -s) 中获取适当的时间和

  • 重启 WSL

希望,这也会对其他人有所帮助。

【讨论】:

  • 这对我也有用。我只需要运行 hwclock -s,不需要重新启动。一看到命令,我只好翻白眼。这也给我造成了 Apache Airflow 的问题(通过运行相同的命令解决) - 原因是,当我的笔记本电脑进入睡眠状态时,WSL 也会打盹,所以会浪费时间。我可能只是在我的 bash 配置文件中创建一个脚本作为临时修复。
  • 你也可以在主机中运行wsl -d docker-desktop hwclock -s。
  • 感谢@MaxiPalle,这也为我解决了这个问题。日期同步问题可能会导致很多问题。最糟糕的是它是间歇性的,所以我忘记了。我将sudo hwclock -s 附加到我的.profile 文件中,这样我就不会忘记这个问题,但是这个终端已经运行了一夜,所以我忘记了。
【解决方案3】:

以下是一些建议:

  • 运行:terraform init -reconfigure。
  • 确认您的“terraform/backend”凭据。
  • 如果您的 Terraform 包含一些“azurerm_storage_account/network_rules”以允许某些 IP 地址,或者确保您连接到正确的 VPN 网络。
  • 如果上述方法不起作用,请运行 TF_LOG=TRACE terraform init 以进一步调试。

【讨论】:

    【解决方案4】:

    请确保您已通过 Azure Cloud 的正确身份验证。

    如果您在外部运行 Terraform,请重新运行:az login。

    如果您在实例上运行 Terraform,您可以使用 managed identities,或者通过定义以下环境变量:

    ARM_USE_MSI=true
    ARM_SUBSCRIPTION_ID=xxx-yyy-zzz
    ARM_TENANT_ID=xxx-yyy-zzz
    

    或者只是运行az login --identity,然后分配正确的角色(azurerm_role_assignment,例如“贡献者”)和适当的策略(azurerm_policy_definition)。

    另见:

    【讨论】:

      【解决方案5】:

      应该有一个 .terraform 目录,您可以在其中运行 terraform init 命令。 删除 .terraform 或将其移至 Someotehr 名称。下次 terraform init 运行时,它将使用新的 init 重新创建该目录。

      【讨论】:

      猜你喜欢
      • 2021-07-09
      • 2017-04-17
      • 2018-02-26
      • 1970-01-01
      • 2021-09-21
      • 2016-07-21
      • 2018-01-30
      • 2022-01-02
      • 2017-04-18
      相关资源
      最近更新 更多