Terraform部署Azure App Service Plan时遇429限流错误求助
Terraform部署Azure App Service Plan时遭遇429限流错误
作为Terraform新手,执行terraform plan时一切正常,但运行terraform apply始终无法完成App Service Plan的创建,最终返回429 HTTP状态码。
配置代码(main.tf)
terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } } } provider "azurerm" { features {} } resource "azurerm_resource_group" "rg" { name = "name12a6-rg1" location = "westeurope" } resource "azurerm_virtual_network" "vnet" { name = "name12a6-vnet1" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name address_space = ["10.0.0.0/16"] } resource "azurerm_subnet" "integrationsubnet" { name = "name12a6-integrationsubnet1" resource_group_name = azurerm_resource_group.rg.name virtual_network_name = azurerm_virtual_network.vnet.name address_prefixes = ["10.0.1.0/24"] delegation { name = "delegation" service_delegation { name = "Microsoft.Web/serverFarms" } } } resource "azurerm_subnet" "backendendpointsubnet" { name = "name12a6-backendendpointsubnet1" resource_group_name = azurerm_resource_group.rg.name virtual_network_name = azurerm_virtual_network.vnet.name address_prefixes = ["10.0.2.0/24"] private_endpoint_network_policies_enabled = true } resource "azurerm_subnet" "databaseendpointsubnet" { name = "name12a6-databaseendpointsubnet1" resource_group_name = azurerm_resource_group.rg.name virtual_network_name = azurerm_virtual_network.vnet.name address_prefixes = ["10.0.3.0/24"] private_endpoint_network_policies_enabled = true delegation { name = "dbFlexibleServer" service_delegation { name = "Microsoft.DBforMySQL/flexibleServers" actions = ["Microsoft.Network/virtualNetworks/subnets/join/action"] } } } resource "azurerm_service_plan" "appserviceplan1" { name = "name12a6-appserviceplan1" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name os_type = "Linux" sku_name = "B1" } resource "azurerm_linux_web_app" "frontwebapp" { name = "frontend-name12a061" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name service_plan_id = azurerm_service_plan.appserviceplan1.id site_config { vnet_route_all_enabled = true } app_settings = { "WEBSITE_DNS_SERVER" : "168.63.129.16" } } resource "azurerm_app_service_virtual_network_swift_connection" "vnetintegrationconnection" { app_service_id = azurerm_linux_web_app.frontwebapp.id subnet_id = azurerm_subnet.integrationsubnet.id } resource "azurerm_linux_web_app" "backwebapp" { name = "backend-name12a061" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name service_plan_id = azurerm_service_plan.appserviceplan1.id site_config {} } resource "azurerm_private_dns_zone" "dnsprivatezone" { name = "privatelink.azurewebsites.net" resource_group_name = azurerm_resource_group.rg.name } # Confirm resource "azurerm_private_dns_a_record" "dnsrecord_frontend" { name = "name12a6-dns-frontend1" zone_name = azurerm_private_dns_zone.dnsprivatezone.name resource_group_name = azurerm_resource_group.rg.name ttl = 300 records = [azurerm_linux_web_app.frontwebapp.name] } # Confirm resource "azurerm_private_dns_a_record" "dnsrecord_backend" { name = "name12a6-dns-backend1" zone_name = azurerm_private_dns_zone.dnsprivatezone.name resource_group_name = azurerm_resource_group.rg.name ttl = 300 records = [azurerm_linux_web_app.backwebapp.name] } resource "azurerm_private_dns_zone_virtual_network_link" "dnszonelink" { name = "name12a6dnszonelink1" resource_group_name = azurerm_resource_group.rg.name private_dns_zone_name = azurerm_private_dns_zone.dnsprivatezone.name virtual_network_id = azurerm_virtual_network.vnet.id } resource "azurerm_private_endpoint" "privateendpoint" { name = "backwebappprivateendpoint1" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name subnet_id = azurerm_subnet.backendendpointsubnet.id private_dns_zone_group { name = "privatednszonegroup1" private_dns_zone_ids = [azurerm_private_dns_zone.dnsprivatezone.id] } private_service_connection { name = "privateendpointconnection1" private_connection_resource_id = azurerm_linux_web_app.backwebapp.id subresource_names = ["sites"] is_manual_connection = false } } # For the database # 1 - create subnet # 2 - create private dns zone # 3 - assign private dns to the vnet # 4 - create private endpoint to the new vnet resource "azurerm_private_dns_zone" "dbdnsprivatezone" { name = "dbserver.mysql.database.azure.com" resource_group_name = azurerm_resource_group.rg.name } resource "azurerm_private_dns_zone_virtual_network_link" "db-dnszonelink" { name = "dbname12a6dnszonelink.com" resource_group_name = azurerm_resource_group.rg.name private_dns_zone_name = azurerm_private_dns_zone.dbdnsprivatezone.name virtual_network_id = azurerm_virtual_network.vnet.id depends_on = [azurerm_subnet.databaseendpointsubnet] } resource "azurerm_mysql_flexible_server" "serverMysql" { name = "dbservername12a61" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name administrator_login = "admin1" administrator_password = "adminAdmin1" backup_retention_days = 7 delegated_subnet_id = azurerm_subnet.databaseendpointsubnet.id geo_redundant_backup_enabled = false private_dns_zone_id = azurerm_private_dns_zone.dbdnsprivatezone.id sku_name = "GP_Standard_D2ds_v4" version = "8.0.21" high_availability { mode = "SameZone" } maintenance_window { day_of_week = 0 start_hour = 8 start_minute = 0 } storage { iops = 360 size_gb = 20 } depends_on = [azurerm_private_dns_zone_virtual_network_link.db-dnszonelink] } # resource "azurerm_mysql_flexible_database" "databaseMysql" { # name = "databasedbserver" # resource_group_name = azurerm_resource_group.rg.name # server_name = azurerm_mysql_flexible_server.serverMysql.name # charset = "utf8mb4" # collation = "utf8mb4_unicode_ci" # } # resource "azurerm_private_dns_a_record" "dnsrecord_database" { # name = "database" # zone_name = azurerm_private_dns_zone.dbdnsprivatezone.name # resource_group_name = azurerm_resource_group.rg.name # ttl = 300 # records = [azurerm_mysql_flexible_server.serverMysql.name] # has wrong name # }
错误信息
Error: 创建App Service Plan(订阅: "817c1532-85ce-4a4f-bea2-6ea18491ba01" │ 资源组名称: "name12a6-rg1" │ 服务器场名称: "name12a6-appserviceplan1"): 执行CreateOrUpdate操作时遇到意外状态码429 (429 请求过多),响应内容: {"Code":"429","Message":"订阅817c1532-85ce-4a4f-bea2-6ea18491ba01的App Service Plan创建操作已被限流。如果问题持续,请联系支持人员。","Target":null,"Details":[{"Message":"订阅817c1532-85ce-4a4f-bea2-6ea18491ba01的App Service Plan创建操作已被限流。如果问题持续,请联系支持人员。"},{"Code":"429"},{"ErrorEntity":{"ExtendedCode":"51025","MessageTemplate":"订阅{1}的App Service Plan {0}操作已被限流。如果问题持续,请联系支持人员。","Parameters":["Create","817c1532-85ce-4a4f-bea2-6ea18491ba01"],"Code":"429","Message":"订阅817c1532-85ce-4a4f-bea2-6ea18491ba01的App Service Plan创建操作已被限流。如果问题持续,请联系支持人员。"}}],"Innererror":null} │ │ 涉及资源: azurerm_service_plan.appserviceplan1, │ 位于main.tf第62行,resource "azurerm_service_plan" "appserviceplan1"块中: │ 62: resource "azurerm_service_plan" "appserviceplan1" { │ │ 创建App Service Plan(订阅: "817c1532-85ce-4a4f-bea2-6ea18491ba01" │ 资源组名称: "name12a6-rg1" │ 服务器场名称: "name12a6-appserviceplan1"): 执行CreateOrUpdate操作时遇到意外状态码429 (429 请求过多),响应内容: │ {"Code":"429","Message":"订阅817c1532-85ce-4a4f-bea2-6ea18491ba01的App Service Plan创建操作已被限流。如果问题持续,请联系支持人员。","Target":null,"Details":[{"Message":"订阅817c1532-85ce-4a4f-bea2-6ea18491ba01的App Service Plan创建操作已被限流。如果问题持续,请联系支持人员。"},{"Code":"429"},{"ErrorEntity":{"ExtendedCode":"51025","MessageTemplate":"订阅{1}的App Service Plan {0}操作已被限流。如果问题持续,请联系支持人员。","Parameters":["Create","817c1532-85ce-4a4f-bea2-6ea18491ba01"],"Code":"429","Message":"订阅817c1532-85ce-4a4f-bea2-6ea18491ba01的App Service Plan创建操作已被限流。如果问题持续,请联系支持人员。"}}],"Innererror":null}
解决方法
- 等待限流解除:Azure对App Service Plan的创建操作设有订阅级别的限流阈值,短时间内多次尝试会触发限流,等待几十分钟到几小时后重新执行
terraform apply。 - 检查近期操作:查看订阅内近期是否有大量创建App Service Plan的操作,避免频繁触发限流规则。
- 调整部署策略:如果需要批量部署资源,可拆分Terraform配置分批次执行
apply,增加操作间隔;也可以使用-target参数先单独创建App Service Plan,再部署其他资源:terraform apply -target azurerm_service_plan.appserviceplan1 - 联系Azure支持:若等待后问题仍未解决,可根据错误提示联系Azure支持,确认是否需要调整订阅的限流阈值。
内容的提问来源于stack exchange,提问作者Pedro
相关产品推荐
相关产品推荐

