Skip to content

Module Architecture

infra/bicep/malta-catering/
├── main.bicep # Orchestration — phased module calls
├── main.bicepparam # Parameter file (.bicepparam format)
├── modules/
│ ├── log-analytics.bicep # AVM: operational-insights/workspace
│ ├── app-insights.bicep # AVM: insights/component
│ ├── virtual-network.bicep # AVM: network/virtual-network
│ ├── private-dns-zones.bicep # AVM: network/private-dns-zone (×3)
│ ├── key-vault.bicep # AVM: key-vault/vault + PE
│ ├── storage.bicep # AVM: storage/storage-account + PE
│ ├── container-registry.bicep # AVM: container-registry/registry + PE
│ ├── app-service-plan.bicep # AVM: web/serverfarm
│ ├── web-app.bicep # AVM: web/site + VNet integration
│ └── budget.bicep # Native: Microsoft.Consumption/budgets
└── deploy.ps1 # Deployment script with what-if
ModuleAVM SourceVersionPurpose
log-analytics.bicepbr/public:avm/res/operational-insights/workspace0.15.0Shared log sink for all resources
app-insights.bicepbr/public:avm/res/insights/component0.7.1Application-level telemetry
virtual-network.bicepbr/public:avm/res/network/virtual-network0.7.0VNet with subnets for ASP + PE
private-dns-zones.bicepbr/public:avm/res/network/private-dns-zone0.7.0DNS zones for KV, Storage, ACR PEs
key-vault.bicepbr/public:avm/res/key-vault/vault0.13.3Secrets management with RBAC auth + PE
storage.bicepbr/public:avm/res/storage/storage-account0.32.0Table Storage for orders and menu data + PE
container-registry.bicepbr/public:avm/res/container-registry/registry0.12.1Premium-tier image registry + PE
app-service-plan.bicepbr/public:avm/res/web/serverfarm0.4.0S1 App Service Plan (Linux)
web-app.bicepbr/public:avm/res/web/site0.15.0React SPA + API with MI + VNet integration
budget.bicepNative Microsoft.Consumption/budgets@2023-11-01Cost monitoring with forecast alerts
ResourcePatternExample (dev)Generated Name
Resource Grouprg-{project}-{env}rg-malta-catering-devrg-malta-catering-dev
Log Analytics Workspacelog-{project}-{env}log-malta-catering-devlog-malta-catering-dev
Application Insightsappi-{project}-{env}appi-malta-catering-devappi-malta-catering-dev
Virtual Networkvnet-{project}-{env}vnet-malta-catering-devvnet-malta-catering-dev
App Service Planasp-{project}-{env}asp-malta-catering-devasp-malta-catering-dev
Web Appapp-{project}-{env}app-malta-catering-devapp-malta-catering-dev
Key Vaultkv-{short}-{env}-{suffix}kv-malta-dev-a1b2kv-malta-dev-{uniqueSuffix}
Storage Accountst{short}{env}{suffix}stmaltadeva1b2stmaltadev{uniqueSuffix}
Container Registryacr{short}{env}{suffix}acrmaltadeva1b2acrmaltadev{uniqueSuffix}
Consumption Budgetbudget-{project}-{env}budget-malta-catering-devbudget-malta-catering-dev

Governance Tag Contract (9 Required Tags on Resource Group)

Section titled “Governance Tag Contract (9 Required Tags on Resource Group)”
TagSourceValue (dev)
environmentParameterdev
ownerParameter(user-supplied)
costcenterParameter(user-supplied)
applicationParametermalta-catering
workloadParameterordering-portal
slaParameter99.0
backup-policyParameternone-demo
maint-windowParametersun-02-06
technical-contactParameter(user-supplied email)
ResourceSecurity SettingValue
Storage AccountminimumTlsVersionTLS1_2
Storage AccountsupportsHttpsTrafficOnlytrue
Storage AccountallowBlobPublicAccessfalse
Storage AccountallowSharedKeyAccessfalse (Entra ID only)
Storage AccountPrivate Endpointsnet-pe subnet, privatelink.table.core.windows.net
Key VaultenableRbacAuthorizationtrue
Key VaultenablePurgeProtectiontrue
Key VaultenableSoftDeletetrue (7-day retention)
Key VaultPrivate Endpointsnet-pe subnet, privatelink.vaultcore.azure.net
Container RegistryadminUserEnabledfalse
Container RegistrySKUPremium (required for PE)
Container RegistryPrivate Endpointsnet-pe subnet, privatelink.azurecr.io
Web AppmanagedIdentities.systemAssignedtrue
Web Apphttp20Enabledtrue
Web AppVNet Integrationsnet-app subnet delegation
Web App → Key VaultRole: Key Vault Secrets UserSystem-assigned MI
Web App → StorageRole: Storage Table Data ContributorSystem-assigned MI
Web App → ACRRole: AcrPullSystem-assigned MI
All resourcesDiagnostic settingsAll logs + metrics → Log Analytics