Ohjelmointi

Awless-opetusohjelma: Kokeile älykkäämpiä CLI: tä AWS: lle

Henri Binsztok on Wallixin innovaatiojohtaja ja Awless avoimen lähdekoodin projektin luoja.

Kun pilvi koski vain virtuaalikoneita, Chefin tai Puppetin kaltaiset työkalut auttoivat meitä valmistamaan virtuaalikoneemme helposti. Ainoa asia, joka oli merkityksellistä, oli toimittaa esiintymät, jotka sisälsivät kaikki vaaditut koodit ja tiedot. Mutta nyt, kun Amazon Web Services on kasvanut yli 90 palveluun, vuorovaikutuksesta AWS-sovellusliittymän kanssa tulee pääosa työstä.

Kuinka meidän tulisi hallita AWS-infrastruktuuria ja mitä rajapintoja meidän tulisi käyttää? Useimmat aloittelijat aloittavat AWS Consolen, oletusarvoisen käyttöliittymän, kun taas kokeneet järjestelmänvalvojat suosivat yleensä komentoriviliittymää (CLI). Ongelmana on, että AWS CLI ei ole käyttäjäystävällinen. Koska se integroi koko AWS-sovellusliittymän, se paljastaa valtavan pinta-alan komentojen, lippujen ja vaihtoehtojen kannalta.

Awless syntyy siitä, että tarvitsemme nopean, tehokkaan ja helppokäyttöisen CLI: n AWS: n hallintaan. Awlessin avulla voit luoda ja käyttää AWS-infrastruktuuria alusta alkaen ja saada aina luettavaa tulostusta (sekä ihmisille että ohjelmille), tutkia ja kysellä kaikkia pilviresursseja (jopa offline-tilassa), muodostaa yhteyden ilmentymiin ja luoda, päivittää ja Poista pilviresurssit. Yksittäisten komentorivien lisäksi Awless tukee malleja, jotka mahdollistavat korkeamman automatisoinnin. Viimeisenä, mutta ei vähäisimpänä, Awless pyrkii varmistamaan älykkäät oletukset ja tietoturvan parhaat käytännöt.

Koska AWS-palveluja on niin paljon, on usein tärkeää löytää ja näyttää palveluhierarkia komentoriviltä. Voimme ryhmitellä palvelut toimintojen - kuten laskenta ja tietokanta - mukaan. Mutta niiden läpi käyminen tyhjentävästi on työlästä, koska tämän kirjoituksen jälkeen varastoinnin ja tietokannan ympärillä on vähintään 15 palvelua, lukuun ottamatta neljää tiedonsiirtopalvelua ja yhdeksää analyysipalvelua, jotka liittyvät suoraan datan käyttöön.

Palvelujen ryhmittely on helpompaa pilvivalmiuden mukaan. Tässä artikkelissa kerrotaan, kuinka Awlessia voidaan käyttää pilviresurssien luomiseen ja hallintaan todellisessa käyttötapauksessa, tuotantovalmiiden WordPress-ilmentymien käyttöönotossa. Käytämme seuraavia AWS-resursseja:

  1. VM-palvelut EC2 (Elastic Compute Cloud) ja ELB (Elastic Load Balancing);
  2. Virtuaalikoneissa toimivat, mutta AWS: n ylläpitämät korkean tason palvelut, kuten RDS (relaatiotietokantapalvelu) tai ElastiCache (jonoja varten);
  3. Palvelimettomat palvelut, jotka toimivat monen vuokralaisen virtuaalikoneissa, kuten S3 (objektitallennus) tai Lambda (yhden toiminnon suoritus).
Wallix

Aloita Awlessin kanssa

Rekisteröidy AWS-palveluun ja luo ensimmäinen tili osoitteessa AdministratorAccess oikeuksia. Huomaa käyttöavaimesi ja salainen avain huolellisesti.

Asenna Awless

Awless on saatavana osoitteessa GitHub. Me tarjoamme valmiit binäärit ja Homebrew-paketit MacOS: lle:

> panimo hana wallix / awless 

> hautua asentaa kauheasti

Voit tarkistaa, että Awless on asennettu oikein suorittamalla:

> hirvittävä versio

Awless on mallinnettu suosittujen komentorivityökalujen, kuten Git, mukaan. Useimmat komennot ovat muodossa:

> awless verbi [entiteetti] [parametri = arvo ...]

Tämä artikkeli antaa 360 asteen yleiskuvan AWS: n todellisista tuotantokuormituksista alusta alkaen. Selvyyden vuoksi jätämme pois kaikki vahvistukset ja joitain tulostusvaiheita, koska Awless pyytää aina vahvistamaan komennot, jotka luovat, päivittävät tai poistavat resursseja.

Ensimmäiset askeleet Awlessin kanssa

