• Nenhum resultado encontrado

Infrastruktuuri koodina: Pulumi-alustan arviointi

N/A
N/A
Protected

Academic year: 2023

Share "Infrastruktuuri koodina: Pulumi-alustan arviointi"

Copied!
78
0
0

Texto

Platform criteria include the following: technology maturity, the number of cloud platforms supported, development community activity, and platform performance. Platform adoption criteria included: continuous integration support, development environments supported by the platform, configurability, extensibility, adoption, testability, debugging support, and maintainability of the platform. CD Jatkuva toimitus (English Continuous Delivery) CI Jatkuva integraatio (English Continuous Integration) CLI Komentoriviliitäntä (English Command Line Interface). gRPC gRPC Remote Procedure Invokes HTTP Hypertext Transfer Protocol.

NIST National Institute of Standards and Technology PaaS-alusta palveluna SaaS-sovellus palveluna

Johdanto

Tavoitteet ja rajaus

Rakenne

Pilvialustat

Yleisesti

IaaS eli infrastruktuuri palveluna on palvelumalli, jossa alustan tarjoaja vastaa alustan infrastruktuurista laitteisto- ja virtualisointitasoilla. Esimerkkejä IaaS-palveluista ovat pilvialustojen, kuten Amazon EC2 tai Microsoft Azure VM, tarjoamat virtuaalikoneen palvelut. Esimerkkejä SaaS-palveluista ovat Microsoft Office365 -palvelu ja luvussa 5 esitelty Pulumi SaaS -palvelu.

Microsoft Azure Kubernetes -palvelu on esimerkki yhdistetystä palvelusta, joka näyttää käyttäjän näkökulmasta PaaS-palvelulta, koska käyttäjän ei tarvitse hallita palvelun käyttämää virtuaalikoneen infrastruktuuria .

Kubernetes ja Helm

Infrastruktuuri koodina

  • Esittely
  • Infrastruktuuri koodina ja DevOps-kulttuuri
  • Työkalut
  • Hyödyt ja haasteet

Tammikuussa 2015 Microsoft tilasi markkinointitutkimusyrityksen tutkimaan, ovatko infrastruktuuri-as-code -lähestymistapa ja siihen liittyvät työkalut hyödyllisiä ohjelmistokehityksessä ja -julkaisussa. Infrastruktuuri koodina -lähestymistapa mahdollistaa nopeamman ja luotettavamman sovellusten ja infrastruktuurin konfiguroinnin [26, 41] verrattuna manuaalisiin prosesseihin. Nykyisten infrastruktuurityökalujen historia koodina ulottuu vuoteen 1993, jolloin Oslon yliopistossa tutkijana työskennellyt Mark Burgess kehitti Configuration Enginen (CFEngine) [14].

Yleisesti ottaen infrastruktuurin hallintaan käytetyt työkalut voidaan jakaa pinonhallintatyökaluihin (eng. stack management) ja konfiguraation hallintatyökaluihin (eng. konfiguraatiohallinta) [41].

C#-ohjelmointikieli

  • Esittely
  • Tyypitys
  • Olio-ohjelmointi
  • Tyyppimuunnokset

Kun käytetään paikkatietueen määritelmää, perustietoluokan rakentajaa kutsutaan käyttämällä sen nimeä perusavainsanan sijaan. Oletusarvoisesti luokat käyttävät viitepohjaista yhtäläisyyttä, ja vain samaan objektiin viittaavia muuttujia pidetään samanarvoisina. C#-ohjelmat käännetään intermediate language (IL) -kieleksi, joka suoritetaan .NET-ajonaikaisessa virtuaaliympäristössä, jota kutsutaan myös Common Language Runtimeksi tai CLR:ksi [80].

CLR käyttää just-in-time-käännöstä (JIT), jossa välikieli käännetään alustakohtaiseksi konekieleksi [80].

