Infrastructure as Code
Hoe Infrastructure as Code (IaC) complexe infrastructuren beheert
Ian Buchanan
Principal Solutions Engineer
Het is belangrijk om Infrastructure-as-Code (IaC) te begrijpen, een IT-beheerproces dat best practices van DevOps-softwareontwikkeling toepast op het beheer van bronnen voor cloudinfrastructuur.
De opkomst van hardwarevirtualisatie in het midden van de jaren 2000 leidde tot nieuwe mogelijkheden voor hosting van cloudinfrastructuren. Providers van cloudhosting begonnen toegang te bieden tot platforms voor dynamische Infrastructure-as-a-Service (IaaS). Naarmate deze platforms groeiden en complexere infrastructuurvoorzieningen begonnen aan te bieden, nam ook de complexiteit van een traditionele rol als systeembeheer toe. De noodzaak om snel complexe cloudinfrastructuren te configureren en te beheren werd al snel een uitdaging.
Het idee van infrastructuur-as-code (IaC), of het modelleren van infrastructuur met code, werd gestimuleerd door het succes van CI/CD. DevOps heeft bewezen hoe productief het was om code toe te voegen aan een Git-repository en vervolgens feature branches toe te passen en workflows voor pull-aanvragen toe te passen Door de automatisering die deze workflows in de softwareontwikkeling hebben gebracht, werd de nieuwe complexiteit van het beheer van cloudsystemen verminderd.
Compass gratis uitproberen
Verbeter je ontwikkelaarservaring, catalogiseer alle services en verbeter de gezondheid van je software.
Wat is infrastructure-as-code?
Het is belangrijk om Infrastructure-as-Code (IaC) te begrijpen, een IT-beheerproces dat best practices van DevOps-softwareontwikkeling toepast op het beheer van middelen voor cloudinfrastructuur. De toepasselijke infrastructuurbronnen zijn virtuele machines, netwerken, load balancers, databases en andere netwerktoepassingen.
IaC is een vorm van configuratiebeheer waarbij de infrastructuurbronnen van een organisatie worden gecodificeerd in tekstbestanden. Deze infrastructuurbestanden worden vervolgens opgeslagen in een versiebeheersysteem zoals Git. De repository voor versiebeheer maakt workflows voor feature branch- en pull-aanvragen mogelijk, wat fundamentele afhankelijkheden zijn van CI/CD.
Infrastructure-as-code wordt mogelijk gemaakt door de opkomst van hostingplatforms voor cloudinfrastructuur, met name IaaS-platforms. IaaS maakt het op aanvraag beschikbaar stellen en aanvragen van cloudbronnen mogelijk via API's op afstand, waarmee het sjabloon wordt ingesteld voor eigenschappen die zijn gekoppeld aan de configuratiebestanden van de infrastructuur. De automatiseringsfuncties van IaC kunnen de configuratiebestanden overzetten en uitvoeren op de externe IaaS-API's.
Zodra een team de infrastructuur heeft geconfigureerd voor versiebeheer, kunnen ze CI/CD-praktijken toepassen op wijzigingen in de infrastructuur. Updates van de infrastructuur kunnen een DevOps-workflow volgen. Als een teamlid een van de configuratietekstbestanden heeft bewerkt, kunnen pull-aanvragen en codebeoordelingsworkflows worden gebruikt om de juistheid van de bewerkingen te controleren en verifiëren. Bovendien zal een infrastructuur-as-code-systeem met DevOps-ondersteuning gebruikmaken van automatische implementatie en terugdraaiing van de infrastructuur.
gerelateerd materiaal
Infrastructure-as-a-service
Oplossing bekijken
Verbeter je DevEx met Compass
Waarom is infrastructure-as-code belangrijk?
IaC heeft zich ontwikkeld om te helpen het probleem van 'omgevingsdrift' op te lossen. Cloudtoepassingen hebben doorgaans verschillende implementatieomgevingen voor de fasen van de levenscyclus van hun release. Het is gebruikelijk om omgevingen voor ontwikkeling, stagen en productie te hebben. Deze omgevingen bestaan uit netwerkbronnen zoals applicatieservers, load balancers en databases. Omgevingsafwijking treedt op wanneer de infrastructuur tussen deze verschillende omgevingen niet synchroon loopt.
Zonder IaC kan infrastructuurbeheer een ongeorganiseerd en kwetsbaar proces zijn. Systeembeheerders maken handmatig verbinding met externe cloudproviders en gebruiken API of webdashboards om nieuwe hardware en bronnen beschikbaar te stellen. Deze handmatige workflow geeft geen holistisch beeld van de toepassingsinfrastructuur. Beheerders kunnen handmatig wijzigingen aanbrengen in de ene omgeving en vergeten om ermee door te gaan in de andere omgeving. Zo ontstaat omgevingsdrift.
Omgevingsdrift wordt een dure zakelijke verspilling. Bugs en storingen doen zich voor omdat teams voortbouwen op basis van een staging- of ontwikkelomgeving en bij de implementatie ontdekken dat de productieomgeving niet synchroon loopt, wat leidt tot een tijdrovend onderzoek naar waarom en wat ontbreekt.
Zonder IaC is handmatig beheer van de infrastructuur een langzaam proces. Als een vereiste infrastructuurwijziging wordt vastgesteld als gevolg van een verandering in de omgeving, pieken in het verkeer of een ander probleem, kan het een onbekende hoeveelheid tijd duren voordat een systeembeheerder reageert en zich aanpast. Dit leidt tot storingen en frustratie bij klanten. Als IaC is geïnstalleerd, kan de infrastructuur zich automatisch aanpassen aan veranderingen in de configuratie en reageren op pieken in het verkeer met functies voor automatische schaling.
Infrastructure-as-code zorgt voor meer overzicht en zichtbaarheid in het handmatige systeembeheer. Nu de configuratiebestanden van de infrastructuur zijn ondergebracht in een centrale repository voor versiebeheer, kunnen alle teamleden infrastructuurgegevens bekijken en bewerken. Dit maakt krachtige auditmogelijkheden mogelijk. Als je team bijvoorbeeld een PCI-nalevingsaudit ondergaat, moet je weten of een specifiek deel van je infrastructuur gebruikmaakt van SSL-encryptie. Met IaC kun je snel zien hoe SSL is geconfigureerd en de code uitvoeren om ervoor te zorgen dat de live-infrastructuur overeenkomt met de configuratiebestanden, die aangeeft of SSL is ingeschakeld. De commitgeschiedenis van versiebeheer fungeert ook als een logboek om te bekijken wanneer deze is toegevoegd of verwijderd.
Hoe werkt Infrastructure-as-Code?
Er zijn een aantal afhankelijkheden die geïmplementeerd moeten worden om de infrastructure-as-code volledig te realiseren.
Op afstand toegankelijke hosting of IaaS-cloudhostingplatform
De eerste en belangrijkste afhankelijkheid is hosting die op afstand toegankelijk is. De tool voor configuratiebeheer moet verbinding maken met de externe host en deze aanpassen. Als de externe infrastructuur zelfbeheerd is, moet je team ervoor zorgen dat de tool voor configuratiebeheer toegang heeft. Het cloudhostingplatform met IaaS-ondersteuning biedt API's waarmee gebruikers op verzoek automatisch infrastructuurbronnen kunnen aanmaken, verwijderen en wijzigen. Deze API's zijn ook toegankelijk via hulpmiddelen voor configuratiebeheer om deze taken verder te automatiseren. Enkele voorbeelden van populaire IaaS-platforms zijn Digital Ocean, Amazon AWS en Microsoft Azure.
Platform voor configuratiebeheer
De volgende vereiste om IaC te voltooien is een toolsuite die verbinding maakt met de IaaS-API's en algemene taken automatiseert. Een team kan een set scripts en tools maken. Het zou echter veel werk zijn, met veel toekomstig onderhoud en waarschijnlijk een laag rendement. Er zijn al veel open source-platforms voor configuratiebeheer die dit probleem oplossen, waaronder Terraform, Ansible, Salt Stack en Chef.
Versiecontrolesysteem
Een platform voor configuratiebeheer maakt gebruik van door mensen en machines leesbare tekstbestanden die zijn geschreven in een opmaaktaal zoals YAML om taken en sequenties aan te geven die het platform kan uitvoeren. Deze tekstbestanden kunnen behandeld worden als toepassingscodebestanden en worden opgeslagen in een repository voor versiebeheersystemen. De repository fungeert als een centrale bron van informatie en maakt pull-aanvragen en codebeoordeling mogelijk. Het populairste versiebeheersysteem is Git.
Laten we, nu deze afhankelijkheden er zijn, eens kijken naar een voorbeeldscenario waarin een ontwikkelaar een nieuwe applicatieservice aan een systeem wil toevoegen. Dit scenario helpt om een IaC-workflow aan te tonen.
- De ontwikkelaar bewerkt een YAML-configuratietekstbestand op zijn voorkeursplatform voor configuratiebeheer, Terraform. De aanpassingen geven aan dat er een nieuwe hostingserver nodig is.
- De ontwikkelaar voert bewerkingen uit in een feature branch in de Git-repository. Omdat de Git-repository van het project wordt gehost op Bitbucket, opent de ontwikkelaar een pull request. Een ander teamlid beoordeelt de pull request en wordt op de hoogte gebracht van de nieuwe veranderingen in de infrastructuur. Het teamlid keurt de pull request goed en de ontwikkelaar voegt vervolgens de commit samen met de hoofdbranch van de repository.
- Op dit moment is het configuratieplatform nodig om een update uit te voeren. De update kan handmatig worden geactiveerd door de ontwikkelaar. Omdat het team Bitbucket gebruikt, hebben ze ook toegang tot Bitbucket Pipelines en kunnen ze deze stap automatiseren met een pipeline.
- Na uitvoering communiceert Terraform met de IaaS van het team. Terraform voert een reeks opdrachten uit op de IaaS API om de IaaS te actualiseren met de verwachte infrastructuurconfiguratie.
Conclusie...
IaC is een zeer productieve vorm van configuratiebeheer die zich richt op het automatiseren van het beheer van de IT-infrastructuur in de cloud. Zodra IaC geïnstalleerd is, kan het worden gebruikt om CI/CD-automatiseringsniveaus te bereiken voor wijzigingen in de infrastructuur van een project. IaC biedt veel nuttige inzichten in communicatie en transparantie rond veranderingen in de infrastructuur. IaC vereist een aantal afhankelijkheden, zoals hostingplatforms en automatiseringshulpmiddelen, die op grote schaal beschikbaar zijn bij moderne hostingbedrijven.
Deel dit artikel
Volgend onderwerp
Aanbevolen artikelen
Bookmark deze resources voor meer informatie over soorten DevOps-teams of voor voortdurende updates over DevOps bij Atlassian.