3. Pulumi for Azure

Azure

In this chapter you connect Pulumi to Azure and provision real cloud infrastructure: a Resource Group, virtual network, AKS cluster, container registry, and a static public IP for the ingress controller.

Azure Resource Model

Azure organises resources into a three-level hierarchy:

LevelDescriptionExample
SubscriptionBilling and access boundary — one per team or projectsub-garaio-lab
Resource GroupLifecycle container — deploy and delete resources as a grouprg-lab-dev
ResourceIndividual Azure service (VM, VNet, cluster, …)aks-lab-dev

Naming Convention

This workshop follows the Azure Cloud Adoption Framework naming pattern:
[abbreviation]-[purpose]-[environment].

Resource typeAbbreviationLab name
Resource Grouprg-rg-lab-dev
Virtual Networkvnet-vnet-lab-dev
Subnet(no prefix)nodes
AKS Clusteraks-aks-lab-dev
Container Registry (ACR)crcrlabdev<suffix>
Public IP Addresspip-pip-lab-dev-ingress

Some resource types — storage accounts, ACR, Key Vault — require globally unique names. The lab appends a random suffix generated by pulumi_random.RandomString.

Provider Packages

PackagePyPI nameWhat it manages
pulumi-azure-nativepulumi-azure-nativeAll Azure Resource Manager APIs
pulumi-randompulumi_randomRandom strings and passwords

Authentication

Pulumi reads Azure credentials from the active az CLI session — no extra configuration is needed for local development:

az login           # opens a browser / device-code flow
az account show    # confirm the active subscription

For automation (CI/CD), Pulumi reads credentials from environment variables: ARM_CLIENT_ID, ARM_CLIENT_SECRET, ARM_TENANT_ID, ARM_SUBSCRIPTION_ID.

Azure

Pulumi Azure Native Provider