Pulumi

  • Käsitteet
  • Komentoriviliitäntä
  • Tila ja tilanhallinta
  • Projektit
  • Ohjelmat
  • Resurssit
  • Syötteet ja tulosteet
  • Pinot
  • Lisenssi
  • Automatisointirajapinta
  • Testaus
  • SaaS-palvelu
  • Vertailu kilpailijoihin
    • Terraform
    • Muut

Ohjelman suorituksen aikana kieliisäntä rakentaa kuvauksen halutusta infrastruktuurin tilasta [53], joka välitetään käyttöönottomekanismille. Komentorivikäyttöliittymä [54] on Go-ohjelmointikielellä kehitetty cross-platform-ohjelma, joka toimii komentorivin, kuten Microsoft PowerShellin [5] tai GNU Bashin [12] kautta. Itsehallinnollisen tilan lisäksi Pulumia kehittävä Pulumi Corporation tarjoaa SaaS-palvelun [62], jossa tila on tallennettu Pulumin hallinnoimaan palveluun (englanniksi hosting).

Tiedosto sisältää sen komentoriviliittymän tarvitsemat metatiedot, jossa Pulumi-ohjelma toimii. CustomResourcesandComponentResource [65] CustomResource-luokan objektit ovat resurssientarjoajien [65] hallinnoimia resursseja, kuten resurssiryhmää ja tallennustiliä, joita käytetään liitteen A kohdassa A.2. Resurssin loogista nimeä käytetään etuliitteenä resurssin nimeen, jos fyysistä nimeä ei ole määritelty erikseen [65].

Hierarkiat voidaan luoda myös resursseista asettamalla toinen resurssi (eng. emoresurssi) pääresurssiksi [65]. Tämä on esimerkiksi liitteen A ohjelmassa A.2 (rivi 23) esitetyn resurssiryhmän nimi, jonka lopullinen arvo opitaan vasta ohjelman suorituksen aikana. Liitteen A ohjelmassa A.1 syötetyyppejä käytetään web-sivukomponentin resurssiparametrien ja verkkosivun sisällön resurssiryhmän nimen kanssa (rivit 6 ja 7).

Pulumin automaatiorajapinta (Pulumi Automation API) on ohjelmistokehityspaketti, joka mahdollistaa komentoriviliittymän käytön Pulumin tukemien ohjelmointikielten kautta [75]. Ennen infrastruktuurin tilan päivittämistä Terraform luo suoritussuunnitelman, jossa kuvataan päivityksen aikana suoritettavat toiminnot [19].

Kuva 5.1. Pulumin käsitteet [8]
Kuva 5.1. Pulumin käsitteet [8]

Tutkimus

Arviointikriteerit

  • Alustakriteerit
  • Alustan käyttöönoton kriteerit

Kehitysyhteisökriteeriaktiviteetilla arvioidaan kehitysyhteisön kokoa ja sitä, mitä alustalle tapahtuisi, jos sitä kehittävä yritys Pulumi Oyj lopettaisi toimintansa. Esimerkiksi yhteisön aktiivisuutta mitataan Stack Overflow -palveluun kirjoitettujen kysymysten määrällä ja GitHub-palvelun tähtien määrällä [38]. Esimerkiksi integroidut kehitysympäristöt tarjoavat käyttäjilleen sellaisia ​​ominaisuuksia kuin automaattinen tekstinsyöttö, dokumentaation integrointi koodieditoriin ja navigointi koodin eri osien välillä.

Laajennus arvioi alustan laajuuden, esim. kuinka hyvin alustaa voidaan muokata tai kuinka hyvin sen laajennuksia tai ohjelmistokehityspaketteja voidaan luoda alustalle. Tätä kriteeriä käytetään alustan arvioimiseen sen perusteella, miten sitä voidaan testata infrastruktuuri-koodina -lähestymistavan mukaisesti [41]. Virheiden etsintä tehdään sopivilla työkaluilla, jotka ovat usein osa integroitua kehitysympäristöä [87] ja jotka muun muassa mahdollistavat ohjelman toiminnan valvonnan, ohjelman suorittamisen pysäyttämisen esimerkiksi tietyllä rivillä. lähdekoodin ja muuttujien tilan tutkiminen lähdekoodissa.

