Getting "Failure sending request: StatusCode=429 -- Original Error: context deadline exceeded" on Terraform

Getting "Failure sending request: StatusCode=429 -- Original Error: context deadline exceeded" on Terraform

在 Azure 上创建超过 2000 个 A 和 CNAME 记录时,Terraform 抛出错误“发送请求失败:StatusCode=429 -- 原始错误:超出上下文截止日期”。

尝试了 Terraform v0.13.5 和 v0.14,同样的错误

使用 2.39 版的 azurerm 插件

我的地形代码示例:

provider "azurerm" {
#    version="2.39"
    features {}
}

resource "azurerm_resource_group" "example" {
  name     = "large-rg"
  location = "West US"
}

resource "azurerm_dns_zone" "example" {
  name                = "dnsrecords.com"
  resource_group_name = azurerm_resource_group.example.name
}

resource "azurerm_dns_a_record" "arecord" {
        name                = " arecord "
        zone_name           = " dnsrecords.com"
        resource_group_name = "large-rg"
        ttl                 = 300
        records             = ["1.1.1.1"]
}

resource "azurerm_dns_cname_record" "cname" {
        name                = "cname"
        zone_name           = " dnsrecords.com"
        resource_group_name = "large-rg"
        ttl                 = 300
        record              = "testing.trafficmanager.net."
}

将此记录在日志中

2020/12/09 17:11:22 [TRACE] eval: *terraform.EvalWriteState 
2020/12/09 17:11:22 [TRACE] EvalWriteState: recording 1 dependencies for azurerm_dns_zone.example 
2020/12/09 17:11:22 [TRACE] EvalWriteState: writing current state object for azurerm_dns_zone.example 
2020/12/09 17:11:22 [TRACE] [walkRefresh] Exiting eval tree: azurerm_dns_zone.example 
2020/12/09 17:11:22 [TRACE] vertex "azurerm_dns_zone.example": visit complete 
2020/12/09 17:11:22 [TRACE] vertex "azurerm_dns_zone.example": dynamic subgraph completed successfully 
2020/12/09 17:11:22 [TRACE] vertex "azurerm_dns_zone.example": visit complete 
2020/12/09 17:11:22 [TRACE] vertex "azurerm_dns_zone.example (expand)": dynamic subgraph completed successfully 
2020/12/09 17:11:22 [TRACE] vertex "azurerm_dns_zone.example (expand)": visit complete 
2020/12/09 17:11:22 [TRACE] dag/walk: upstream of "provider[\"registry.terraform.io/hashicorp/azurerm\"] (close)" errored, so skipping 
2020/12/09 17:11:22 [TRACE] dag/walk: upstream of "root" errored, so skipping 
2020/12/09 17:11:22 [TRACE] statemgr.Filesystem: removing lock metadata file .terraform.tfstate.lock.info 
2020/12/09 17:11:22 [TRACE] statemgr.Filesystem: unlocked by closing terraform.tfstate 
2020-12-09T17:11:22.725-0800 [DEBUG] plugin: plugin process exited: path=.terraform/plugins/registry.terraform.io/hashicorp/azurerm/2.39.0/windows_amd64/terraform-provider-azurerm_v2.39.0_x5.exe pid=18812 
2020-12-09T17:11:22.725-0800 [DEBUG] plugin: plugin exited

编辑: 我将记录分成大约 170 条记录的批次,并创建了自己的 terraform.tf 和文件夹。我会 运行 terraform init 然后导入完全相同的资源组和 dns 区域,在本例中为 large-rgdnsrecords.com。下一步是 运行宁 terraform plan 然后 terraform apply.

会发生什么,它首先会抛出 StatusCode=429 错误,但重新运行 将解决错误。向其中添加新记录也可以。

仅仅因为记录的大小,这样做并不理想。随着时间的推移,记录的数量只会越来越大。

看起来像是 Terraform 的限制。

编辑2: Nancy Xiong 提供了 link,其中推荐的解决方案是使用多个较小的状态文件。 https://github.com/terraform-providers/terraform-provider-azurerm/pull/6866

如果您在同一个 .tf 文件中创建所有资源 azurerm_dns_zoneazurerm_resource_group。我建议不要对值进行硬编码,您可以像这样更改 terraform 模板:

resource "azurerm_resource_group" "example" {
  name     = "large-rg"
  location = "West US"
}

resource "azurerm_dns_zone" "example" {
  name                = "dnsrecords.com"
  resource_group_name = azurerm_resource_group.example.name
}

resource "azurerm_dns_a_record" "arecord" {
        name                = "arecord"
        zone_name           = azurerm_dns_zone.example.name
        resource_group_name = azurerm_resource_group.example.name
        ttl                 = 300
        records             = ["1.1.1.1"]
}

resource "azurerm_dns_cname_record" "cname" {
        name                = "cname"
        zone_name           = azurerm_dns_zone.example.name
        resource_group_name = azurerm_resource_group.example.name
        ttl                 = 300
        record              = "testing.trafficmanager.net."
}

此外,带空格的 name 值无效。您可以升级到

Terraform v0.14.3
+ provider registry.terraform.io/hashicorp/azurerm v2.41.0