Naming Patterns
Per-resource naming rules for AppOnboard-generated Azure resources. Apply in Step 7 (Generate naming).
Reference: Azure naming conventions โ link, don't duplicate. Check docs for updates.
Default Pattern
{abbreviation}-{resourcePrefix}Where resourcePrefix = {project}-{env}-{suffix} (generated once in prepare Step 7, stored in prepare-plan.json.naming.resourcePrefix).
{project}โ app name fromcontext.json.app.name(lowercase, alphanumeric + hyphens){env}โdev/staging/prod(from intent or defaultdev){suffix}โ first 4 chars of session UUID (e.g.,a1d5). Generated once, stored innaming.suffix{abbreviation}โ short service prefix from the table below (e.g.,app,kv,rg)
Examples with resourcePrefix = myapp-dev-a1d5:
- Resource Group:
rg-myapp-dev-a1d5 - App Service:
app-myapp-dev-a1d5 - Key Vault:
kv-myapp-dev-a1d5 - Storage:
stmyappdeva1d5(alphanumeric only)
โ No redundancy. The resource name is
{abbr}-{resourcePrefix}โ NOT{project}-{abbr}-{project}-{env}-{suffix}. The project name appears ONCE in the prefix.โ Scaffold reads naming from the plan โ does NOT generate or modify resource names.
Override via context.json.overrides[] with key: "naming.pattern".
Per-Resource Rules
| Resource | Abbreviation | Max Length | Allowed Chars | Globally Unique? | Example |
|---|---|---|---|---|---|
| Resource Group | rg |
90 | Alphanumeric, hyphens, underscores, periods, parens | No (but include suffix to avoid cross-session collisions) | rg-myapp-dev-a1d5 |
| App Service | app |
60 | Alphanumeric, hyphens | Yes | app-myapp-dev-a1d5 |
| Container App | ca |
32 | Lowercase alphanumeric, hyphens | No (within env) | ca-myapp-dev-a1d5 |
| Container Registry | cr |
50 | Alphanumeric only | Yes | crmyappdeva1d5 |
| Azure SQL Server | sql |
63 | Lowercase alphanumeric, hyphens | Yes | sql-myapp-dev-a1d5 |
| Cosmos DB | cosmos |
44 | Lowercase alphanumeric, hyphens | Yes | cosmos-myapp-dev-a1d5 |
| Storage Account | st |
24 | Lowercase alphanumeric only | Yes | stmyappdeva1d5 |
| Key Vault | kv |
24 | Alphanumeric, hyphens | Yes | kv-myapp-dev-a1d5 |
| Log Analytics | log |
63 | Alphanumeric, hyphens | No (within RG) | log-myapp-dev-a1d5 |
| App Insights | appi |
260 | Most chars | No (within RG) | appi-myapp-dev-a1d5 |
| Service Bus | sb |
50 | Alphanumeric, hyphens | Yes | sb-myapp-dev-a1d5 |
| Functions | func |
60 | Alphanumeric, hyphens | Yes | func-myapp-dev-a1d5 |
| Static Web Apps | swa |
40 | Alphanumeric, hyphens | No (suffix still required โ Rule 1) | swa-myapp-dev-a1d5 |
| Redis Cache | redis |
63 | Alphanumeric, hyphens | Yes | redis-myapp-dev-a1d5 |
CAF deviation: Azure Cloud Adoption Framework uses
sbnsfor Service Bus namespace. AppOnboard usessbfor brevity โ either is acceptable.
Rules
- ALL resources get the
{suffix}โ including resource groups. This prevents cross-session naming collisions when the same app is deployed multiple times. The suffix is a 4-char random string generated once per session. - Container Registry + Storage Account: strip hyphens (alphanumeric only). โ Mechanical transform โ do NOT re-derive char-by-char:
('cr' + resourcePrefix).replace(/-/g,'').toLowerCase(), truncate to โค50 (ACR) / โค24 (Storage). Worked example:resourcePrefix = bezkoder-dev-18a3โcr+bezkoderdev18a3โcrbezkoderdev18a3. Copy the pattern; do not spell out the concatenation. - Validate length after substitution โ Key Vault (24 chars) is the tightest constraint. Budget for
{project}:24 - len(abbreviation) - len(env) - len(suffix) - 3 - 2(separators + healing reserve). Forkv+dev: 10 chars max. The 2-char reserve ensures room for a healing suffix (e.g.,edd6โedd602) on region fallback. Truncation when over budget:- Truncate at the nearest hyphen boundary within budget (e.g.,
broken-web-appat 10 โbroken-web) - If no hyphen within budget: hard truncate, no trailing hyphen
- Verify truncated name doesn't collide with reserved words (Rule 4)
- Recompute ALL resource names with the truncated project โ do NOT mix long and short names
- Truncate at the nearest hyphen boundary within budget (e.g.,
- Never use reserved words as resource names (
admin,login,root,test) - Populate
naming.resources[]inprepare-plan.jsonwith concrete names after validation