Esimerkkisovellus

  • Sovellusarkkitehtuuri
  • Infrastruktuuripinoarkkitehtuuri
  • Alustan käyttöönotto: vaihe 1
  • Alustan käyttöönotto: vaihe 2
  • Alustan käyttöönotto: vaihe 3
  • Infrastruktuurin testaus

Esimerkkisovelluksessa käytetään kahta BFF API Gateway -rajapintaa, joista toinen palvelee mobiilisovellusta ja vastaavasti toinen sekä Angular- että WebMVC-sovelluksia. Ensimmäisessä vaiheessa alustaa käytettiin sovelluksen käyttämän Azure Kubernetes -klusterin ja siihen asennettavan kuormituksen tasaajan määrittämiseen. Tutkimuksessa käytetty infrastruktuuripinoarkkitehtuuri on toteutettu alustalle siten, että jokaiselle tutkimuksessa käytetylle pilvialustaan ​​luotiin oma infrahakemiston alle oma hakemisto ja Pulumi-projektit ovat kaikille sen luoduissa alihakemistoissa oleville infrastruktuuripinoille.

Koska Pulumi-projekti on hakemisto, josta Pulumi.yaml-tiedosto löytyy, infrastruktuuripinohakemistot nimettiin sisältämään käytetyn pilvialustan ja infrastruktuuripinon nimen. - projektien nimet on suunniteltu siten, että Pulumi-projektin nimessä tulee olla sen hakemiston nimi, jossa projektitiedosto Pulumi.yaml sijaitsee ja työlle valittu etuliite eshop, joka tulee sovellusesimerkin nimestä. Huolimatta siitä, että ne ovat pilvialustan riippumattomia, samaa hakemistorakennetta käytettiin myös näissä infrastruktuuriryhmissä. eshop.Azure.CommonServices.dev) Pulumi-. ohjelma - SQL - Redis - RabbitMQ - MongoDB. eshop.Azure.Applications.dev) Pulumi-. ohjelma - Katalogi - Tilaus - Identiteetti - Ostoskori.

Kaikki palvelinsovellusinfrastruktuuripinot käyttävät ensimmäisessä vaiheessa luodun kuormituksen tasaajan lähtöjä ensimmäisessä vaiheessa luodun Kubernetes-klusterin määrittämiseen. API Gateway -pino tulostaa saman sovellukselle määritetyn nimen, mutta lisäksi pino palauttaa myös julkisen sovelluksen osoitteen, joka on luotu kuormituksen tasapainottajalta lähtönä saadun toimialueen nimen perusteella ja joka voidaan avata selaimella. Ohjelmassa D.1 on kaksi yksikkötestiä, joista ensimmäinen varmistaa, että Azure-resurssiryhmä luodaan, kun pino luodaan, ja toinen yksikkötesti varmistaa, että Tunnisteet-ominaisuuden arvo on asetettu resurssiryhmälle.

Ohjelmassa D.2 esitetään kuormituksen tasaajan yksikkötesti, jolla testataan, että pinoluokka palauttaa testissä simuloidun Kubernetes-palvelun IP-osoitteen. Testin lopussa resurssit poistetaan käänteisessä järjestyksessä, eli viimeinen asennettu API Gateway -pino poistetaan ensin ja Kubernetes-klusteri poistetaan viimeisenä.

Kuva 6.1. Esimerkkisovelluksen sovellusarkkitehtuuri [1]
Kuva 6.1. Esimerkkisovelluksen sovellusarkkitehtuuri [1]

