2.3 KiB
Transient ARM error handling for az ... create
Load this file only when an az group create, az appservice plan create, or az webapp create command fails. Healthy runs never need it.
Which errors are transient
ARM PUT operations sometimes fail with transient errors:
Connection reset,Connection aborted,ConnectionErrorRead timed out,Max retries exceededBadGatewayConnection,ServiceUnavailableTooManyRequests/ HTTP429- HTTP
502/503/504
These are ARM frontend / network blips, not configuration problems — they almost always succeed on retry.
Do NOT retry on AuthorizationFailed, SubscriptionNotFound, ResourceGroupNotFound, InvalidTemplateDeployment, SkuNotAvailable, QuotaExceeded, or any non-429 4xx. Those are real config errors — surface them to the user.
Rules
- Apply to every
az ... createin create-app.md §§2–4. - Retry silently — do not narrate "let me retry".
- Up to 2 retries (3 attempts total); wait 5s before retry #1 and 15s before retry #2. If the error carries a
Retry-Afterheader, honour that instead. - Wrap the full idempotent pair
(az ... show ...) || (az ... create ...)— never the barecreate. Theshowshort-circuits any partially-succeeded prior attempt and avoids falseConflict/NameAlreadyExists. - After 3 failed attempts, surface the original error with one line of context (e.g.,
"ARM frontend is returning transient errors — please retry in a few minutes").
Use the wrapper scripts
Both shells have a ready-to-call wrapper that implements the loop, the transient-error filter, and the backoff. Prefer these over inlining the loop:
- Bash / zsh (Linux, macOS):
scripts/retry-az-create.sh./scripts/retry-az-create.sh \ "az group show -n my-rg --only-show-errors" \ "az group create -n my-rg -l eastus2" - PowerShell (Windows):
scripts/retry-az-create.ps1.\scripts\retry-az-create.ps1 ` -ShowCommand "az group show -n my-rg --only-show-errors" ` -CreateCommand "az group create -n my-rg -l eastus2"
Both scripts run the show command first, fall through to create on failure, and retry up to 2 times on transient errors only.