Vad är infrastruktur som kod?
Du uppmanas att utvärdera om infrastruktur som kod kan vara en värdefull metod för resursetablering på ditt företag. Du granskar de tillgängliga alternativen för distribution, inklusive:
- Azure Portal
- Azure CLI
- Azure PowerShell
- Azure Resource Manager-mallar (JSON och Bicep)
Du letar efter ett repeterbart alternativ och du måste bestämma vilken teknik som ska användas för att distribuera din Azure-infrastruktur.
I den här lektionen får du lära dig hur och varför infrastruktur som kod kan hjälpa dig att distribuera din Azure-infrastruktur på ett automatiserat och repeterbart sätt.
Azure CLI-kommandon används för att illustrera begrepp. Du lär dig mer om att använda kommandon för att distribuera resurser i andra moduler i Bicep-utbildningsvägen.
Definiera infrastruktur som kod
Ditt företag designar nya leksaker för lansering till marknaden, och de flesta nya leksaker kräver lite montering efter köpet. Företagets designteam skapar instruktionsböcker som ska ingå i varje leksak. Varje handbok innehåller information om hur du monterar leksaken korrekt.
Du kan se infrastrukturen som kod som en instruktionsbok för infrastrukturen. Den manuella informationen beskriver slutkonfigurationen av dina resurser och hur du når det konfigurationstillståndet.
Infrastruktur som kod är processen för att automatisera infrastrukturens etablering. Den använder ett beskrivande kodningsspråk och versionshanteringssystem som liknar det som används för källkod. När du skapar ett program genererar källkoden samma resultat varje gång du kompilerar det. På liknande sätt är distributioner av infrastruktur som kod automatiserade, konsekventa och repeterbara. Infrastruktur som kod kan automatisera distributionen av dina infrastrukturresurser, till exempel virtuella nätverk, virtuella datorer, program och lagring.
Om du kommer ihåg instruktionsboken för den nya leksaken finns det flera sätt att skriva instruktionsboken. Ett alternativ är att beskriva varje steg i byggprocessen. Ett annat alternativ är att visa en exploderad vy över de bitar och delar som behövs för att montera leksaken. Senare i den här lektionen får du lära dig om skillnaderna mellan imperativ och deklarativ kod och hur de relaterar till företagets instruktionsböcker.
Varför ska du använda infrastruktur som kod?
Att använda en infrastruktur som kodmetod ger många fördelar med resursetablering. Med infrastruktur som kod kan du:
- Öka förtroendet för dina distributioner.
- Hantera flera miljöer.
- Bättre förstå dina molnresurser.
Öka konfidensen
En av fördelarna med att använda infrastruktur som kod är den förtroendenivå som du får i dina distributioner från förbättringar i konsekvens och säkerhet.
Integrering med aktuella processer: Om din organisation redan använder standardmetoder för programvaruutveckling kan du använda samma processer för dina infrastrukturdistributioner. Peer-granskningar kan till exempel hjälpa dig att identifiera problem i konfigurationer som kan vara svåra att identifiera när du gör manuella ändringar.
Konsekvens: Genom att använda en metod för infrastruktur som kod kan ditt team följa väletablerade processer för att distribuera infrastrukturen. Genom att följa dessa processer övergår ansvaret från en liten grupp individer till automatiseringsprocessen och verktygen. Infrastruktur som kod hjälper till att minska mänskliga fel vid resursetablering och säkerställa konsekventa distributioner.
Automatisk genomsökning: Du kan skanna infrastruktur som kod-konfigurationer med automatiserade verktyg som kan söka efter fel i koden. Automatiserade verktyg kan också granska föreslagna ändringar för att säkerställa att säkerhets- och prestandapraxis följs.
Hemlig hantering: Många lösningar kräver hemligheter, till exempel anslutningssträng, krypteringsnycklar, klienthemligheter och certifikat. I Azure är ett Azure Key Vault den tjänst som används för att lagra dessa hemligheter på ett säkert sätt. Många verktyg för infrastruktur som kod kan integreras med Key Vault för att komma åt dessa hemligheter på ett säkert sätt vid distributionen.
Åtkomstkontroll: Med distributioner med infrastruktur som kod kan du använda hanterade identiteter eller tjänstkonton för att automatisera resursetablering. Den här processen säkerställer att endast dessa identiteter kan ändra dina molnresurser. Det hjälper också till att förhindra felaktiga konfigurationer som distribueras till produktion. Om det behövs kan du åsidosätta den här processen med hjälp av ett konto för nödåtkomst (kallas ofta ett break glass-konto) eller med hjälp av funktionen Privilegierad identitetshantering i Microsoft Entra.
Undvik konfigurationsavvikelse: Idempotens är en term som ofta associeras med infrastruktur som kod. När en åtgärd är idempotent innebär det att den ger samma resultat varje gång du kör den. Om du väljer verktyg som använder idempotentåtgärder kan du undvika konfigurationsavvikelser.
Som ett exempel på idempotens bör du överväga följande Azure CLI-kommando. Kommandot skapar en Azure-resursgrupp med namnet storage-resource-group
i regionen USA, östra.
az group create \
--name storage-resource-group \
--location eastus
Om du kör det här kommandot en andra gång får du exakt samma utdata eftersom det här Azure CLI-kommandot har utformats för att vara idempotent. Du får inget fel eller en duplicerad resursgrupp.
När du använder infrastruktur som kod kan du distribuera om din miljö vid varje version av lösningen. Dessa versioner kan innehålla små konfigurationsändringar eller till och med betydande uppdateringar. Den här processen hjälper till att undvika konfigurationsavvikelser. Om en oavsiktlig ändring görs i en resurs kan den korrigeras genom att omdistribuera konfigurationen. Genom att följa den här metoden dokumenterar du din miljö med hjälp av kod.
Hantera flera miljöer
Många organisationer har flera programmiljöer. Utvecklarna i ditt leksaksföretag kan ha flera versioner av programkod mellanlagrade på en lagringsplats för lansering till olika miljöer. Miljöerna kan omfatta utveckling, testning och produktion. Vissa organisationer har flera produktionsmiljöer för program som distribueras globalt. Andra organisationer, till exempel oberoende programvaruleverantörer (ISV: er), underhåller flera klientmiljöer för sina kunder.
Här är några av de viktigaste sätten som infrastruktur som kod kan hjälpa dig att hantera dina miljöer:
Etablera nya miljöer: En av de största fördelarna med molnbaserad databehandling är möjligheten att skala. Infrastruktur som kod kan hjälpa dig att skala till flera instanser av ditt program. Dessa instanser kan vara till hjälp när belastningen ökar, eller så kan du distribuera dem för användare i andra delar av världen. Den här flexibiliteten kan också vara fördelaktig när du testar ditt program, till exempel vid intrångstestning, belastningstestning och buggtestning. Med en väldefinierad kodbas kan du dynamiskt etablera dessa nya miljöer på ett konsekvent sätt.
Icke-produktionsmiljöer: Ett vanligt problem som organisationer står inför är differentiering mellan produktionsmiljöer och icke-produktionsmiljöer. När du etablerar resurser manuellt i separata miljöer är det möjligt att slutkonfigurationerna inte matchar. Ett exempel är när du distribuerar en ny funktion till en icke-produktionsmiljö som skiljer sig från produktionsmiljön. Det är möjligt att den nya funktionen inte fungerar som förväntat i produktionsmiljön på grund av skillnaderna mellan de två miljöerna. Att använda infrastruktur som kod kan hjälpa till att minimera dessa problem. Du kan använda samma konfigurationsfiler för varje miljö men ange olika indataparametrar för att skapa unikhet.
Haveriberedskap: I vissa situationer kan infrastruktur som kod användas som en del av en organisations haveriberedskapsplan. Du kan till exempel behöva återskapa din miljö i en annan region på grund av ett tjänststopp. Genom att använda infrastruktur som kod kan du snabbt etablera en ny instans att redundansväxla till i stället för att distribuera och konfigurera om allt manuellt.
Bättre förstå dina molnresurser
Infrastruktur som kod kan hjälpa dig att bättre förstå tillståndet för dina molnresurser:
Spårningslogg: Ändringar i dina infrastruktur-som-kod-konfigurationer är versionsstyrda på samma sätt som programmets källkod. Dessa ändringar spåras i din verktygsuppsättning, till exempel med Gits versionshistorik. Den här spårningsloggen innebär att du kan granska informationen om varje ändring, vem som gjorde ändringen och när ändringen gjordes.
Dokumentation: Du kan använda många infrastruktur-som-kod-konfigurationer för att lägga till metadata, till exempel kommentarer, som beskriver syftet med koden i konfigurationen. Om din organisation redan följer en koddokumentationsprocess kan du överväga att använda samma procedurer med din infrastrukturkod.
Enhetligt system: Många gånger, när en utvecklare arbetar med en ny funktion, måste de göra ändringar i programkod och infrastrukturkod. När du använder ett gemensamt system kan din organisation bättre förstå relationen mellan dina program och din infrastruktur.
Bättre förståelse för molninfrastruktur: När du använder Azure Portal för att etablera resurser abstraheras många av processerna från vyn. Infrastruktur som kod kan hjälpa dig att bättre förstå hur Azure fungerar och hur du felsöker problem som kan uppstå. När du till exempel skapar en virtuell dator med hjälp av Azure Portal abstraheras vissa skapade resurser från vyn. Hanterade diskar och nätverkskort distribueras i bakgrunden. När du distribuerar samma virtuella dator med hjälp av infrastruktur som kod har du fullständig kontroll över alla resurser som skapas.
Imperativ och deklarativ kod
Du kan skriva en instruktionsbok för ny leksakssammansättning på olika sätt. När du automatiserar distributionen av tjänster och infrastruktur kan du använda två metoder: imperativ och deklarativ.
Med imperativ kod kör du en sekvens med kommandon i en viss ordning för att nå en slutkonfiguration. Den här processen definierar vad koden ska åstadkomma och definierar hur uppgiften ska utföras. Den imperativa metoden är som en stegvis instruktionsbok.
Med deklarativ kod anger du endast slutkonfigurationen. Koden definierar inte hur uppgiften ska utföras. Den deklarativa metoden liknar instruktionshandboken för den exploderade vyn.
När du väljer mellan att använda en imperativ metod och en deklarativ metod för resursetablering bör du överväga de verktyg som kanske redan används i din organisation. Tänk också på vilken metod som kan matcha dina egna kunskaper.
Imperativ kod
I Azure utförs en imperativ kodmetod programmatiskt med hjälp av ett skriptspråk som Bash eller Azure PowerShell. Skripten kör en serie steg för att skapa, ändra och till och med ta bort dina resurser.
Det här exemplet visar två Azure CLI-kommandon som skapar en resursgrupp och ett lagringskonto.
#!/usr/bin/env bash
az group create \
--name storage-resource-group \
--location eastus
az storage account create \
--name mystorageaccount \
--resource-group storage-resource-group \
--location eastus \
--sku Standard_LRS \
--kind StorageV2 \
--access-tier Hot \
--https-only true
Det första kommandot skapar en resursgrupp med namnet storage-resource-group
i regionen USA, östra. Det andra kommandot skapar ett lagringskonto med namnet mystorageaccount
i resursgruppen storage-resource-group
som skapades i det första kommandot. Det andra kommandot konfigurerar även vissa egenskaper för lagringskontot, inklusive typen av lagringskonto och dess åtkomstnivå.
Du kan använda en imperativ metod för att helt automatisera resursetablering, men metoden har vissa nackdelar. När arkitekturen mognar kan skript bli komplexa att hantera. Kommandon kan uppdateras eller bli inaktuella, vilket kräver granskningar av befintliga skript.
Deklarativ kod
I Azure utförs en deklarativ kodmetod med hjälp av mallar. Det finns många typer av mallar att använda, bland annat:
- JSON
- Bicep
- Ansible, av RedHat
- Terraform, av HashiCorp
Kommentar
Den här modulen fokuserar på att använda Bicep-mallar.
Ta en titt på följande exempel på en Bicep-mall som konfigurerar ett lagringskonto. Konfigurationen av lagringskontot matchar Azure CLI-exemplet.
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
name: 'mystorageaccount'
location: 'eastus'
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
properties: {
accessTier: 'Hot'
supportsHttpsTrafficOnly: true
}
}
Avsnittet resurser definierar konfigurationen av lagringskontot. Det här avsnittet innehåller namn, plats och egenskaper för lagringskontot, inklusive dess SKU och typ av konto.
Du kanske märker att Bicep-mallen inte anger hur lagringskontot ska distribueras. Den anger bara hur lagringskontot behöver se ut. De faktiska steg som körs i bakgrunden för att skapa det här lagringskontot eller uppdatera det för att matcha specifikationen är kvar för Azure att bestämma.