Tulokset

  • Teknologian kypsyys
  • Kehitysyhteisön aktiivisuus
  • Tuetut pilvialustat ja muut palvelut
  • Suorituskyky
  • Kustannukset ja yritysprofiili
  • Automatisointi
  • Kehitysympäristö
  • Konfigurointi
  • Laajennettavuus
  • Alustan omaksuminen
  • Testattavuus
  • Vian etsintä
  • Ylläpidettävyys

Kaaviosta näkyy, että Pulumista on selvästi vähiten kysymyksiä Stack Overflowssa, mutta maltillista kasvua on havaittavissa vuoden 2020 lopun jälkeen. On mahdollista, että ainakin osa kysymyksistä on kysytty suoraan yhteisön Slack-kanavissa Stack Overflown sijaan. Tätä työtä kirjoitettaessa Pulumi tukee dokumentaation perusteella yhteensä 53 erilaista pilvialustaa ja muuta palvelua C#-ohjelmointikielellä [7].

Työkalun/paketin versio Pulumi-komentoriviliittymä v2.24.1 Pulumi.AzureNative-kirjasto v0.8.0 Terraform-komentoriviliittymä v0.14.10 Terraform-toimittaja azurerm v2.55.0 Terraform-toimittaja satunnainen v3.1.0. Pulumi, SaaS-palvelu Pulumi, SaaS-palvelu, Ready Program Binary Pulumi, Local Mode Pulumi, Local Mode, Ready Program Binary Terraform, Local Mode Terraform, Local Mode, Ready Plan. Kun tämä työ tehtiin, Pulumin C#-kielikirjastot eivät vielä tukeneet kaikkia ominaisuuksia, joita esimerkiksi Pulumin TypeScript-versio tukee.

Esimerkiksi kaikki resurssiparametrit määritetään objektin alustuksessa, joka ei voi erottaa pakollisia ja valinnaisia ​​parametreja käännöshetkellä. Listaus 7.2 näyttää otteen Pulumin komentoriviliittymän tulostamasta virhesanomasta, kun Azure.Storage.Account-resurssi on kirjoitettu tarkoituksella väärin AccountReplicationType- ja AccountTier-parametrin arvot. Ajonaikaisen virheentunnistuksen käyttäminen Pulumissa vaatii mukautetun toteutuksen tätä osaa kirjoitettaessa.

Nimittäin jos virheenkorjausta käytetään samaan aikaan resurssien luomisen kanssa, on mahdollista aiheuttaa resurssien luontivirheitä. Liitteen C ohjelma C.1 näyttää staattisen C#-luokan, joka on luotu tukemaan virheenkorjausta ja jonka ainoa julkinen menetelmä voidaan kutsua käynnistämään virheenkorjaus, jos jokin luokan käyttämistä ympäristömuuttujista on määritelty.

Kuva 7.1. Infrastruktuuri koodina -työkaluihin liittyvien Stack Overflow’n kysymysten mää- mää-rän kasvu kvartaaleittain vuosina 2018-2021
Kuva 7.1. Infrastruktuuri koodina -työkaluihin liittyvien Stack Overflow’n kysymysten mää- mää-rän kasvu kvartaaleittain vuosina 2018-2021

Yhteenveto

  • Pulumin käsitteet [8]
  • Komponenttien keskinäiset suhteet
  • Pulumi-ohjelman luomat resurssit
  • Pinon tuottamat tulosteet
  • Esimerkkisovelluksen sovellusarkkitehtuuri [1]
  • Esimerkkisovelluksen infrastruktuuripinoarkkitehtuuri
  • Infrastruktuurilähdekoodin Microsoft Azure -pilvialustalle tehdyn toteutuk-
  • Pulumi-projektirakenne ensimmäisessä vaiheessa
  • Infrastruktuurilähdekoodin Microsoft Azure -pilvialustalle tehdyn toteutuk-
  • Palvelinsovellusten Pulumi-projektirakenne toisessa vaiheessa
  • Infrastruktuuri koodina -työkaluihin liittyvien Stack Overflow’n kysymysten
  • Suorituskykyvertailun tulokset kuvaajana
  • Pulumi-koodin Visual Studio Code -editorin työkaluvihje (engl. tooltip)
  • Pulumi-komentoriviliitännän 20 viimeisintä julkaisua
  • Suorituskykyvertailussa käytettyjen työkalujen ja pakettien versiot
  • Suorituskykyvertailun tulokset

