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-rg
和 dnsrecords.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_zone
和 azurerm_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
在 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-rg
和 dnsrecords.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_zone
和 azurerm_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