Photo by blurrystock on Unsplash

AWS-ympäristöjen bootstrappaus automatisoidusti

AWS-ympäristö on yhdistelmä yksittäisestä AWS-tilistä sekä regionista. Parin yksittäisen ympäristön bootstrappaus onnistuu helposti cdk bootstrap -komennolla, mutta entä jos bootstrappausta vaativia ympäristöjä on kymmeniä, tai jopa satoja?

AWS CDK:n kanssa työskentelevät tietävät, että CDK:lla rakennettujen resurssien julkaiseminen AWS-pilviympäristöön vaatii ensimmäisenä tekona AWS-ympäristön bootstrappauksen – valmisteluprosessin.   

Prosessi valmistelee ympäristön vastaanottamaan IaC-koodin, joten siinä luodaan S3-bucket CDK:lla kirjoitettujen CloudFormation Stackien muutosten säilyttämiseen, sekä IAM roolit, jotka sallivat julkaisun ympäristöön.  

Ympäristö on yhdistelmä yksittäisestä AWS-tilistä sekä Regionista. Parin yksittäisen ympäristön bootstrappaus onnistuu helposti AWS CDK Toolkitin cdk bootstrap -komennolla: 

cdk bootstrap ACCOUNT-1/REGION-1 ACCOUNT-1/REGION-2 ACCOUNT-2/REGION-2


Mutta entä jos ympäristöjä on huomattavasti enemmän?

Tilanteessa, jossa käyttäjällä on organisaation sisäisesti käsiteltävänä 100 ympäristöä, cdk bootstrap -komento tulee nopeasti käytettävyytensä päähän. AWS tarjoaa ratkaisun blogipostauksessaan, hyödyntäen AWS Organisaatiota sekä CloudFormation StackSetsia, mutta työvaiheet tehdään manuaalisesti konsolista käsin. Seuraavassa esitellään yleisesti automatisoitu ratkaisu, jossa manuaaliset toimet ovat minimoitu, ja Github Actionsin lisäyksellä varmistetaan Organisaation uusien Organisaatioyksiköiden bootstrappaus. Jos hallittavia ympäristöjä on jaettuna useamman Organisaation kesken, on jokaisen Organisaation bootstrappaus määriteltävä erikseen.

CDK bootstrap -architecture
Automatisoitu ison organisaation CDK Bootstrap -arkkitehtuuri

Konseptit

AWS Organisaatio 

AWS Organisations on AWS-palvelu, jonka avulla käyttäjä hallitsee ja ylläpitää useita tilejä keskitetysti. 

Tiliejä hallitaan administrator-tason accountilla, joka on joko Organisaation Management Account, tai erikseen määritetty Organisaation Delegated Administrator Account. Organisaatiossa AWS-tilejä on mahdollista ryhmittää Organisaatioyksiköiksi (Organizational unit, OUs), joiden avulla pystytään järjestämään valitut tilit hierarkiaan, hallinnointia helpottamaan. OU voi sisältää tilien lisäksi myös muita OU:ita, mutta yksi tili voi olla vain yhdessä OU:ssa kerrallaan.

Service control policyja (SCP) käytetään määrittämään tileille sallitut käytettävät palvelut ja toiminnot. SCP ei itsessään myönnä käyttöoikeuksia tileille, vaan ne määrittävät Organisaation, OU:n tai tilin enimmäiskäyttöoikeudet. SCP:n liittäminen Organisaation juureen tai OU:hun rajoittaa jäsentilien oikeuksia, sillä SCP vaikuttaa hierarkiassa alaspäin, eikä juuressa kiellettyä käyttöoikeutta pysty alempana hierarkiassa muuttamaan sallituksi toisella SCP:llä. CDK tarvitsee Cloudformation Stackien julkaisemiseen varsin laajat käyttöoikeudet, jotka SCP:n tulee sallia CDK Deploy -roolille. 

AWS Organisaation esimerkkiarkkitehtuuri
AWS Organisaation esimerkkiarkkitehtuuri

 

CloudFormation StackSets 