Tämä liite sisältää komponenttiresurssin ja pinoluokan, joita voidaan käyttää staattisen verkkosivun luomiseen Microsoft Azure -pilvialustaan.

Taulukko F.1. Suorituskykymittausten toistojen 1–30 tulokset
Taulukko F.1. Suorituskykymittausten toistojen 1–30 tulokset

Suorituskykymittausten toistojen 1–30 tulokset

Suorituskykymittausten toistojen 31–60 tulokset

C#-kielen tyyppipäättely

Olioiden määrittely C#-kielelllä

Paikkasidonnaisten tietoluokkatyyppien määrittely

Esimerkiksi int-tyyppinen muuttuja voidaan implisiittisesti muuttaa muuttujaksi, jonka tyyppi on long, koska 64-bittinen tyyppi voi sisältää 32-bittisen senint-tyypin arvon menettämättä tietoja. Eksplisiittiset tyyppimuunnokset ovat sellaisia, joissa on vaara menettää tietoja, esimerkiksi kun desimaaliarvoja sisältävä desimaalityyppinen muuttuja muunnetaan kokonaislukutyyppiseksi int.

Tyyppimuunnosten määrittely

Jos esimerkiksi käytät C#-ohjelmointikieltä, kieliisäntä kääntää suoritettavan tiedoston automaattisesti, ellei Pulumi-projektitiedostossa ole erikseen määritetty esikäännettyä ohjelmaa. Paikallista tiedostojärjestelmää [70] voidaan käyttää Pulumi-pinojen metatietojen arkistoon, mutta tässä tapauksessa pinon tilat ovat saatavilla vain koneella, jossa komento ajettiin.

Projektitiedosto Pulumi.yaml

Pulumi-projekti on hakemisto, joka sisältää Pulumi-ohjelman ja metatiedot, jotka kertovat, kuinka ohjelmaa ajetaan [49]. Pulumi-ohjelmat käyttävät ohjelmointikieli- ja pilvialustakohtaisia ​​kirjastoja, joiden avulla voidaan määritellä halutut infrastruktuuriresurssit ja luoda niistä infrastruktuuripino. Kieliisäntä suorittaa Pulumi-ohjelman, ja esimerkiksi C#-kielen oletusasetuksissa Pulumi-ohjelmat käännetään ennen niiden suorittamista.

C#-kielellä kirjoitettu Pulumi-ohjelma

Pulumi-resurssien parametreja kutsutaan tuloiksi ja resurssien palauttamia arvoja lähdöiksi. Muut resurssit voivat kuitenkin viitata resurssiryhmän nimeen, vaikka sen arvo olisi tiedossa vasta ajon aikana. Lähdöt ovat asynkronisia arvoja, joiden lopullinen arvo selviää vasta ohjelman suorituksen aikana [32], infrastruktuuriresurssien päivityksen jälkeen.

Kuva 5.3. Pulumi-ohjelman luomat resurssit
Kuva 5.3. Pulumi-ohjelman luomat resurssit

Tulostearvojen käsittely Pulumilla

Pulumi-pinon konfiguraatiotiedosto

Pulumi.Config-luokan käyttö C#-kielellä

Terraform-syötteitä on mahdollista antaa tiedostoihin, mutta niissä olevia mahdollisia salaisia ​​arvoja ei ole salattu, joten syöttötiedostoja ei pidä tallentaa sellaisenaan versionhallintaan. Lisäksi Pu-Lumia on mahdollista käyttää Terraform-tilatiedostojen kanssa, ja Terraformin hallinnoimaa tilaa voidaan käyttää myös Pulumi-pinoissa [30]. Yksisivuinen sovellus, joka käyttää TypeScriptiä ja Angular-kehystä, ja WebMVC-sovellus, joka käyttää ASP.NET Core MVC -kehystä.