Voimme antaa ensimmäisen Awless-komentomme luetteloimalla virtuaaliset yksityiset pilvet (VPC). Koska tämä on ensimmäinen suorituksemme, meidän on syötettävä joitain tarvittavia tietoja Awlessin määrittämiseksi:

> mahtava luettelo vpcs

Tervetuloa kamalaan! Ympäristötietoja selvitetään ...

Valitse AWS-alue:

ap-koillis-1, ap-koillis-2, ap-etelä-1, ap-kaakko-1, ap-kaakko-2, ca-keski-1, cn-pohjoinen-1, eu-keski-1, eu- länsi-1, eu-länsi-2, sa-itä-1, us-itä-1, us-itä-2, us-gov-länsi-1, us-länsi-1, us-länsi-2

Arvo? > us-länsi-2

Synkronoidaan alue 'us-west-2' ...

AWS-kirjautumistietoja ei voida ratkaista (AWS_ACCESS_KEY_ID ja AWS_SECRET_ACCESS_KEY) Anna käyttöavaimet ja valitse profiilin nimi (tallennettu osoitteeseen /Users/john/.aws/credentials):

AWS-avaimen tunnus? AKIAIINZQI7WIESIMERKKI

AWS: n salainen pääsyavain? hYWZBVOusePEPSr5PkscplskB84fjbgUEXAMPLE

Valitse profiilin nimi? admin

✓ /Users/john/.aws/tiedot luotu

✓ Profiilin "järjestelmänvalvoja" tunnistetietojen tallennus onnistui

Valmista. Nauttia!

Voit tarkistaa ja konfiguroida awlessin käyttämällä `awless config` -ohjelmaa.

Nyt käynnissä: awless list vpcs

| Tunnus ▲ | NIMI | OLETUS | VALTION | CIDR |

|--------------|------|---------|-----------|---------------|

| vpc-1d1df679 | | totta | käytettävissä | 172.31.0.0/16 |

Luo AWS-käyttäjä

Käytämme nyt Awlessia uuden AWS-käyttäjän luomiseen ja annamme hänelle riittävät oikeudet järjestelmänvalvojan profiilia käyttämällä. Luomme käyttäjän John ja hänen avaimensa:

> awless luoda käyttäjänimi = john 

> awless create accesskey user = john aws_access_key_id = AKIAIOSFODNN7EXAMPLE

aws_secret_access_key = wJalrXUtnFEMI / K7MDENG / bPxRfiCYEXAMPLEKEY

Haluatko tallentaa .aws / valtakirjoihin? (kyllä ​​/ ei) y

Merkinnän nimi .aws / tunnistetiedoissa? [oletus] john

Nyt kun John on olemassa, hän tarvitsee joukon oikeuksia. Annamme Johnille täyden pääsyn EC2-, RDS-, automaattisen skaalaus-, CloudFront- ja S3-palveluihin, joita käytämme tässä artikkelissa:

> awless attach policy service = ec2 access = täysi käyttäjä = john 

> awless attach policy service = rds access = täysi käyttäjä = john

> awless attach policy service = s3 access = täysi käyttäjä = john

> awless attach policy service = automaattisen skaalausoikeus = täysi käyttäjä = john

> awless attach policy service = cloudfront access = täysi käyttäjä = john

Nyt kun John on täysin toimiva käyttäjä, vaihdamme hänen profiiliinsa seuraavia vaiheita varten:

> awless config set aws.profile john

Käytämme AWS: ää erittäin saatavilla olevan, hallitun WordPress-käyttöönoton yhdistämiseen, yhdistämällä virtuaalikoneet, hallitut ja palvelimettomat palvelut. Päätavoitteemme on kuvattu alla. Meidän on kohdattava kolme "devops-haastetta" päästäkseen siihen käyttämällä AWS-infrastruktuuripalveluja, hallittuja palveluja ja palvelimettomia palveluja.

Wallix

Haaste 1: Nosta ja siirrä sovellus EC2: een

Lift and shift on nopein tapa siirtää vanhat sovellukset pilveen ja hyötyä pilvialustojen joustavuudesta ja kustannusetuista. Tässä tapauksessa aloitamme asentamalla WordPress-moottorin ja sen tietokannan yhteen virtuaalikoneeseen. Asiakkaat muodostavat yhteyden suoraan virtuaalikoneeseen.

Wallix

Luo VPC

Ennen kuin jatkamme virtuaalikoneen luomista, meidän on ensin luotava verkkoresursseja:

  • Yksityinen verkko (tai VPC)
  • Internet-yhdyskäytävä tälle VPC: lle
  • Internet-yhdyskäytävää käyttävä aliverkko

Awless kysyy puuttuvia parametreja automaattisella täydennyksellä. Tässä käytämme molempien yhdistelmää (param = arvo) ja kehotetut parametrit:

