Jämföra Terraform och Bicep
För att uppnå skalning letar DevOps-team alltid efter sätt att snabbt distribuera kod med en betrodd och repeterbar process. När det gäller molnet och infrastrukturen utförs den här processen i allt högre grad med IaC (infrastructure-as-code). IaC-verktyg sträcker sig från allmänna verktyg till verktyg avsedda för specifika miljöer. Terraform är ett exempel på det förra, medan Bicep är utformat för att hantera Azure-relaterade uppgifter.
I den här artikeln jämför vi nio infrastruktur- och integreringsfunktioner i Bicep och Terraform. Att förstå dessa skillnader hjälper dig att avgöra vilket verktyg som bäst stöder din infrastruktur och dina processer.
Tillstånd och serverdel
Både Terraform och Bicep är önskad tillståndskonfiguration (DSC) vilket gör det enkelt att hantera IT- och utvecklingsinfrastruktur som kod. Terraform lagrar tillstånd om din hanterade infrastruktur och konfiguration. Terraform använder den här informationen för att mappa verkliga resurser till din konfiguration, spåra metadata och förbättra prestanda för större infrastrukturer. Tillståndet lagras i en lokal fil med namnet terraform.tfstate
, men kan också lagras via fjärranslutning. Det är viktigt att säkerhetskopiera och skydda dina tillståndsfiler. Liksom Terraform är Bicep deklarativ och målsökande. Bicep lagrar dock inte tillstånd. I stället förlitar sig Bicep på inkrementell distribution.
Infrastrukturmål
När du jämför Bicep med Terraform för att hantera molninfrastruktur är det viktigt att tänka på din målmolnmiljö:
- Endast Azure
- Flera moln eller hybridmoln
Bicep är Azure-specifik och har inte utformats för att fungera med andra molntjänster.
Om målet är att automatisera distributioner till någon av följande miljöer är Terraform sannolikt det bättre alternativet:
- Virtualiseringsmiljöer
- Scenarier med flera moln – till exempel Azure och andra moln
- Lokala arbetsbelastningar
Terraform interagerar med andra molnleverantörer eller API:er med hjälp av plugin-program som kallas providers. Det finns flera Terraform Azure-leverantörer som möjliggör hantering av Azure-infrastruktur. När du kodar en Terraform-konfiguration anger du vilka leverantörer som krävs som du använder. När du kör terraform init installeras den angivna providern och kan användas från din kod.
CLI-verktyg
Cli-verktyg (Command Line Interface) spelar en nyckelroll i orkestreringen genom implementering och hantering av automatiseringsteknik. Både Bicep och Terraform erbjuder CLI-verktyg.
Bicep integreras med Azure CLI, vilket gör att utvecklare kan använda az
kommandon som:
az bicep
: Med az bicep-kommandon kan du utföra sådana uppgifter som att installera Bicep och skapa och publicera Bicep-filer.az deployment
: I artikeln Så här distribuerar du resurser med Bicep och Azure CLI förklarar hur du använder Azure CLI med Bicep-filer för att distribuera dina resurser till Azure.
Med Terraform CLI kan du utföra uppgifter som att verifiera och formatera Terraform-koden och skapa och tillämpa en körningsplan.
- Artikeln Snabbstart: Skapa en Azure-resursgrupp med Terraform visar hur du använder flera av Terraform-kommandona för att skapa en Azure-resursgrupp.
Bicep innehåller också en funktion som gör det enkelt att integrera Bicep med Azure Pipelines. Det finns en liknande funktion för Terraform, men du måste ladda ned och installera Azure Pipelines Terraform Tasks-tillägget för Visual Studio. När du har installerat kan du köra Terraform CLI-kommandon från Azure Pipelines. Dessutom stöder både Terraform och Bicep GitHub Actions för att automatisera programvaruversioner, tester och distributioner.
Bearbetning
Det finns några viktiga skillnader mellan Bicep och Terraform när det gäller effektiviteten och optimeringarna av distributioner. Med Bicep sker bearbetningen på azure-infrastrukturens kärntjänstsida. Den här funktionen erbjuder fördelar som förbehandling för att kontrollera principen eller tillgängligheten för att distribuera flera instanser i en region. Med Terraform utförs bearbetningen i Terraform-klienten. Därför omfattar förbearbetning inga anrop till Azure eftersom den använder tillstånd och HCL (HashiCorp Language) för att fastställa de nödvändiga ändringarna.
Autentisering
Azure-autentiseringsfunktionerna varierar mellan Bicep och Terraform. Med Bicep tillhandahålls en auktoriseringstoken under begäran om att skicka en Bicep-fil och ARM-mall. ARM ser till att du har behörighet att både skapa distributionen och distribuera resurser i den angivna mallen. Terraform autentiserar varje API baserat på providerautentiseringsuppgifter – till exempel Azure CLI, tjänstens huvudnamn eller hanterade identiteter för Azure-resurser. Dessutom kan flera autentiseringsuppgifter för providern användas i en enda konfiguration.
Azure-integreringar
Du bör också överväga att använda Azure-funktioner som Azure Policy och hur var och en interagerar med andra verktyg och språk. Biceps preflight-validering avgör om en resurs inte följer en princip så att den misslyckas före en distribution. Utvecklare kan därför åtgärda resurser med principer med hjälp av tillhandahållna ARM-mallar. ARM-mallen kan användas för att skapa en principtilldelning till en annan resurs för automatisk reparation. Terraform misslyckas dock när en resurs distribueras som inte tillåts på grund av principen.
Portalintegrering
En stor fördel som Bicep har jämfört med Terraform är möjligheten att automatisera portalåtgärder. Med Bicep kan du använda Azure-portalen för att exportera mallar. När du exporterar en mall kan du förstå syntaxen och egenskaperna som distribuerar dina resurser. Du kan automatisera framtida distributioner genom att börja med den exporterade mallen och ändra den efter dina behov. Tills Terraform-mallar stöds måste du översätta den exporterade mallen manuellt.
Även om Terraform inte tillhandahåller samma portalintegreringar som Bicep, kan befintlig Azure-infrastruktur tas under Terraform-hantering med hjälp av Azure Export for Terraform. (Azure Export for Terraform är ett verktyg med öppen källkod som ägs och underhålls av Microsoft på Azure/aztfexport GitHub-lagringsplats.)
Out-of-band-ändringar
Ändringar i out-of-band-konfigurationen är ändringar som görs i en enhetskonfiguration utanför verktygets kontext. Anta till exempel att du distribuerar en VM-skalningsuppsättning med Bicep eller Terraform. Om du ändrar vm-skalningsuppsättningen med hjälp av portalen blir ändringen "out-of-band" och okänd för ditt IaC-verktyg.
Om du använder Bicep bör out-of-band-ändringar stämmas av med Bicep och ARM-mallkoden för att undvika att ändringarna skrivs över vid nästa distribution. Dessa ändringar blockerar inte distributionen.
Om du använder Terraform måste du importera out-of-band-ändringarna till Terraform-tillståndet och uppdatera HCL:n.
Om en miljö innebär frekventa out-of-band-ändringar är Bicep därför mer användarvänligt. När du använder Terraform bör du minimera out-of-band-ändringar.
Molnramverk
Cloud Adoption Framework (CAF) är en samling dokumentation, metodtips och verktyg för att påskynda molnimplementeringen under hela molnresan. Azure tillhandahåller interna tjänster för distribution av landningszoner. Bicep förenklar den här processen med en portalupplevelse baserad på ARM-mallar och implementering av landningszoner. Terraform använder modulen Landningszoner i företagsskala för att distribuera, hantera och operationalisera med Azure.
Sammanfattning
Bicep och Terraform erbjuder många användarvänliga infrastruktur- och integreringsfunktioner. De här funktionerna gör det enklare att implementera och hantera automatiseringsteknik. När du bestämmer vad som är bäst för din miljö är det viktigt att tänka på om du distribuerar till mer än ett moln eller om infrastrukturen består av en miljö med flera eller hybridmoln. Se dessutom till att överväga de nio funktioner som beskrivs i den här artikeln för att göra det bästa valet för din organisation.