Esimerkkisovelluksen mikropalvelut eivät kommunikoi suoraan keskenään, vaan käyttävät tapahtumakäsittelijää, joka toimii julkaisu- ja tilauskanavan päällä. Toinen infrastruktuuripino on pino, johon luodaan Kubernetes-yhteensopiva kuormituksen tasapainotin, joka mahdollistaa palveluiden käyttöönoton toimialueen verkossa. Ensimmäisessä vaiheessa alustalle asetettiin resurssit, jotka määritettiin aiemmin manuaalisesti Microsoft Azure -pilvialustan verkkoliittymästä.

Kuormantasaajakehityspinon konfigurointi komentoriviliitännällä

Tässä luvussa esitelty Pulumi-projekti ja hakemistorakenne eivät ole ainoa tapa toteuttaa tämän työn mukainen toiminnallisuus. Kun kaikki pinot on rakennettu, suoritetaan päästä päähän -testi, kirjaudutaan sovellukseen ja tehdään tilaus selaimella, joka käsitellään ohjelmakoodin kautta. GitHub-palvelusta saatavilla olevan tiedon1 mukaan Pulumin päätietokannan päähaaralle vastaanotettiin kuukauden aikana yhteensä 108 vetopyyntöä2, joista 92 yhdistettiin päähaaraan.

Kaikki Pulumin kehittäjät eivät kuitenkaan ole rekisteröityneet Pulumin organisaatioon, joten tarkkoja lukuja ei ole saatavilla. Tällä hetkellä on epätodennäköistä, että kehitysyhteisö pystyisi jatkamaan Pulumin kehittämistä, mikäli Pulumi Oyj:n toiminta lakkaa. Voit rakentaa resurssitoimittajasi dynaamiseksi resurssien tarjoajaksi [65], joka ei vaadi erillistä ohjelmalaajennusta ja toimii sen sisältävän ohjelman yhteydessä.

C#-ohjelmointikielellä tämä tarkoittaa, että periytymistä ja koostumusta voidaan käyttää resurssien ja pinojen kanssa.

Taulukko 7.1. Pulumi-komentoriviliitännän 20 viimeisintä julkaisua
Taulukko 7.1. Pulumi-komentoriviliitännän 20 viimeisintä julkaisua

Ajonaikainen virhe resurssiryhmän nimen puuttuessa

Yllä olevien ominaisuuksien lisäksi StackBase-perusluokan rakentaja tarkistaa, että Pulumi-pinon nimi vastaa työhön valittuja käytäntöjä.

Ajonaikainen virhe, kun resurssille on syötetty virheelliset arvot

Komponenttiresurssiesimerkki

Pinoluokkaesimerkki

Automatisointirajapintaesimerkki

Vian etsintään käytetty luokka

Pulumi-pinoluokkien kantaluokkana käytetty abstrakti StackBase-luokka

Pinon nimenä käytetty StackName-tietoluokka

Resurssiryhmään liittyviä yksikkötestejä

Kuormantasaajapinoon liittyvä yksikkötesti

Terraform-juurimoduuli

Terraform-verkkosivun sisältömoduuli

Terraform-tulosteet

Imagem

Kuva 5.2. Komponenttien keskinäiset suhteet
Kuva 5.1. Pulumin käsitteet [8]
Kuva 5.3. Pulumi-ohjelman luomat resurssit
Kuva 5.4. Pinon tuottamat tulosteet
+7

Referências

Documentos relacionados

Nesse projeto, levantamos a seguinte questão: A música pode aumentar o controle parassimpático do ritmo cardíaco e influenciar os níveis de atenção auditiva?. Objetivo Verificar os