azure shares.Client#GetProperties:发送请求失败:状态代码=0 --原始错误:超过上下文截止时间

jfgube3f  于 2022-12-14  发布在  其他
关注(0)|答案(2)|浏览(117)

我在Azure中的存储帐户上部署了一个新的文件共享,此后我就无法再执行平台化计划,而是收到以下错误:

azurerm_storage_account_customer_managed_key.this[0]: Refreshing state... [id=/subscriptions/**********/resourceGroups/myrg/providers/Microsoft.Storage/storageAccounts/myaccount]
╷
│ Error: shares.Client#GetProperties: Failure sending request: StatusCode=0 -- Original Error: context deadline exceeded
│ 
│   with azurerm_storage_share.this["share1"],
│   on main.tf line 155, in resource "azurerm_storage_share" "this":
│  155: resource "azurerm_storage_share" "this" {
│ 
╵
Destroy False detailedExitCode: 1
Error detected by Terraform
##[error]Script failed with exit code: 1

我试过将存储帐户网络设置为公共(从所有网络启用),结果还是一样。我试过不同的Terraform版本(1.2.6,1.0.4,1.2.7,1.2.0),结果都一样。
我在网上查了一下,找到了这两张票,它们看起来很相似,但还没有得到答案(尽管它们不是来自Stack Overflow):
https://github.com/hashicorp/terraform-provider-azurerm/issues/17851
https://github.com/hashicorp/terraform-provider-azurerm/issues/2977
我已经用完了线索调查的时刻,我会很感激,如果有人可能有新的想法是什么原因的问题。
如果我能分享更多信息,请告诉我。

xdnvmnnf

xdnvmnnf1#

在我的情况下,我得到了类似的错误,当我没有清除状态文件(TF),其中存在的其他资源,这是不存在于Azure门户.(因为我已经手动删除了它在门户中,但仍然存在于terraform状态文件.)

我删除了蔚蓝色门户中不存在的资源,然后试图执行相同的操作。
或者,如果某些源存在于azure中而不在terraform状态文件中。在这种情况下,请确保使用terraform import <terraformid> <resourceId>导入资源,类似于azurerm_resource_group|资源类|registry.terraform.io或此SO参考,方法是检查Azure Portal和terraform.tfstate文件中的资源是否不匹配。

  • 例如,资源组可以导入为:*
terraform import azurerm_resource_group.example /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/example
  • 确保状态文件与门户中存在的资源匹配后,尝试执行。
    我在自己的环境中尝试过,并且能够执行terraform planterraform apply
provider "azurerm" {

  features {}

}
resource "azurerm_resource_group" "example" {
  name     = "xxxxxxx"  
  location = "westus2"
}

resource "azurerm_storage_account" "test" {
  name                     = "acctestacc1234"
  resource_group_name      = azurerm_resource_group.example.name
  location                 = "westus2"
  account_tier             = "Standard"
  account_replication_type = "LRS"
}
resource "azurerm_storage_share" "test" {
  name                 = "testkaaccount"
  storage_account_name = azurerm_storage_account.test.name
  quota                = 5
  access_tier          = "TransactionOptimized"
}

结果:

此外,请检查位置是否正确指定了资源组位置,如果是在VM中创建的,请确保VM和创建的资源位于同一位置。

参考资料:

  1. azurerm_storage_share_file | Resources | hashicorp/azurerm | Terraform Registry
  2. Terraform Azure Configure VM Backup Policy Fails - Stack Overflow
ibps3vxo

ibps3vxo2#

因此Terraform使用私有URL来管理文件共享。在我们的案例中,这些端点的DNS解析无法正常工作。您可以使用命令terraform console获取私有端点的URL,然后调查资源>azurerm_storage_share.file_share。它将显示私有URL。随后,使用nslookup or dig命令来确定您是否可以将URL解析为IP地址。如果您无法解析URL,则有几个选项。例如,您可以将它们添加到您的/etc/hosts file。这解决了我们的问题。另一个选项是将专用链接添加到专用DNS区域,并将本地DNS转发到此专用区域。

相关问题