Mikä on Infrastruktuuri koodina
Infrastruktuuri koodina (IaC) tarkoittaa pilvi-infrastruktuurin hallintaa ja provisiointia koodilla, manuaalisten prosessien sijaan. IaC mahdollistaa nopean, toistettavan ja virheettömän infrastruktuurin hallinnan pilvipalveluissa.
Pilvipalvelulta odotetaan, että se on aina käytettävissä, sen huoltokatkot ovat lyhyitä ja saatavuus on luokkaa 99,99%. Infrastruktuurin luotettavuus on pilvipalveluissa tärkeää ja luotettavuuden rakentamisessa Infrastruktuuri koodina -menetelmät sekä automaatio ovat tärkeässä osassa.
IaC ja DSL kielet
Parhaimmillaan IaC (Infrastructure as Code) hyödyntää deklaratiivista Domain Specific Language (DSL) -kieltä, joka on suunniteltu erityisesti infrastruktuurin hallinnan tarpeisiin. Deklaratiivinen DSL kieli mahdollistaa infrastruktuurin asetusten ilmaisemisen selkeästi ja tiiviisti, keskittyen haluttuun lopputulokseen ilman, että tarvitsee määrittää tarkkaa prosessia (eli “miten” jotakin tehdään) sen saavuttamiseksi. Tämä lähestymistapa auttaa kehittäjiä keskittymään infrastruktuurin lopputilaan, jolloin itse työkalu huolehtii tarvittavien toimien toteuttamisesta infrastruktuurin tuomiseksi tähän tilaan.
Lähestymistavan etuna on, että se yksinkertaistaa infrastruktuurin hallintaa, koska kehittäjien tai operaattoreiden ei tarvitse tietää tai määrittää jokaista yksittäistä toimenpidettä infrastruktuurin käyttöönotossa. Sen sijaan he määrittelevät “mitä” halutaan (haluttu tila), ja IaC-työkalu huolehtii “miten” se saavutetaan, automatisoiden tarvittavat toimenpiteet halutun infrastruktuurin tilan saavuttamiseksi.
Pilviresurssien hallinta on hankalaa ilman kunnollisia työkaluja
Pilviresurssien luominen ja hallinta muuttuu nopeasti monimutkaiseksi ilman oikeita työkaluja ja prosesseja. Infrastruktuuri koodina (IaC) tarjoaa ratkaisun tähän monimutkaisuuteen, mahdollistamalla pilviresurssien hallinnan systemaattisesti ja tehokkaasti.
Luotettavat ja turvalliset pilvitoteutukset vaativat skaalautuvan ja turvallisen pilvi-infrastruktuurin
Laadukkaiden pilvipalvelujen kehitys ja ylläpito vaatii IaC -työkalujen ja prosessien oikeanlaista käyttöä. Kun infrastruktuuri hallitaan koodina, voivat kehitystiimit hyödyntää samoja työkaluja ja käytäntöjä, joita he käyttävät sovelluskoodin kanssa, kuten versionhallintaa, koodiarvosteluja ja jatkuvaa integraatiota / jatkuvaa toimitusta (CI/CD). Tämä ei ainoastaan lisää tuottavuutta vaan myös parantaa tiimien välistä yhteistyötä ja tekee infrastruktuurimuutoksista ennustettavampia ja hallittavampia.
Pilvikehitysprojektin alkuvaiheessa käytetään usein oikopolkuja, jotta asiat saadaan nopeasti liikkeelle. Tässä kohtaa ensimmäiset pakolliset pilviresurssit halutaan nopeasti kehittäjien käyttöön. IaC ja Devops käytännöt ovat tällöin vielä rakennusvaiheessa ja sovelluskehittäjillä on jo tarve testata toiminnallisuuksia pilviympäristössä. Tässä vaiheessa pilviresursseja luodaan usein käsin Portaalin käyttöliittymässä. Jos kehitystiimissä ei ole riittävästi osaamista Devops ja IaC -työkalujen hyödyntämisestä, edetään nopeasti ja luodaan resursseja käsin. Tämä on hankala vaihe ja mahdollisuuksien mukaan tätä vaihetta kannattaa välttää tai ainakin lyhentää mahdollisimman paljon.
Miltä Infrastruktuuri koodina näyttää?
DSL kielet, kuten alla oleva ARM Bicep, on helppo ymmärtää ja lukea. Koodin avulla on myös helppo ymmärtää missä tilassa, jokin pilviresurssi on.
Alla oleva esimerkki luo yhden virtuaaliverkon ja sille kaksi subnet resurssia.
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2023-09-01' = {
name: 'name'
location: location
properties: {
addressSpace: {
addressPrefixes: [
'10.0.0.0/16'
]
}
subnets: [
{
name: 'Subnet-App'
properties: {
addressPrefix: '10.0.0.0/24'
}
}
{
name: 'Subnet-Database'
properties: {
addressPrefix: '10.0.1.0/24'
}
}
]
}
}
Miksi Infrastruktuuri koodina?
Infrastruktuuri koodina mahdollistaa toistettavan ja luotettavan tavan luoda, ylläpitää ja muuttaa järjestelmiä, jotka vaativat monimutkaisia pilviresursseja.
Infrastruktuuri koodina -menetelmä on tärkeä ja oikeastaan pakollinen osa pilvikehitystä, kun ympäristö on laaja ja ympäristö ei voi olla pitkiä aikoja rikki. Kun infrastruktuuri on kuvattuna koodina, koodi on versiohallinnassa ja kokonainen järjestelmä voidaan luoda alusta uudelleen tai korjata vikatilanteissa automaatiolla, on koko järjestelmä luotettavampi ja toimintavarmempi.
Automaatio ja nopeus: IaC mahdollistaa IT-infrastruktuurin automaattisen provisionoinnin ja konfiguroinnin, mikä vähentää manuaalista työtä ja mahdollistaa nopeammat päivitykset ja palautukset. Kehittäjät ja IT-tiimit voivat luoda ja tuhota ympäristöjä tarpeen mukaan, mikä nopeuttaa kehityssyklejä ja parantaa tuotantoon siirtymisen nopeutta.
Vakioitu ja toistettava ympäristö: IaC käyttää koodipohjaisia malleja infrastruktuurin luomiseen, mikä tarkoittaa, että jokainen ympäristö luodaan samojen spesifikaatioiden mukaan. Tämä vähentää “toimii minun koneellani” -ongelmia ja takaa, että kehitys-, testaus- ja tuotantoympäristöt ovat keskenään konsistentteja.
Virheiden vähentyminen: Manuaaliset prosessit ovat alttiita virheille, mutta IaC:n avulla infrastruktuuri rakennetaan automaattisesti määriteltyjen koodimallien mukaan, mikä vähentää inhimillisen virheen mahdollisuutta.
Skalautuvuus ja joustavuus: IaC tekee skaalaamisesta yksinkertaista. Voit helposti muokata infrastruktuurin kapasiteettia vastaamaan liiketoiminnan kysynnän muutoksia koodin muutamilla riveillä.
Kustannustehokkuus: Automaation ja nopeutetun toiminnan ansiosta yritykset voivat vähentää kalliita manuaalisia työvaiheita ja käyttää resursseja tehokkaammin.
Turvallisuus ja noudattaminen: IaC mahdollistaa turvallisuussääntöjen ja compliance-vaatimusten sisällyttämisen osaksi infrastruktuurin määritystä. Koodin avulla voidaan varmistaa, että kaikki turvallisuusprotokollat ovat ajan tasalla ja noudatettuja.
Versionhallinta: Kuten muukin ohjelmistokehitys, infrastruktuurin koodi voidaan tallentaa versionhallintajärjestelmiin. Tämä tarkoittaa, että muutokset ovat jäljitettävissä, ja tarvittaessa voidaan palata aiempaan infrastruktuurin versioon.
Läpinäkyvyys ja dokumentaatio: Kun infrastruktuuri määritellään koodina, se toimii samalla dokumentaationa siitä, miten ympäristö on rakennettu. Tämä parantaa ymmärrystä ja helpottaa ylläpitoa ja ongelmanratkaisua.
Mitkä ovat infrastruktuuri koodina keskeiset hyödyt
IaC -työkalujen ja prosessien tavoitteena on automatisoida tarvittavien pilviresurssien luominen, niin että resurssien luominen, päivitys ja hallinta tapahtuu aina samalla tavalla ja tuottaa aina halutun lopputuloksen.
Infrastruktuuri koodina (IaC) on edistynyt lähestymistapa pilvi-infrastruktuurin hallintaan, joka tuo lukuisia etuja verrattuna manuaalisiin prosesseihin.
Infrastruktuuri koodina tärkeimpiä etuja:
Automatisointi | Infrastruktuurin luonti ja hallinta voidaan automatisoida, mikä säästää aikaa ja vähentää inhimillisiä virheitä |
Toistettavuus | Ympäristöt luodaan johdonmukaisesti samalla tavalla joka kerta, mikä vähentää ympäristöjen välisiä eroja ja virheitä. Jokainen ajokerta tuottaa identtisen ympäristön. |
Versionhallinta | Infrastruktuuri on kuvattuna koodina, joka voidaan viedä versionhallintaan. |
Dokumentointi | Koodi itsessään toimii dokumentaationa, joka kuvaa infrastruktuurin nykytilan. Tämä parantaa ymmärrystä infrastruktuurista ja helpottaa uusien tiimien perehdyttämistä. |
Kehitysprosessit | Infrastruktuurin hallintaan koodina voidaan käyttää samoja prosesseja kuin muussakin sovelluskehityksessä: versionhallintaa, koodiarvostelut sekä jatkuvaa integraatiota/jatkuvaa toimitusta (CI/CD) |
Testaus | Infrastruktuurimuutokset voidaan myös testata. Voit luoda testiympäristön ja luoda yksikkötestejä ja integraatiotestejä ja hyväksyä ainoastaan testatut ja toimivat muutokset |
Koodin jakaminen | Voit jakaa infrastruktuurin jaetun koodin eri projektien ja kehitystiimien välillä. Samaa koodia ei tarvitse kehittää ja testata monessa eri kehitystiimissä |
Turvallisuus | Turvallisuusasetukset ja -käytännöt voidaan sisällyttää infrastruktuurikoodiin ja soveltaa johdonmukaisesti kaikissa ympäristöissä |
Inhimilliset riskit | Automaation ansiosta manuaalisen konfiguroinnin tarve vähenee, mikä pienentää inhimillisen virheen riskiä |
Infrastruktuuri koodina työkalut
Azure pilviympäristössä käytetyimmät IaC -työkalut ovat:
ARM Templates
ARM Templates on Azure-native työkalu, joka käyttää JSON-muotoisia malleja Azure-resurssien deklaratiiviseen määrittelyyn ja hallintaan. Se mahdollistaa infrastruktuurin luomisen ja konfiguroinnin idempotenttien mallien avulla, mikä tarkoittaa, että samaa mallia voi soveltaa useita kertoja tuottamaan saman lopputuloksen.
ARM Templatet ovat haasteellisia lukea ja ymmärtää. Ne ei niin sanotusti ole tarkoitettu ihmisten luotteviksi tai muokattaviksi.
Bicep
Bicep on Microsoftin kehittämä deklaratiivinen kieli, joka on suunniteltu ARM Templatejen abstrahointiin ja yksinkertaistamiseen. Se tarjoaa selkeämmän syntaksin ja paremman kehittäjäkokemuksen. Bicep-koodi käännetään ARM Template -muotoon, ja se tarjoaa tiiviimmän ja ymmärrettävämmän tavan hallita Azure-resursseja.
Bicep on nykyisin monessa projektissa paras tapa toteuttaa infrastruktuuri, varsinkin silloin kun projekti toteutetaan ainoastaan Azure ympäristössä
Terraform
Terraform on avoimen lähdekoodin työkalu, jonka HashiCorp on kehittänyt. Se tukee useita pilvipalveluntarjoajia, mukaan lukien Azure. Terraform käyttää omaa deklaratiivista konfiguraatiokieltään määrittelemään infrastruktuuria monipilviympäristöissä. Sen tilanhallintaominaisuudet mahdollistavat infrastruktuurin versionhallinnan ja muutosten seurannan tehokkaasti.
Terraform on hyvä valinta, kun projektissa toteutetaan monipilviympäristöä ja silloin kun kehitystiimissä on jo vahvaa osaamista Terraform työkalun käytöstä
Pulumi
Pulumi on moderni infrastruktuurin hallintatyökalu, joka mahdollistaa olemassa olevien ohjelmointikielten, kuten TypeScript, Python, Go ja .NET, käytön infrastruktuurin koodina. Pulumi tukee Azurea ja tarjoaa kehittäjille mahdollisuuden käyttää tuttuja työkaluja ja kieliä pilvi-infrastruktuurin määrittelyyn ja hallintaan.
Ansible
Vaikka Ansible tunnetaan enemmän konfiguraationhallintatyökaluna, sitä käytetään myös IaC-työkaluna pilvi-infrastruktuurin hallintaan. Ansiblella on moduuleita Azure-resurssien hallintaan, ja se mahdollistaa infrastruktuurin automaattisen provisionoinnin ja konfiguroinnin deklaratiivisten playbookien avulla.
Oikean IaC työkalun valinta
IaC työkalun valinta voi olla vaikeaa. Azure ympäristössä luotettavin ja helpoin valinta on Bicep. Monipilviympäristössä voi olla hyötyä, jos käyttää yhtä työkalua ja tällöin esimerkiksi Terraform voi olla järkevä valinta. IaC työkalun valinnassa kannattaa myös pitää mielessä, että kokenut IaC kehittäjä pystyy nopeasti opiskelemaan Bicep:in tai Terraformin, jos kehittäjällä on toisesta kielestä vankkaa kokemusta.
Infrastruktuuri koodina blogisarjan osat
- Mikä on Infrastruktuuri koodina? – osa 1
- Infrastruktuuri koodina, osa 2 – Azure ja ARM Bicep
- Infrastruktuuri koodina, osa 3 – AVM – Azure Verified Modules
Kiinnostaako pilvi-infrastruktuurin automatisointi
Me toteutamme IaC ja Devops automaatiot
Do you need help with Infrastructure as Code development
We build IaC and Devops automation solutions