Terraform 获得;发送请求失败:StatusCode=429——原始错误:超过上下文截止日期";在地形上
Terraform在Azure上创建超过2000条A和CNAME记录时抛出错误“发送请求失败:StatusCode=429--原始错误:超过上下文截止日期” 尝试地形v0.13.5和v0.14,相同错误 使用azurerm插件的2.39版 我的地形代码示例:Terraform 获得;发送请求失败:StatusCode=429——原始错误:超过上下文截止日期";在地形上,terraform,terraform-provider-azure,Terraform,Terraform Provider Azure,Terraform在Azure上创建超过2000条A和CNAME记录时抛出错误“发送请求失败:StatusCode=429--原始错误:超过上下文截止日期” 尝试地形v0.13.5和v0.14,相同错误 使用azurerm插件的2.39版 我的地形代码示例: provider "azurerm" { # version="2.39" features {} } resource "azurerm_resource_group&qu
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和文件夹。我将运行terraforminit
,然后导入完全相同的资源组和dns区域,在本例中是large rg
和dnsrecords.com
。下一步是运行terraform plan
,然后运行terraform apply
将发生的情况是,它首先抛出StatusCode=429
错误,但重新运行它将解决该错误。向其中添加新记录也会起作用
仅仅因为记录的大小,这样做并不理想。记录的数量只会随着时间的推移而增加
看起来像是地形的限制
编辑2:
Nancy Xiong提供了一个链接,其中推荐的解决方案是使用多个较小的状态文件 如果您在同一
.tf
文件中创建所有资源azurerm\u dns\u区域
和azurerm\u资源组
。我建议您不必硬编码该值,而可以如下更改地形模板:
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
如果您在同一
.tf
文件中创建所有资源azurerm\u dns\u区域
和azurerm\u资源组
。我建议您不必硬编码该值,而可以如下更改地形模板:
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
我只是想知道你在
name
和zone\u name
中的所有空格是否都是故意的?@Marcin在name
和zone\u name
中的空格不是故意的,看起来是在复制和粘贴时添加的。我确实试过用空格来运行它,它很有效。那么删除空格是否解决了这个问题?如果是,我可以提供一个简短的答案供将来参考?@Marcin否,删除空格并不能解决问题。如果我把2000条记录分成170条左右,我确实用我发现的东西更新了原始帖子。我只是想知道你在name
和zone\u name
中的所有空格是否都是故意的?@Marcinname
和zone\u name
中的空格不是故意的,它看起来是在复制和粘贴时添加的。我确实试过用空格来运行它,它很有效。那么删除空格是否解决了这个问题?如果是,我可以提供一个简短的答案供将来参考?@Marcin否,删除空格并不能解决问题。如果我把2000条记录分成170条左右,我确实用我发现的更新了原始帖子。最初的地形代码是这样的,但为了简单起见,我硬编码了它。还更新了代码以使用最新版本的terraform和提供程序terraform required\u version=“0.14.3”required\u提供程序{azurerm={source=“hashicorp/azurerm”version=“2.41.0”}}
不确定如何固定此上的间距,希望这有帮助您的意思是在文件夹中创建记录,然后自动将记录导出到地形代码中,然后带有空格的名称值无效吗?你能告诉我完整的步骤和样本,然后我可以尝试按照你的过程吗?间隔不是问题,我用我提供的代码测试了它,它工作了。另外,我的代码没有间距问题,它像那样粘贴在这里。我说的是关于区域名称
和资源组名称
我的代码与您最初的代码完全相同,但是当我将代码粘贴到这里时,我更改了它,认为它更容易理解。我所做的就是创建了几个文件夹,每个文件夹都有一个terraform.tf,其中包含170条记录,以及terraform和azurerm所需的_版本。对于每个文件夹,我将运行terraforminit
,然后导入完全相同的资源组和dns区域,在本例中是large rg
和dnsrecords.com
。下一步是运行terraform plan
,然后运行terraform apply
terraformapply
将抛出429错误,但再次运行它将不会。添加新的dns资源也很好。类似的情况是,Azure返回HTTP 429,因为发送的请求太多(因此我们被迫等待并重试),这反过来又超过了默认超时。最初,terraform代码是这样的,但为了简单起见,我硬编码了它。还更新了代码以使用最新版本的terraform和提供程序terraform required\u version=“0.14.3”required\u提供程序{azurerm={source=“hashicorp/azurerm”version=“2.41.0”}}
不确定如何固定此上的间距,希望这有帮助您的意思是在文件夹中创建记录,然后自动将记录导出到地形代码中,然后带有空格的名称值无效吗?你能告诉我完整的步骤和样本,然后我可以尝试按照你的过程吗?间隔不是问题,我用我提供的代码测试了它,它工作了。另外,我的代码没有间距问题,它像那样粘贴在这里。我说的是关于区域名称
和资源组名称
我的代码与您最初的代码完全相同,但是当我将代码粘贴到这里时,我更改了它,认为它更容易理解。我所做的就是创建了几个文件夹,每个文件夹都有一个terraform.tf,其中包含170条记录,以及terraform和azurerm所需的_版本。对于每个文件夹,我将运行terraforminit<