IaC Accelerator¶
De IaC Accelerator is een compleet, werkend voorbeeld van een infrastructure-as-code-project dat de modules van Managed Templates gebruikt. Het is bedoeld voor teams die nieuw zijn met de bibliotheek of met infrastructure as code. Je kopieert het naar je eigen repository en past het aan. Het verlaagt de drempel en geeft je een structuur, een deploymentpipeline en geautomatiseerde updates van je moduleversies.
Een referentieproject, geen product
De accelerator laat een aanbevolen aanpak zien. Specialistische gevallen zijn niet zijn doel: pas de bestanden aan je behoeften aan. De namen, pool, service connections, subscriptions en registry in de bestanden zijn placeholders die je moet vervangen. Het onderhoudende team test en ondersteunt de accelerator zelf, niet de wijzigingen die jij in je kopie aanbrengt.
Wat erin zit¶
| Onderdeel | Terraform | Bicep |
|---|---|---|
| Projectstructuur | Root module per omgeving, een gedeelde main-module, lokale modules |
Eén main.bicep, één parameterbestand per omgeving, lokale modules |
| Deploymentpipeline | Plan-stage, daarna een apply-stage die op goedkeuring wacht | Een optionele what-if-stage, daarna een deploy-stage die op goedkeuring wacht |
| Geautomatiseerde updates | Renovate-configuratie en -pipeline, voor Azure DevOps of GitHub Actions | Hetzelfde |
| Modulebron | git::-bron met een versietag |
Verwijzing naar de container registry met een versie |
Wat het deployt¶
De voorbeeldworkload bestaat uit de volgende resources. Het is een mix van modules, geen aanbevolen architectuur.
| Resource | Module |
|---|---|
| Resourcegroep | Gewone resource, benoemd met de Azure naming-module (Terraform) |
| User-assigned identity | user_assigned_identity |
| Log Analytics workspace | log_analytics_workspace |
| Key Vault, met een encryptiekey | key_vault |
| Storage account, versleuteld met de key | storage_account |
| App Service plan en een Linux web app | serverfarm, app_service_site_linux |
| Virtuele Windows-machine | virtual_machine_windows |
| SQL server | sql_server |
| Recovery Services vault met een VM-backuppolicy | Lokale code in de accelerator (rsv), geen module uit de bibliotheek |
Het voorbeeld verbindt met een bestaande spoke: het zoekt het virtuele netwerk en het subnet op en plaatst de private endpoints daar. De standaardnamen volgen de naamgevingsconventie van het spoke canvas (Naamgeving en tags): wijzig ze als je spoke andere namen gebruikt. Dit betekent dat de accelerator het best werkt in een spoke die het platform voor je heeft aangemaakt (Wat je krijgt).
Structuur¶
Terraform¶
environments/ One root module per environment (dev, prod). Entry point, providers, backend, variables.
main/ Infrastructure for all environments: resources, module calls, data sources.
modules/ Project-specific modules.
pipelines/ terraform.yaml, templates for plan and apply, Renovate pipeline and workflow.
renovate.json Example Renovate configuration.
Elke map in environments/ is een root module die de gedeelde main-module aanroept met omgevingsspecifieke waarden.
Je kunt omgevingen toevoegen door mappen toe te voegen. De structuur laat je ook vanaf een werkstation deployen, via een VPN als
resources publieke toegang uit hebben staan. Beslis of je de versiebeperkingen van Terraform in main/terraform.tf instelt of
in elke omgeving.
Bicep¶
main.bicep The infrastructure, at subscription scope.
dev.bicepparam Parameters of the dev environment.
prod.bicepparam Parameters of the prod environment.
modules/ Local modules: the backup vault, and a module that looks up the spoke network.
pipelines/ bicep.yaml, a single-environment template, Renovate pipeline and workflow.
renovate.json Example Renovate configuration.
Houd gedeelde resources, naamgeving en outputs in main.bicep, en omgevingsspecifieke waarden in de parameterbestanden.
Gebruik het¶
- Kopieer de inhoud van
iac_accelerator/terraform/ofiac_accelerator/bicep/uit de repository van de bibliotheek naar je repository. - Bekijk en pas alle bestanden aan. Zoek naar de TODO-opmerkingen, en naar het repositoryadres (Terraform) of het registryadres (Bicep) dat de bestanden als voorbeeld bevatten. Vervang ze door de jouwe.
- Pas de pipelinedefinitie aan op je CI/CD-opzet: agent pool, namen van service connections, subscriptions en de versie van de tool (Terraform of Bicep).
- Maak Azure DevOps-environments aan die bij je omgevingsnamen passen (
dev,prod) en voeg voor allemaal approvers toe, zodat niets verandert zonder review van het vorige resultaat. - Maak service connections aan op subscriptionscope.
- Zorg dat de pipeline de bibliotheek kan lezen: zie Geef de pipeline toegang voor Terraform en Geef een Bicep-pipeline toegang voor Bicep. De Terraform-pipeline bevat de git-stappen al.
- Commit, push, voeg het pipelinebestand toe als pipeline in Azure DevOps en draai hem.
Waarden doorgeven vanuit een variable group¶
| Terraform | Bicep | |
|---|---|---|
| Hoe | Noem de variable group in het variables-blok en map waarden met de parameter envs, bijvoorbeeld TF_VAR_my_variable: $(variable-group-variable-name) |
Gebruik variableGroupName voor de groep, secretToEnvMapping voor secrets en bicepAdditionalParams voor gewone waarden |
| Secrets | Markeer ze als secret in de groep en als sensitive in Terraform |
Markeer ze als secret in de groep en map ze met secretToEnvMapping, zodat ze niet worden gelogd |
Waarden die van buiten komen maken het lastiger om de code lokaal te draaien: lever ze dan op een andere manier aan (omgevingsvariabelen of een
.tfvars-bestand dat niet wordt gecommit).
De pipelines¶
Terraform-pipeline¶
De pipeline heeft de parameters environment (dev of prod) en operation (apply of destroy). De template draait twee
stages: een plan-stage en een deploy-stage die alleen draait als het plan wijzigingen bevat. De deploy-stage gebruikt een
Azure DevOps-environment, dus de approvers die je instelt moeten hem goedkeuren. De apply gebruikt het opgeslagen plan, en na een
apply legt een refresh-only run bijwerkingen van de API vast in de state.
Bicep-pipeline¶
De pipeline heeft stages voor dev en prod, waarbij prod van dev afhangt. Elke stage kan eerst een what-if draaien (de
parameter runWhatIf, standaard uit, omdat de output rommelig kan zijn) en deployt daarna met az deployment sub create.
De Bicep-versie wordt uit een pipelinevariabele geïnstalleerd.
Houd modules actueel¶
De accelerator bevat een Renovate-opzet. Renovate controleert de versies van de modules die je
gebruikt (en van de Terraform-providers) en opent een pull request als er een nieuwere versie bestaat. Het leest de Bicep-registryverwijzingen
en de Terraform-git::-bronnen met tags van de vorm terraform/<module>/<version>, per module afgebakend, zodat
een module nooit een versie krijgt uit de tags van een andere module. Updates worden gegroepeerd per type update.
Zet het als volgt op:
- Houd de pipeline of workflow die bij je platform past (Azure DevOps of GitHub Actions) en verwijder de andere.
- Vervang de placeholders in
renovate.jsonen in de pipeline (de registry, de repository, de agent pool). - Geef Renovate permissie om branches en pull requests aan te maken. In Azure DevOps zijn dat Contribute en Contribute to pull requests voor de build identity van de pipeline. In GitHub Actions heb je een GitHub App nodig, omdat pull requests die het standaardtoken aanmaakt geen andere workflows starten.
- Geef voor Bicep de pipeline toegang tot de registry via een service connection die workload identity federation gebruikt. Geef voor Terraform-modules in een andere repository daar ook leestoegang.
- Draai het één keer met
dryRunoptrue. De standaardwaarde isfalse, en het wekelijkse schema draait het echt. Controleer dat alle bestanden met verwijzingen in het log verschijnen en dat geen enkele dependency eenskipReasonheeft. - Draai het daarna zonder dry-run. Controleer na de eerste echte run dat een pull request alleen de versiestring wijzigt.
Lees de changelog voordat je merget
Een Renovate-pull request wijzigt de versie, niet je code. Lees de changelog en de upgrade notes
bij major versies, en laat je normale pipeline de wijziging eerst in dev testen.