> awless luoda vpc cidr = 10.0.0.0 / 16 name = wordpress-vpc 

> loistava luoda Internetgateway

[OK] id = igw-1234567

> mahtava liittää internetgateway

Määritä (lopeta Ctrl + C, välilehti loppuun):

internetgateway.id? [Välilehti]

internetgateway.id? igw-1234567

internetgateway.vpc? @wo [välilehti]

internetgateway.vpc? @ wordpress-vpc

Awless esittää parhaan käytännön käyttää nimiä resurssitunnusten sijaan. Sellaisenaan, @ resurssi-nimi on resurssin nimi nimeltä resurssi-nimi.

Luodaan julkinen aliverkko WordPress-ilmentymän isännöimiseksi ja liitetään reittitaulukko, joka reitittää Internet-liikenteen VPC: n Internet-yhdyskäytävään:

> awless luoda aliverkko cidr = 10.0.0.0 / 24 vpc = @ wordpress-vpc name = wordpress-public-subnet 

> awless update subnet id = @ wordpress-public-subnet public = true

> awless luoda reititettävää vpc = @ wordpress-vpc

> awless attach reititettävä aliverkko = @ wordpress-public-subnet

Määritä (lopeta Ctrl + C, välilehti loppuun):

routetable.id?[tab]

* valitse yllä luomasi reititettävän levyn tunnus *

> loistava reitin luominen cidr = 0.0.0.0 / 0

Määritä (lopeta Ctrl + C, välilehti loppuun):

reitti.gateway? * yllä olevan VPC: hen liitetyn Internet-yhdyskäytävän tunnus *

reitti. taulukko? * yllä luomasi reititettävän levyn tunnus *

Huomaa, että jokainen toiminto Awlessissa on suunnilleen yhtä yksinkertainen kuin se voi saada. Vaikka noudatamme kattavaa vaiheittaista lähestymistapaa, Awless antaa meille mahdollisuuden käydä läpi tylsä ​​infrastruktuurin perustamisprosessi paljon nopeammin kuin graafisella konsolilla tai AWS CLI: llä.

Luo SSH-avainpari ja suojausryhmä

Pilviverkko on nyt valmis. Ennen instanssin luomista tarvitsemme SSH-avainparin, jotta voimme muodostaa yhteyden ilmentymään myöhemmin. Yhdellä komennolla Awless luo SSH-avainparin paikallisesti ja rekisteröi sen AWS: lle:

> awless create keypair name = johnkey

Paras käytäntö on antaa mahdollisimman vähän pääsyä mihin tahansa resurssiin, joten hyväksymme vain HTTP-yhteydet kaikesta Internetistä ja SSH lähtevästä IP-osoitteestamme. Tätä varten luomme ja määritämme suojausryhmän:

> awless luoda suojausryhmää vpc = @ wordpress-vpc description = \ ”HTTP public + SSH access \” name = wordpress-secgroup 

> MY_IP = $ (mahtava whoami - vain yksi)

> awless update securitygroup id = @ wordpress-secgroup inbound = valtuuta cidr = $ MY_IP / 32 portrange = 22

> awless update securitygroup id = @ wordpress-secgroup inbound = valtuuta cidr = 0.0.0.0 / 0 portrange = 80

Toimita sovellus AWS-käyttäjätiedoilla

Tarjoamme nyt WordPress-ilmentymämme AWS-käyttäjätietojen avulla. Tässä käytämme GitHubissa saatavana olevaa komentosarjaa:

> awless luoda ilmentymän aliverkko = @ wordpress-public-subnet keypair = johnkey name = wordpress-instance userdata = // raw.githubusercontent.com/zn3zman/AWS-WordPress-Creation/16a52aef4f618d558d61197df4e4eca4c015277f/WP-Set secgroup

Voit käyttää kamala show saada tietoja mistä tahansa resurssista, kuten WordPress-ilmentymämme julkisesta IP-osoitteesta:

> awless näytä wordpress-instanssi

Voit muodostaa yhteyden IP-osoitteeseen komentolähdöstä päästäksesi WordPress-palveluun (vaikka saatat joutua odottamaan muutaman minuutin, ennen kuin ilmentymä on järjestetty oikein).

WordPress-säätiö

Oletusarvoisesti Awless luo tyypin t2.micro (1 vCPU, 1 Gt RAM-muistia) Amazon Linuxilla. Voit päivittää oletusarvot käyttämällä kamala kokoonpano asetettu:

> awless config set instance.type m4.large 

> UBUNTU_AMI = $ (kauhistuttavien hakukuvien kanoninen: ubuntu - vain - vain hiljainen)

> awless config set instance.image $ UBUNTU_AMI

