Ga naar inhoud

Provisioning

Hoe de code een platformomgeving provisioned, van de build-infrastructuur tot en met de laatste layer. De volgorde staat beschreven in de platform deploy flow; deze pagina legt elk onderdeel uit.

Stap voor stap, inclusief het state storage account en de service connections: Pipelines en agents voorbereiden.

Infra: de job runners

De infrastructure pipeline (stage-infrastructure.yaml → Invoke-XebiaInfrastructure) deployt de build-infrastructuur vanuit src/Xebia.Mcp/Files/bicep/deploy/initialize/main.bicep naar de subscription en resource group in mcp.json → Azure.JobRunner:

Resource Geconfigureerd via (mcp.json)
Virtual network, subnets en NAT gateway Azure.JobRunner.IpAddressPrefixes (Vnet, AgentSubnet, PepSubnet, CaeSubnet, DnsResolverSubnet)
Azure Container Registry –
Managed DevOps Pool <AgentPool> AzureDevops.AgentPool, Azure.JobRunner.MaximumAgents, Azure.JobRunner.Sku
Container Apps environment (voor container jobs, pool <AgentPool>-CTR) –
DNS resolver –

Daarnaast maakt de pipeline de blob container aan in het storage account voor de hub Terraform state (Initialize-XebiaMcpTerraformStateContainer). Het storage account zelf, de spoke state container en de deployment service principals zijn vereisten; geen enkele pipeline maakt ze aan.

In de referentieconfiguratierepository wordt infrastructure.yaml door CI getriggerd bij wijzigingen in het bestand zelf of in pipelines/variables.yaml, en draait canary en prod met sequentiële locking.

Container: het mcp image

De container pipeline (Invoke-XebiaContainer -Action Prepare|Build) bouwt src/Dockerfile vanuit de gepinde codeversie en pusht het image naar de ACR van de job runner. Het image bevat PowerShell 7, Terraform, de Azure CLI, de Xebia.Mcp module en de hub Terraform (tijdens de build gekopieerd uit infra/). De imagenamen komen uit AzureDevops.ContainerImageName (normaal ["mcp"]).

Tags worden gezet door Get-XebiaMcpContainerTags.ps1; zie Releasen. De entry pipelines draaien op imageRef: mcp:latest.

Layers, per omgeving en regio

De hub pipeline provisioned de hub layers voor één platformomgeving (één mcp.json) per stage:

  1. Omgeving. De naam van de platformomgeving is de naam van de map die mcp.json bevat, bijvoorbeeld canary of prod. Die naam wordt gebruikt in de state key en als config_path aan Terraform meegegeven.
  2. Regio's. De region matrix wordt opgebouwd uit <env-folder>/global.auto.tfvars (Get-XebiaRegion.ps1, Set-XebiaRegionMatrix.ps1):

    primary_region       = "weu"
    active_regions       = ["weu", "neu"]
    active_regions_names = ["westeurope", "northeurope"]
    

    primary_region moet in active_regions staan. Level 1 draait in de primaire regio, level 2 in de overige regio's, level 3 in alle regio's en level 4 (postdeployment) alleen in de primaire regio. 3. Layers. Voor elke layer en regio plant de module Terraform vanuit terraform/cloud-platform/deploy/<layer> met de var-bestanden van die regio en omgeving, en slaat de state op in <env>-<region>-<layer>.tfstate. Zie Deployment layers.

flowchart TB
    mcp["environments/prod/mcp.json"] --> env["Omgeving = prod<br/>config_path = environments/prod"]
    env --> g["global.auto.tfvars<br/>primary_region, active_regions"]
    g --> r1["weu (primair)"]
    g --> r2["neu"]
    r1 --> l1["foundation, connectivity (level 1)"]
    r2 --> l2["foundation, connectivity (level 2)"]
    r1 --> l3["firewall, identity, management (level 3)"]
    r2 --> l3
    r1 --> l4["postdeployment (level 4)"]

Spokes

De spoke pipeline provisioned spokes met de Terraform in src/Xebia.Mcp/Files/terraform/spoke-canvas/:

Stap Terraform root State key
Subscription deploy/subscription <wl>_<env>_Subscription.tfstate
Spoke canvas deploy/spoke spoke_<wl>_<env>.tfstate

<wl> en <env> zijn de workloadShortName en environment van de spoke-JSON, in kleine letters. Zie Spoke-config.

De subscriptionstap komt eerst, zodat het spoke canvas altijd een subscription heeft om in te werken. Het is bewust een aparte stap, in plaats van een pool met vrije subscriptions: zie Subscription provisioning. Wat de canvasstap aanmaakt, staat in Spoke canvas; de Terraform-inputs en -outputs staan in de modulereferentie.

Lokaal provisionen

dev/dev.ps1 draait dezelfde functies lokaal, in de dev container, tegen MCP_CONFIG (standaard config/Demo/canary/mcp.json). WhatIf staat aan, tenzij je -SkipWhatIf meegeeft.

pwsh ./dev/dev.ps1 -Action Test
pwsh ./dev/dev.ps1 -Action Infrastructure -SkipWhatIf
pwsh ./dev/dev.ps1 -Action Container -SkipTests

Voor hub layers en spokes, zie Eén layer lokaal draaien; de hub- en spoke-acties van dev.ps1 werken op main nog niet (Bekende problemen).