Delen via


Infrastructuur als code

Infrastructure as Code (IaC) is een belangrijke DevOps-praktijk die betrekking heeft op het beheer van infrastructuur, zoals netwerken, rekenservices, databases, opslag en verbindingstopologie, in een beschrijvend model. Met IaC kunnen teams sneller en met meer vertrouwen wijzigingen ontwikkelen en vrijgeven. Voordelen van IaC zijn onder andere:

  • Meer vertrouwen in implementaties
  • Mogelijkheid om meerdere omgevingen te beheren
  • Beter inzicht in de status van de infrastructuur

Zie Herhaalbare infrastructuur voor meer informatie over de voordelen van het gebruik van Infrastructure as Code.

Gereedschappen

Er zijn twee benaderingen die u kunt gebruiken bij het implementeren van infrastructuur als code.

  • Imperatieve infrastructuur als code omvat het schrijven van scripts in talen zoals Bash of PowerShell. U geeft expliciet opdrachten op die worden uitgevoerd om een gewenst resultaat te produceren. Wanneer u imperatieve implementaties gebruikt, is het aan u om de volgorde van afhankelijkheden, foutbeheer en resource-updates te beheren.
  • Declaratieve infrastructuur als code omvat het schrijven van een definitie die definieert hoe uw omgeving eruit moet zien. In deze definitie geeft u een gewenst resultaat op in plaats van hoe u dit wilt bereiken. Het hulpmiddel bepaalt hoe het resultaat tot stand kan worden gebracht door uw huidige toestand te inspecteren, deze te vergelijken met uw doeltoestand en vervolgens de verschillen toe te passen.

ARM-sjablonen

Bekijk informatie over Azure Resource Manager-sjablonen (ARM-sjablonen).

Biceps

Bicep is een domeinspecifieke taal (DSL) die declaratieve syntaxis gebruikt om Azure-resources te implementeren. In Bicep-bestanden definieert u de infrastructuur die u wilt implementeren en de bijbehorende eigenschappen. In vergelijking met ARM-sjablonen zijn Bicep-bestanden gemakkelijker te lezen en te schrijven voor een niet-ontwikkelaarsdoelgroep, omdat ze een beknopte syntaxis gebruiken.

Met deze Bicep-voorbeeldcode wordt een Azure Storage-account geïmplanteerd in de regio van de resourcegroep. Het past Standard_LRS redundantie en het type StorageV2 toe. De toegangslaag is ingesteld op 'Hot' voor frequente gegevenstoegang.

param location string = resourceGroup().location
param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
resource storageAccount 'Microsoft.Storage/storageAccounts@2021-06-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

Terraformatie

Bekijk informatie over Terraform.

Azure-opdrachtregelinterface (CLI)

Bekijk informatie over Azure CLI.

Infrastructuur als codemodules

Een van de doelstellingen van het gebruik van code voor het implementeren van infrastructuur is het dupliceren van werk of het maken van meerdere sjablonen voor dezelfde of vergelijkbare doeleinden te voorkomen. Infrastructuurmodules moeten herbruikbaar en flexibel zijn en moeten een duidelijk doel hebben.

Modules zijn onafhankelijke bestanden, die doorgaans een set resources bevatten die samen moeten worden geïmplementeerd. Met modules kunt u complexe sjablonen opsplitsen in kleinere, beter beheerbare sets code. U kunt ervoor zorgen dat elke module zich richt op een specifieke taak en dat alle modules herbruikbaar zijn voor meerdere implementaties en workloads.

Bicepmodules

Met Bicep kunt u modules maken en aanroepen. Zodra modules zijn gemaakt, kunnen ze worden gebruikt vanuit elke andere Bicep-sjabloon. Een Bicep-module van hoge kwaliteit moet meerdere gerelateerde resources definiëren. Wanneer u bijvoorbeeld een Azure-functie definieert, implementeert u doorgaans een bepaalde toepassing, een hostingabonnement voor die toepassing en een opslagaccount voor de metagegevens van die toepassing. Deze onderdelen zijn afzonderlijk gedefinieerd, maar vormen een logische groepering van resources, dus u moet overwegen ze samen te definiëren als een module.

Bicep-modules maken vaak gebruik van:

  • Parameters voor het accepteren van waarden uit een aanroepende module.
  • Uitvoerwaarden om resultaten te retourneren naar een aanroepende module.
  • Resources voor het definiëren van een of meer infrastructuurobjecten voor een module die moet worden beheerd.

Bicep-modules publiceren

U hebt verschillende opties voor het publiceren en delen van Bicep-modules.

  • Openbaar register: Het openbare moduleregister wordt gehost in een Microsoft-containerregister (MCR). De broncode en de modules die deze bevat, worden opgeslagen in GitHub.
  • Privéregister: U kunt Azure Container Registry gebruiken om modules te publiceren naar een privéregister. Zie Bicep en GitHub Actions voor informatie over het publiceren van modules naar een register in een CI/CD-pijplijn, of, indien gewenst, Bicep en Azure Pipelines.
  • Sjabloonspecificatie: U kunt sjabloonspecificaties gebruiken om Bicep-modules te publiceren. Sjabloonspecificaties zijn bedoeld om volledige sjablonen te zijn, maar Bicep stelt u in staat om sjabloonspecificaties te gebruiken om modules te implementeren.
  • Versiebeheersysteem: U kunt modules rechtstreeks laden vanuit hulpprogramma's voor versiebeheer, zoals GitHub of Azure DevOps.

Terraformmodules

Met Terraform kunt u modules maken en aanroepen. Elke Terraform-configuratie heeft ten minste één module, ook wel de hoofdmodule genoemd, die bestaat uit resources die zijn gedefinieerd in .tf bestanden in uw hoofdwerkmap. Elke module kan andere modules aanroepen, zodat u onderliggende modules kunt opnemen in uw hoofdconfiguratiebestand. Modules kunnen ook meerdere keren worden aangeroepen binnen dezelfde configuratie of vanuit verschillende configuraties.

Modules worden gedefinieerd met dezelfde concepten van de configuratietaal. Ze maken meestal gebruik van:

  • Invoervariabelen voor het accepteren van waarden uit een aanroepende module.
  • Uitvoerwaarden om resultaten te retourneren naar een aanroepende module.
  • Resources voor het definiëren van een of meer infrastructuurobjecten voor een module die moet worden beheerd.

Terraform-modules publiceren

U hebt verschillende opties voor het publiceren en delen van Terraform-modules:

  • Openbaar register: HashiCorp heeft een eigen Terraform Module Registry waarmee gebruikers deelbare Terraform-modules kunnen genereren. Er zijn momenteel verschillende Azure-modules gepubliceerd in het Terraform Module Registry.
  • Privéregister: U kunt Terraform-modules naadloos publiceren naar een privéopslagplaats, zoals Terraform Cloud Private Registry of Azure Container Registry.
  • Versiebeheersysteem: U kunt privémodules rechtstreeks laden vanuit hulpprogramma's voor versiebeheer, zoals GitHub. Zie Terraform-modulebronnen voor informatie over ondersteunde bronnen.

