我一直在使用下面的方法为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>"
}
}
返回错误
terrain init
初始化后端...
成功配置了后端“ azurerm”! Terraform将自动 除非后端配置更改,否则请使用此后端。
错误刷新状态:存储:服务返回错误:StatusCode = 403,ErrorCode = AuthenticationFailed,ErrorMessage =服务器无法验证请求。确保包括签名在内的Authorization标头的值正确形成。 RequestId:665e0067-b01e-007a-6084-97da67000000
时间:2018-12-19T10:18:18.7148241Z,RequestInitiated = Wed,19 Dec 2018 10:18:18 GMT,RequestId = 665e0067-b01e-007a-6084-97da67000000,API Version =,QueryParameterName =,QueryParameterValue =
任何想法我在做什么错?
答案 0 :(得分:5)
另一个问题可能是时间分辨率。
我也遇到了这些问题,尝试了上述所有步骤,但无济于事。
在我的系统(Windows 10,WSL2)上发生的事情是,WSL失去了时间同步,而我却相隔数小时。 https://github.com/microsoft/WSL/issues/4245中对此行为进行了描述。
对我来说,它有助于
在WSL(sudo hwclock -s
)中获得适当的时间,并且
重新启动WSL
希望,这也会对其他人有所帮助。
答案 1 :(得分:2)
对我有用的是删除本地.terraform文件夹,然后重试。
答案 2 :(得分:0)
应该有一个.terraform目录,您可以从中运行terraform init命令。 删除.terraform或将其移至Someotehr名称。下次运行terraform init时,它将使用新的init重新创建该目录。
答案 3 :(得分:0)
以下是一些建议:
terraform init -reconfigure
。azurerm_storage_account
/network_rules
”以允许某些IP地址,或者确保您已连接到正确的VPN网络。TF_LOG=TRACE terraform init
进行进一步调试。答案 4 :(得分:0)
请确保您已通过Azure云的正确身份验证。
如果从外部运行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
)。
另请参阅: