Terraform 后端到 azure blob 存储错误
Posted
技术标签:
【中文标题】Terraform 后端到 azure blob 存储错误【英文标题】:Terraform back-end to azure blob storage errors 【发布时间】: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 的容器相匹配 【参考方案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 地址,或者确保您连接到正确的 *** 网络。
如果上述方法不起作用,请运行 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
)。
另见:
Azure Active Directory Provider: Authenticating using Managed Service Identity。 Unable to programmatically get the keys for Azure Storage Account。【讨论】:
【参考方案5】:应该有一个 .terraform 目录,您可以在其中运行 terraform init 命令。 删除 .terraform 或将其移至 Someotehr 名称。下次 terraform init 运行时,它将使用新的 init 重新创建该目录。
【讨论】:
重复***.com/a/55063132/533460以上是关于Terraform 后端到 azure blob 存储错误的主要内容,如果未能解决你的问题,请参考以下文章
此处不应出现“azure_blob_fs_location”类型的块
JavaScript Azure Blob 存储移动 blob