Ontwerpoverwegingen

  • Overweeg om IaC te gebruiken bij het implementeren van landingszone-resources in Azure. IaC realiseert implementatieoptimalisatie volledig, vermindert de configuratie-inspanning en automatiseert de implementaties van de hele omgeving.

  • Bepaal of u een imperatieve of declaratieve IaC-benadering moet gebruiken.

    • Als u een imperatieve benadering gebruikt, moeten expliciet opdrachten worden uitgevoerd die het gewenste resultaat opleveren.

    • Als u een declaratieve benadering gebruikt, geeft u het gewenste resultaat op in plaats van hoe u dit wilt doen.

  • Overweeg implementatiebereiken. Een goed begrip hebben van Azure-beheerniveaus en -hiërarchie. Elke IaC-implementatie moet het bereik weten waarop Azure-resources worden geïmplementeerd.

  • Bepaal of u een systeemeigen Azure- of Niet-systeemeigen IaC-hulpprogramma van Azure moet gebruiken. Enkele punten om in overweging te nemen:

    • Systeemeigen Azure-hulpprogramma's zoals Azure CLI, ARM-sjablonen en Bicep worden volledig ondersteund door Microsoft, waardoor hun nieuwe functies sneller kunnen worden geïntegreerd.

    • Met niet-systeemeigen hulpprogramma's zoals Terraform kunt u infrastructuur beheren als code voor meerdere cloudproviders, zoals AWS of GCP. Het kan echter enige tijd duren voordat nieuwe Azure-functies worden opgenomen in niet-systeemeigen functies. Als uw organisatie meerdere clouds heeft of als uw organisatie al gebruikmaakt van en goed in Terraform werkt, kunt u Terraform gebruiken om Azure-landingszones te implementeren.

  • Aangezien u met modules complexe sjablonen in kleinere codesets kunt opsplitsen, kunt u overwegen om IaC-modules te gebruiken voor resources die vaak samen worden geïmplementeerd. U kunt ervoor zorgen dat elke module zich richt op een specifieke taak en herbruikbaar is voor meerdere implementaties en workloads.

  • Overweeg een publicatiestrategie voor IaC-modules te gebruiken door te kiezen tussen openbare registers, privéregisters of een versiebeheersysteem zoals een Git-opslagplaats.

  • Overweeg het gebruik van een CI/CD-pijplijn voor IaC-implementaties. Een pijplijn dwingt het herbruikbare proces af dat u instelt om de kwaliteit van uw implementaties en Azure-omgeving te garanderen.

Ontwerpaanaanvelingen

  • Gebruik een IaC-benadering voor het implementeren, beheren, controleren en ondersteunen van Azure-landingszone-implementaties.

  • Gebruik systeemeigen Azure-hulpprogramma's voor IaC in de volgende scenario's:

    • U wilt alleen systeemeigen Azure-hulpprogramma's gebruiken. Uw organisatie heeft mogelijk een eerdere implementatie van ARM- of Bicep-sjablonen.

    • Uw organisatie wil onmiddellijke ondersteuning bieden voor alle preview- en GA-versies van Azure-services.

  • Gebruik niet-systeemeigen hulpprogramma's voor IaC in de volgende scenario's:

    • Uw organisatie gebruikt momenteel Terraform om infrastructuur te implementeren in andere clouds, zoals AWS of GCP.

    • Uw organisatie hoeft geen directe ondersteuning te hebben voor alle preview- en GA-versies van Azure-services.

  • Gebruik herbruikbare IaC-modules om terugkerende werkzaamheden te voorkomen. U kunt modules in uw organisatie delen om meerdere projecten of workloads te implementeren en minder complexe code te beheren.

  • Publiceer en gebruik IaC-modules uit openbare registers in de volgende scenario's:

    • U wilt modules gebruiken voor Azure Landing Zone die al zijn gepubliceerd naar openbare registers. Voor meer informatie, zie de Azure-landingszones Terraform-module.

    • U wilt modules gebruiken die worden onderhouden, bijgewerkt en ondersteund door Microsoft, Terraform of andere moduleproviders.

      • Controleer de ondersteuningsverklaring van elke moduleprovider die u evalueert.
  • Publiceer en gebruik IaC-modules van privéregisters of versiebeheersystemen in de volgende scenario's:

    • U wilt uw eigen modules maken op basis van de vereisten van uw organisatie.

    • U wilt volledige controle over alle functies hebben en nieuwe versies van modules onderhouden, bijwerken en publiceren.

  • Gebruik een CI/CD-pijplijn om IaC-artefacten te implementeren en de kwaliteit van uw implementatie en Azure-omgevingen te garanderen.