Resources
Resource types
Section titled “Resource types”Every Azure resource has a type in the format Microsoft.{Provider}/{ResourceType}. The lexicon generates a TypeScript class for each type.
import { StorageAccount, VirtualMachine, WebApp } from "@intentius/chant-lexicon-azure";Common resource types:
| Type | Class | Description |
|---|---|---|
Microsoft.Storage/storageAccounts | StorageAccount | Blob, file, queue, table storage |
Microsoft.Compute/virtualMachines | VirtualMachine | IaaS virtual machines |
Microsoft.Web/sites | WebApp | App Service web applications |
Microsoft.Web/serverfarms | AppServicePlan | App Service plans |
Microsoft.Network/virtualNetworks | VirtualNetwork | Virtual networks |
Microsoft.Network/networkSecurityGroups | NetworkSecurityGroup | Firewall rules |
Microsoft.ContainerService/managedClusters | ManagedCluster | AKS Kubernetes clusters |
Microsoft.KeyVault/vaults | KeyVault | Secret and key management |
Microsoft.Sql/servers | SqlServer | Azure SQL logical servers |
Microsoft.ContainerRegistry/registries | ContainerRegistry | Docker container registries |
Resource-level fields
Section titled “Resource-level fields”ARM templates have fields that sit at the resource level (outside properties):
The pricing tier or capability level:
export const storage = new StorageAccount({ sku: { name: "Standard_GRS" },});Disambiguates resource subtypes:
export const storage = new StorageAccount({ kind: "StorageV2", // or "BlobStorage", "BlockBlobStorage"});identity
Section titled “identity”Managed identity configuration:
export const app = new WebApp({ identity: { type: "SystemAssigned" },});Key-value metadata:
export const storage = new StorageAccount({ tags: { environment: "production", team: "platform" },});Availability zone placement:
export const vm = new VirtualMachine({ zones: ["1"],});Marketplace plan information:
export const vm = new VirtualMachine({ plan: { name: "my-plan", publisher: "my-publisher", product: "my-product", },});location
Section titled “location”Azure region. Defaults to [resourceGroup().location]:
import { Azure } from "@intentius/chant-lexicon-azure";
export const storage = new StorageAccount({ location: Azure.ResourceGroupLocation, // default // or: location: "eastus2",});properties
Section titled “properties”Everything that isn’t a resource-level field goes under the template’s properties. Pass the fields flat, or pass ARM’s own properties object as the generated types describe it; either way the template has one properties level.
Names and references
Section titled “Names and references”A resource’s name prop is its ARM name, and the export name stands in only when there is no name. A reference to another resource uses the ARM name: .id becomes [resourceId('<type>', '<name>')], any other attribute becomes [reference('<name>').<attribute>], and dependsOn is inferred from both. A child resource named vnet/apps gets one resourceId argument per segment.
apiVersion
Section titled “apiVersion”Every ARM resource requires an apiVersion. The serializer fills in the latest stable version, so you rarely set it.
The post-synth checks AZR011 and AZR012 validate:
- AZR011: apiVersion exists and follows YYYY-MM-DD format
- AZR012: apiVersion is not outdated (older than 2023-01-01)