You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 12:45:56