在Terraform上获得"Failure sending request: StatusCode=429 -- Original Error: context deadline exceeded"



Terraform正在抛出一个错误"发送请求失败:StatusCode=429——原始错误:超过上下文截止日期";当在Azure上创建超过2000个A和CNAME记录时。

尝试Terraform v0.13.5和v0.14,出现相同错误

使用azurerm插件的2.39版本

我的地形代码示例:

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提供了一个链接,推荐的解决方案是使用多个较小的状态文件。https://github.com/terraform-providers/terraform-provider-azurerm/pull/6866

如果在同一个.tf文件中创建所有资源azurerm_dns_zoneazurerm_resource_group。我建议你可以这样更改地形模板,而不是硬编码值:

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

相关内容

最新更新