Blog

Mikä on Infrastruktuuri koodina? – osa 1


Hallitse pilvi-infrastruktuuri koodilla ja automaatiolla

Devops Automaatio

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.

Modernin pilvipalvelun toteutus vaatii IaC -menetelmien ja Devops automaation laajaa käyttöä.

IaC -menetelmillä Infrastruktuuri voidaan luoda uudellen tai sen tila voidaan korjata nopeasti ja luotettavasti aina samaan haluttuun tilaan

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.

    Devops Automaatio

    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:

    Infrastruktuuri koodina edut


    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

    Azure Consulting Services

    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