Azure Front Door标准版:自定义域再生TXT记录遇速率限制错误
Azure Front Door自定义域配置脚本遇速率限制错误的排查与解决
问题描述
编写Bash脚本配置Azure Front Door自定义域时,执行生成DNS验证TXT记录的步骤时,每次都会抛出速率限制错误:
ERROR: (Conflict) Rate limit exceeded. Please try again in 59 minutes.
首次运行脚本就触发该错误,并非多次调用导致的超限。
问题脚本片段
... # 确保前端端点存在 EXISTING_ENDPOINT=$(az afd endpoint list \ --resource-group "$RESOURCE_GROUP" \ --profile-name "$AZURE_FRONTDOOR_PROFILE_NAME" \ --query "[?name=='$ENDPOINT_NAME'].name" -o tsv) if [[ -z "$EXISTING_ENDPOINT" ]]; then echo "创建端点 $ENDPOINT_NAME..." az afd endpoint create \ --resource-group "$RESOURCE_GROUP" \ --profile-name "$AZURE_FRONTDOOR_PROFILE_NAME" \ --endpoint-name "$ENDPOINT_NAME" fi # 确保自定义域存在 DOMAIN_NAME="${SUBDOMAIN}-${CUSTOM_DOMAIN_NAME//./-}" EXISTING_DOMAIN=$(az afd custom-domain list \ --resource-group "$RESOURCE_GROUP" \ --profile-name "$AZURE_FRONTDOOR_PROFILE_NAME" \ --query "[?hostName=='$FULL_DOMAIN'].hostName" -o tsv) if [[ -z "$EXISTING_DOMAIN" ]]; then echo "创建自定义域 $FULL_DOMAIN..." az afd custom-domain create \ --resource-group "$RESOURCE_GROUP" \ --profile-name "$AZURE_FRONTDOOR_PROFILE_NAME" \ --custom-domain-name "$DOMAIN_NAME" \ --host-name "$FULL_DOMAIN" fi # 生成验证令牌并设置TXT记录 echo "为 $FULL_DOMAIN 生成验证令牌..." VALIDATION_TOKEN=$(az afd custom-domain regenerate-validation-token \ --resource-group "$RESOURCE_GROUP" \ --profile-name "$AZURE_FRONTDOOR_PROFILE_NAME" \ --custom-domain-name "$DOMAIN_NAME" \ --query "validationToken" -o tsv) echo "添加域名验证的TXT记录..." az network dns record-set txt add-record \ --resource-group "$RESOURCE_GROUP" \ --zone-name "$DNS_ZONE_NAME" \ --record-set-name "_dnsauth.${SUBDOMAIN}" \ --value "$VALIDATION_TOKEN" # 为每个子域名创建路由 echo "为 $FULL_DOMAIN 创建路由..." az afd route create \ --resource-group "$RESOURCE_GROUP" \ --profile-name "$AZURE_FRONTDOOR_PROFILE_NAME" \ --endpoint-name "$ENDPOINT_NAME" \ --route-name "$SUBDOMAIN-route" \ --origin-group "$ORIGIN_GROUP_NAME" \ --patterns-to-match "/*" \ --origin-path "/" \ --https-redirect Enabled \ --forwarding-protocol MatchRequest
排查方向与解决方法
1. 等待自定义域资源同步
创建自定义域后,Azure内部需要时间完成资源状态同步,立即调用令牌生成接口可能触发内部限制。在域创建后添加延迟:
if [[ -z "$EXISTING_DOMAIN" ]]; then echo "创建自定义域 $FULL_DOMAIN..." az afd custom-domain create \ --resource-group "$RESOURCE_GROUP" \ --profile-name "$AZURE_FRONTDOOR_PROFILE_NAME" \ --custom-domain-name "$DOMAIN_NAME" \ --host-name "$FULL_DOMAIN" # 添加30秒延迟,等待资源同步完成 sleep 30 fi
2. 避免重复生成令牌
如果自定义域已存在,优先读取现有验证令牌,无需重复调用生成接口:
# 先尝试获取已存在的验证令牌 VALIDATION_TOKEN=$(az afd custom-domain show \ --resource-group "$RESOURCE_GROUP" \ --profile-name "$AZURE_FRONTDOOR_PROFILE_NAME" \ --custom-domain-name "$DOMAIN_NAME" \ --query "properties.validationProperties.validationToken" -o tsv) # 仅在无令牌时调用生成接口 if [[ -z "$VALIDATION_TOKEN" ]]; then echo "为 $FULL_DOMAIN 生成验证令牌..." VALIDATION_TOKEN=$(az afd custom-domain regenerate-validation-token \ --resource-group "$RESOURCE_GROUP" \ --profile-name "$AZURE_FRONTDOOR_PROFILE_NAME" \ --custom-domain-name "$DOMAIN_NAME" \ --query "validationToken" -o tsv) fi
3. 更新Azure CLI版本
旧版本CLI可能存在接口调用逻辑缺陷,更新到最新版本:
az upgrade
4. 确认权限配置
确保执行脚本的账号对Front Door Profile和DNS Zone拥有完整操作权限,权限不足可能被误判为速率限制。
内容的提问来源于stack exchange,提问作者Herald Gjura
相关产品推荐
相关产品推荐