StackSets-palvelun avulla voidaan Organisaation administrator-tason accountille luoda StackSet, joka luo, päivittää tai poistaa Stackeja useiden ympäristöjen, target accountien, välillä. Administrator-tason accountilla määritetään CloudFormation template, jota käytetään Stackien luomisen pohjana valituille ympäristöille. Jokaista StackSetin julkaisua ympäristöissä kutsutaan Stack Instanssiksi.   

StackSet mahdollistaa Stack Instanssien julkaisemisen automaattisesti uusille tileille, jotka liitetään Organisaatioon tai Organistaation OU:hin. Tämä tarkoittaa, että aina kun Organisaatioon tai OU:hun luodaan uusi tili, StackSet huolehtii uuden tilin automaattisesta bootstrappauksesta.   

Huomioi, että jos valitset StackSetin automaattisen julkaisun uusille tileille OU:ssa, valitset kaikki julkaistavat regionit etukäteen. Tämä ominaisuus on hyödyllinen, jos Organisaation sisällä käytetään kaikkien tilien kesken yleisesti samaa regionia (tai samaa pientä ryhmää regioneita). Jos tilien kesken käytetään useimmiten eri regioneita, on parempi jättää tämä ominaisuus käyttämättä ja lisätä uudet Stack Instanssit uusiin tileihin yksitellen. 

AWS StackSets
AWS CloudFormation StackSets

Github Actions  

Github Actions on CI/CD alusta, jonka avulla on mahdollista automatisoida build, test ja deployment pipeline. Workflow on määritettävä automatisoitu prosessi, joka suorittaa yhden tai useamman tehtävän. Workflowt määritetään repositorioon kirjatulla YAML-tiedostolla, joka suoritetaan kun repositorion tapahtuma laukaisee sen. Vaihtoehtoisesti ne pystytään myös käynnistämään itse manuaalisesti tai määritetyllä ajastuksella. 

Workflowt sijaitsevat .github/workflows -hakemistossa, ja yhdessä repositoriossa voi olla useampi workflow, joista jokainen voi suorittaa erilaisen tehtävän. Esimerkiksi yksi tehtävä buildaa ja testaa pull requestin, toinen julkaisee merged pull requestin tuotantoon, ja kolmas lisää tunnisteen aina kun joku luo uuden Github Issuen. 

Usean tilin multi-bootstrappauksessa Github Actionsin workflow’ta hyödynnetään päivittämään administrator-tason tilin StackSet automaattisesti. Workflow käynnistyy havaittuaan lähdekoodissa muutoksen StackSetin tilimäärityksissä, julkaisee uudet määritykset StackSetiin, jonka jälkeen StackSet huolehtii automaattisesti bootstrapin julkaisemisesta määritetyille tileille.

Visualizing the workflow file
GitHub Actions

Vaiheet automatisoituun multi-bootstrappaukseen yleisesti 

  1. Management Accountin bootstrap luodaan kuten yksittäisen tilin AWS CDK Bootstrap
    cdk bootstrap 
  2. Lopulle Organisaatiolle luodaan käytössä olevan CDK-version bootstrap stack template
    cdk bootstrap --show-template > cdk_bootstrap.yml 
  3. Määritetään StackSetissä käytettävät ympäristöt, eli Organisaation tilit/Organisaatioyksiköt ja regionit, joille cdk_bootstrap.yml halutaan julkaista
     
  4. StackSet julkaistaan administrator-tason tilille, josta AWS:n organisaatiologiikka hoitaa bootstrap-Stackien julkaisun määritetyille ympäristöille.
     
  5. Github Actionsia hyödynnetään julkaisemaan ja päivittämään administrator-tason tilin StackSet. Tämän jälkeen StackSet huolehtii bootstrapin julkaisemisesta kaikille määritetyille AWS ympäristöille.

CloudBlox-kehittäjillä on automatisoidusta ratkaisusta käytettävissään vielä minimoidummat työvaiheet, jotka toteutetaan scriptien avulla. Solita CloudBlox on Solitan oma palvelukokonaisuus, jonka avulla yritykset voivat helpommin ja tehokkaammin hallita monen eri pilvitoimittajan palveluista koostuvaa pilviympäristöään ja sen kapasiteettia, kustannuksia ja tietoturvaa.