Terraform 获得;发送请求失败:StatusCode=429——原始错误:超过上下文截止日期";在地形上

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

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" "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
中的所有空格是否都是故意的?@Marcin
name
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<