Tähän asti olemme rakentaneet useita resursseja. Käyttämällä kauhea luettelo, voimme luetella käyttäjiä, instansseja, aliverkkoja ja kaikenlaisia ​​resursseja (edellyttäen, että AWS-profiilillasi on tietysti riittävät oikeudet). Voimme esimerkiksi luetella esiintymiä:

> kauheita luettelotapauksia 

| Tunnus ▲ | ZONE | NIMI | UPTIME |

|-------------------|----------|--------------------|---------|

| i-00268db26b0d0393c | us-länsi-1c | wordpress-instanssi | 57 minuuttia |

[...]

Awless tarjoaa tehokkaan ominaisuuden, joka mahdollistaa helpot yhteydet SSH: n käyttäviin ilmentymiin. Kulissien takana Awless saa automaattisesti instanssin IP-osoitteen, arvaa käyttäjänimen ja muodostaa yhteyden aiemmin luomaamme avainpariin:

> mahtava ssh wordpress-instanssi

Jos haluat poistaa WordPress-ilmentymän, voit suorittaa sen awless poista ilmentymä id = @ wordpress-instanssi. Voit tehdä sen nyt, koska luomme edistyneemmän käyttöönoton seuraavassa haasteessa.

Kuinka käyttää Awless-malleja

Tämän haasteen kaikkia vaiheita voidaan kuvata Awless-komentojen sekvenssinä, jossa aiempien komentojen tuloksia (esimerkiksi Internet-yhdyskäytävän ID) käytetään tulona seuraaviin komentoihin. Koska Awless tarjoaa sisäänrakennetun mallijärjestelmän, voit kapseloida koko Haaste 1 malliin ja suorittaa sen seuraavilla tavoilla:

> awless run //raw.githubusercontent.com/wallix/awless-templates/bcd0dd41b1524eeac1e53d12b2998bc56689c517/simple_wordpress_infra.aws

Awless tarjoaa tehokkaan ominaisuuden, jonka avulla voit peruuttaa useimmat AWS-infrastruktuuriin tehdyt muutokset. Voit esimerkiksi poistaa koko mallin luoman infrastruktuurin yhdellä komennolla: awless revert revert-id. Tietyn löytäminen palauta tunnus, hirvittävä loki listaa kaikki pilvi-infrastruktuuriin aiemmin sovelletut komennot sekä niiden tuotoksella että tunnuksellaan:

> hirttämätön loki # etsi palautettava tunnus > awless revert 01BM6D1YRZ5SSN5Z09VEEGN0HV

Haaste 2: Käytä AWS-hallittuja palveluita

Aikaisempi käyttöönottomme on toimiva, mutta melko käsityöläinen. Blogimme toimii yhdellä esiintymällä yhdellä käytettävyysalueella (AZ). Haluamme nyt rakentaa erittäin saatavissa olevan blogin, jossa on kuormituksen tasapainotin, kaksi ilmentymää eri AZ: issa ja kopioitu tietokanta, jonka instanssimme jakavat. Oman tietokannan käyttämisen sijasta käytämme AWS RDS: ää, Amazonin hallinnoimaa palvelua SQL-tietokantoihin. Hallitun palvelun käyttäminen tarjoaa monia etuja, kuten klusteroinnin, hallitun tietoturvan ja varmuuskopiot.

Wallix

Jotta resursseja olisi hyvin saatavilla, meidän on jaettava ne aliverkkoihin eri käytettävyysvyöhykkeillä (AZ) ja tasapainotettava kuormitus joustavan kuormituksen tasapainottamisen avulla.

Wallix

Tätä haastetta varten luomme seuraavan:

  • Yksi kuormituksen tasapainottaja kuorman jakamiseksi ilmentymien välillä
  • Kaksi julkista aliverkkoa yhdistettävissä Internet-kuormituksen tasapainottajaan
  • Kaksi yksityistä aliverkkoa eri AZ-alueilla (esim. Us-east-1a, us-east-1e) tapausten isännöimiseksi
  • Yksi automaattinen skaalausryhmä WordPress-esiintymien skaalauksen hallitsemiseksi
  • Yksi NAT-yhdyskäytävä yhdessä julkisessa aliverkossa mahdollistamaan lähtevät puhelut ilmentymien valmisteluun
  • Yksi julkinen kiinteä IP (elastinen IP) NAT-yhdyskäytävälle
  • Yksi RDS MariaDB-ilmentymälle kopioituu automaattisesti yksityisiin aliverkkoihin

Rakennamme tämän infrastruktuurin suorittamalla Awless-malleja. Ensimmäinen malli luo aliverkot ja reitityksen. {reikä} merkinnän avulla parametrit voidaan täyttää dynaamisesti mallin suorituksen aikana. $ viite merkinnät mahdollistavat luotujen resurssien viittaukset takaisin.

$config[zx-auto] not found$config[zx-overlay] not found