Programavimas

„Beveik“ pamoka: išbandykite išmanesnį AWS CLI

Henri Binsztok yra „Wallix“ vyriausiasis inovacijų pareigūnas ir „Awless“ atvirojo kodo projekto vienas iš kūrėjų.

Kai debesyje buvo kalbama tik apie virtualias mašinas, tokie įrankiai kaip „Chef“ ar „Lėlė“ padėjo mums lengvai paruošti savo VM. Svarbu buvo tik pateikti egzempliorius, kuriuose buvo visas reikalingas kodas ir duomenys. Tačiau dabar, kai „Amazon Web Services“ pasiekė daugiau nei 90 paslaugų, sąveika su AWS API tampa pagrindine darbo dalimi.

Kaip turėtume valdyti AWS infrastruktūrą ir kokias sąsajas turėtume naudoti? Daugelis pradedančiųjų pradeda naudoti „AWS Console“, numatytąją GUI, o patyrę sisteminiai administratoriai dažniausiai teikia pirmenybę komandinės eilutės sąsajai (CLI). Problema ta, kad AWS CLI nėra patogi vartotojui. Kadangi jis integruoja visą AWS API, jis atskleidžia didžiulį paviršiaus plotą pagal komandas, žymes ir parinktis.

„Awless“ kyla iš mūsų poreikio greitai, galingai ir lengvai naudoti CLI valdyti AWS. Naudodami „Awless“, galite sukurti ir valdyti AWS infrastruktūrą, pradedant nuo nulio, ir visada gauti skaitomą išvestį (tiek žmonėms, tiek programoms), ištirti visus debesų išteklius (net ir neprisijungus) ir atlikti užklausas, prisijungti prie egzempliorių ir kurti, atnaujinti ir tvarkyti. ištrinti debesies išteklius. Be atskirų komandų eilių, „Awless“ palaiko šablonus, įgalinančius aukštesnį automatizavimo lygį. Paskutinis, bet ne mažiau svarbus „Awless“ tikslas - užtikrinti sumanius nutylėjimus ir geriausią saugumo praktiką.

Kadangi AWS paslaugų yra labai daug, dažnai svarbu komandų eilutėje rasti ir parodyti paslaugų hierarchiją. Mes galime grupuoti paslaugas pagal funkcionalumą, pvz., Skaičiavimą ir duomenų bazę. Tačiau nuodugniai išgyventi kiekvieną iš jų yra varginantis dalykas, nes šio rašymo metu saugykloje ir duomenų bazėje yra ne mažiau kaip 15 paslaugų, neskaitant keturių duomenų perkėlimo paslaugų ir devynių analizės paslaugų, tiesiogiai susijusių su duomenų naudojimu.

Mums lengviau sugrupuoti paslaugas pagal pasirengimą debesims. Šiame straipsnyje mes išsamiai paaiškinsime, kaip naudoti „Awless“ kuriant ir tvarkant debesų išteklius realiam naudojimo atvejui, gamybai pritaikytų „WordPress“ egzempliorių diegimui. Mes naudosime šiuos AWS išteklius:

  1. VM paslaugos EC2 (Elastic Compute Cloud) ir ELB (Elastinis apkrovos balansavimas);
  2. Aukšto lygio paslaugos, veikiančios VM, bet valdomos AWS, pvz., RDS (Reliacinių duomenų bazių tarnyba) arba „ElastiCache“ (eilėms);
  3. „Be serverio“ paslaugos, veikiančios daugiabučiuose VM, pvz., S3 (objektų saugykla) arba „Lambda“ (vienos funkcijos vykdymas).
Wallix

Pradėkite nuo „Awless“

Prisiregistruokite AWS ir sukurkite pirmąją paskyrą AdministratorAccess teises. Atidžiai atkreipkite dėmesį į savo prieigos raktą ir slaptą raktą.

Įdiekite „Awless“

„Awless“ galite rasti adresu „GitHub“. Mes tiekiame iš anksto pastatyti dvejetainiai failai ir „Homebrew“ paketai, skirti „MacOS“:

> virimo čiaupas wallix / awless 

> užvirinti baisiai

Galite patikrinti, ar „Awless“ tinkamai įdiegta, paleisdami:

> baisi versija

„Awless“ modeliuojamas pagal tokius populiarius komandinės eilutės įrankius kaip „Git“. Dauguma komandų yra tokios:

> baisus veiksmažodis [subjektas] [parametras = reikšmė ...]

Šiame straipsnyje pateikiama 360 laipsnių realaus AWS gamybos darbo krūvio apžvalga, pradedant nuo nulio. Aiškumo dėlei praleidžiame visus patvirtinimus ir kai kuriuos išvesties veiksmus, nes „Awless“ visada prašo patvirtinti komandas, kurios sukuria, atnaujina ar ištrina išteklius.

Pirmieji žingsniai su „Awless“

Pirmąją „Awless“ komandą galime išleisti išvardiję savo virtualius privačius debesis (VPC). Kadangi tai yra pirmasis mūsų bandymas, turėsime įvesti keletą būtinų duomenų, kad sukonfigūruotume „Awless“:

> baisus sąrašas vpcs

Sveiki atvykę į nepaprastą! Sprendžiami aplinkos duomenys ...

Pasirinkite AWS regioną:

ap-šiaurės rytai-1, ap-šiaurės rytai-2, ap-pietūs-1, ap-pietryčiai-1, ap-pietryčiai-2, ca-centriniai-1, cn-šiaurės-1, eu-centriniai-1, eu- vakarai-1, eu-vakarai-2, sa-rytai-1, us-rytai-1, us-rytai-2, us-gov-west-1, us-vakarai-1, us-vakarai-2

Vertė? > mus-vakarus-2

Sinchronizuojamas regionas „us-west-2“ ...

Nepavyksta išspręsti AWS prisijungimo duomenų (AWS_ACCESS_KEY_ID ir AWS_SECRET_ACCESS_KEY) Įveskite prieigos raktus ir pasirinkite profilio pavadinimą (saugomą /Users/john/.aws/credentials):

AWS prieigos rakto ID? AKIAIINZQI7WIEXAMLLE

AWS slaptas prieigos raktas? hYWZBVOusePEPSr5PkscplskB84fjbgUEXAMPLE

Pasirinkite profilio vardą? administratorius

✓ Sukurti /Users/john/.aws/credentials

✓ Profilio „admin“ prisijungimo duomenys sėkmingai saugomi

Viskas padaryta. Mėgautis!

Galite peržiūrėti ir sukonfigūruoti „awless“ naudodami „awless config“.

Dabar veikia: baisus sąrašas vpcs

| ID ▲ | VARDAS | Numatytasis | VALSTYBĖ | CIDR |

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

| vpc-1d1df679 | | tiesa | prieinama | 172.31.0.0/16 |

Sukurkite AWS vartotoją

Dabar naudosime „Awless“ norėdami sukurti naują AWS vartotoją ir suteikti jam pakankamai teisių naudodami administratoriaus profilį. Sukuriame vartotoją Johną ir jo prieigos raktą:

> baisu sukurti vartotojo vardą = john 

> awless sukurti prieigos raktą user = john aws_access_key_id = AKIAIOSFODNN7EXAMPLE

aws_secret_access_key = wJalrXUtnFEMI / K7MDENG / bPxRfiCYEXAMPLEKEY

Ar norite išsaugoti .aws / kredencialus? (taip / ne) taip

Įrašo pavadinimas .aws / įgaliojimuose? [numatytasis] john

Dabar, kai Jonas egzistuoja, jam reikia leidimų rinkinio. Johnui suteiksime visišką prieigą prie EC2, RDS, Auto Scaling, CloudFront ir S3 paslaugų, kurias naudosime šiame straipsnyje:

> „awless attach policy service = ec2 access = full user = john“ 

> „awless attach policy service = rds access = full user = john“

> „awless attach policy service = s3 access = full user = john“

> „awless attach policy service“ = prieigos automatizavimas = visas vartotojas = john

> „awless attach policy service = cloudfront access = full user = john“

Dabar, kai Jonas yra visiškai funkcionalus vartotojas, pereisime prie jo profilio, kad atliktumėte kitus veiksmus:

> awless config set aws.profile john

Mes naudosime AWS, kad nustatytume labai prieinamą, valdomą „WordPress“ diegimą, derinant VM, valdomas ir be serverių paslaugas. Mūsų pagrindinis tikslas pavaizduotas žemiau. Turėsime išspręsti tris „iššūkius“, kad jį pasiektume, naudodamiesi atitinkamai AWS infrastruktūros paslaugomis, valdomomis paslaugomis ir paslaugomis be serverių.

Wallix

1 iššūkis: pakelkite ir perkelkite programą į EC2

„Lift and shift“ yra greičiausias senų programų perkėlimas į debesį ir naudojimasis debesų platformų lankstumu ir sąnaudų pranašumais. Tokiu atveju pradėsime diegdami „WordPress“ variklį ir jo duomenų bazę viename VM. Klientai prisijungs tiesiogiai prie VM.

Wallix

Sukurkite VPC

Prieš pradėdami kurti VM, pirmiausia turime sukurti tinklo išteklius:

  • Privatus tinklas (arba VPC)
  • Interneto vartai šiam VPC
  • Potinklis, naudojantis interneto šliuzą

„Awless“ paragins visus trūkstamus parametrus su automatiniu užbaigimu. Čia mes naudojame abu pateiktus derinius (param = vertė) ir raginami parametrai:

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

> baisu sukurti internetgateway

[Gerai] id = igw-1234567

> nepaprastai pritvirtinkite interneto vartus

Nurodykite (norėdami mesti, paspauskite „Ctrl“ + C, norėdami baigti skirtuką):

internetgateway.id? [Skirtukas]

internetgateway.id? igw-1234567

internetgateway.vpc? @ wo [skirtukas]

internetgateway.vpc? @ wordpress-vpc

„Awless“ pateikia geriausią vardų, o ne išteklių ID naudojimo praktiką. Kaip toks, @ išteklių pavadinimas yra išteklių, pavadintų „resurso pavadinimas“, identifikatorius.

Sukurkime viešąjį potinklį, kuriame talpinsime „WordPress“ egzempliorių, ir pridėkime maršrutų lentelę, nukreipiančią interneto srautą į VPC interneto vartus:

> baisus sukurti potinklį cidr = 10.0.0.0 / 24 vpc = @ wordpress-vpc name = wordpress-public-subnet 

> baisus atnaujinimas potinklio id = @ wordpress-public-subnet public = true

> baisiai sukurkite perkeliamą vpc = @ wordpress-vpc

> awless attach routetable subnet = @ wordpress-public-subnet

Nurodykite (norėdami išeiti, paspauskite „Ctrl“ + C, norėdami užbaigti skirtuką):

routetable.id?[tab]

* pasirinkite aukščiau sukurto kelialapio ID *

> baisus maršruto sukūrimas cidr = 0.0.0.0 / 0

Nurodykite (norėdami mesti, paspauskite „Ctrl“ + C, norėdami baigti skirtuką):

maršrutas.gateway? * interneto šliuzo, kurį pridėjote prie VPC, ID *

route.table? * aukščiau sukurto kelialapio ID *

Atkreipkite dėmesį, kad kiekvienas „Awless“ veiksmas yra maždaug toks paprastas, koks tik gali būti. Nors laikomės visapusiško žingsnis po žingsnio, „Awless“ leidžia mums daug greičiau atlikti nuobodų infrastruktūros sukūrimo procesą nei naudojant grafinę konsolę ar AWS CLI.

Sukurkite SSH raktų porą ir saugos grupę

Debesų tinklas dabar paruoštas. Prieš kurdami egzempliorių, mums reikia SSH raktų poros, kad vėliau galėtume prisijungti prie egzemplioriaus. Vienoje komandoje „Awless“ vietoje sukuria SSH raktų porą ir užregistruoja ją AWS:

> baisu sukurti keypair name = johnkey

Geriausia praktika yra suteikti minimalią prieigą prie bet kokių išteklių, todėl priimsime tik HTTP ryšius iš viso interneto ir SSH iš išeinančio IP adreso. Norėdami tai padaryti, mes sukuriame ir sukonfigūruojame saugos grupę:

> baisu sukurti saugos grupę vpc = @ wordpress-vpc description = \ ”HTTP public + SSH access \” name = wordpress-secgroup 

> MY_IP = $ (baisus „whoami“ - tik vienas)

> baisus atnaujinimo saugos grupės ID = @ įeinantis „wordpress-secgroup“ = įgalioti cidr = $ MY_IP / 32 portrange = 22

> baisus atnaujinimo saugos grupės ID = @ įeinantis „wordpress-secgroup“ = įgalioti cidr = 0.0.0.0 / 0 portrange = 80

Pateikite programą AWS vartotojo duomenimis

Dabar mes pateiksime savo „WordPress“ egzempliorių per AWS vartotojo duomenis. Čia mes naudosime scenarijų, kurį galima rasti „GitHub“:

> awless sukurti egzempliorių potinklį = @ wordpress-public-subnet keypair = johnkey name = wordpress-instance userdata = // raw.githubusercontent.com/zn3zman/AWS-WordPress-Creation/16a52aef4f618d558d61197df4e4eca4c015277f/WP-Set sekgrupė

Tu gali naudoti baisus pasirodymas Norėdami gauti informacijos apie bet kokius išteklius, pvz., viešą „WordPress“ egzemplioriaus IP adresą:

> „awless show wordpress-instance“

Galite prisijungti prie IP adreso iš komandos išvesties, kad galėtumėte pasiekti „WordPress“ paslaugą (nors gali tekti palaukti kelias minutes, kol egzempliorius bus tinkamai parengtas).

„WordPress“ fondas

Pagal numatytuosius nustatymus „Awless“ sukurs „t2.micro“ tipą (1 vCPU, 1 GB RAM) naudodamas „Amazon Linux“. Numatytąsias reikšmes galite atnaujinti naudodami baisus konfigūracijos rinkinys:

> awless config set instance.type m4.large 

> UBUNTU_AMI = $ („awless search images canonical“: „ubuntu — only-only“ - tylus)

> awless config set instance.image $ UBUNTU_AMI

Iki šiol sukūrėme kelis išteklius. Naudojant baisus sąrašas, galime išvardyti vartotojus, egzempliorius, potinklius ir visus kitus šaltinius (žinoma, jei jūsų AWS profilis turi pakankamai teisių). Pavyzdžiui, galime išvardyti egzempliorius:

> baisūs sąrašo egzemplioriai 

| ID ▲ | ZONA | VARDAS | ATNAUJINIMAS |

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

| i-00268db26b0d0393c | us-vakarai-1c | wordpress-instance | 57 min

[...]

„Awless“ yra galinga funkcija, leidžianti lengvai prisijungti prie egzempliorių naudojant SSH. Užkulisiuose „Awless“ automatiškai gaus egzemplioriaus IP adresą, atspės vartotojo vardą ir prisijungs prie anksčiau sukurto raktų poros:

> baisus ssh wordpress-egzempliorius

Jei norite ištrinti „WordPress“ egzempliorių, galite paleisti baisiai ištrinti egzempliorių id = @ wordpress-instance. Tai galite padaryti dabar, nes per kitą iššūkį sukursime pažangesnį diegimą.

Kaip naudoti „Awless“ šablonus

Visus šio iššūkio veiksmus galima apibūdinti kaip „Awless“ komandų seką, kurioje ankstesnių komandų rezultatai (pavyzdžiui, interneto vartų ID) naudojami kaip įvestis į kitas komandas. Kadangi „Awless“ teikia įmontuotą šablonų sistemą, galite sukomplektuoti visą 1 iššūkį į šabloną ir paleisti jį su:

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

„Awless“ siūlo galingą funkciją, kuri leidžia jums atšaukti daugumą pakeitimų, taikomų AWS infrastruktūrai. Pavyzdžiui, galite ištrinti visą šablono sukurtą infrastruktūrą vienoje komandoje: baisus grąžinti grąžinimo ID. Norėdami rasti duotą grąžinti ID, baisus rąstas pateikiamos visos anksčiau debesų infrastruktūrai pritaikytos komandos su jų išvestimi ir ID:

> baisus žurnalas # raskite grąžintiną ID > baisus grąžinimas 01BM6D1YRZ5SSN5Z09VEEGN0HV

2 iššūkis: naudokitės AWS valdomomis paslaugomis

Mūsų ankstesnė dislokacija yra funkcionali, tačiau gana amatinga. Mūsų tinklaraštį palaiko vienas egzempliorius vienoje prieinamumo zonoje (AZ). Dabar norime sukurti labai prieinamą tinklaraštį, kuriame būtų apkrovos balansavimo priemonė, du egzemplioriai skirtinguose AZ ir atkartota duomenų bazė, kuria dalijasi mūsų egzemplioriai. Užuot paleidę savo duomenų bazę, mes naudosime AWS RDS, „Amazon“ valdomą paslaugą SQL duomenų bazėms. Valdomos paslaugos naudojimas suteikia daug privalumų, įskaitant grupavimą, valdomą saugą ir atsargines kopijas.

Wallix

Norėdami turėti labai prieinamus išteklius, turime juos paskirstyti skirtinguose prieinamumo rajonuose (AZ) esančiuose antriniuose tinkluose ir subalansuoti apkrovą per elastingą apkrovos balansavimą.

Wallix

Šiam iššūkiui sukursime:

  • Vienas apkrovos balansatorius paskirsto apkrovą tarp egzempliorių
  • Du viešieji potinkliai, kuriuos reikia susieti su interneto apkrovos balansavimo įrenginiu
  • Du privatūs potinkliai skirtinguose AZ (pvz., Us-east-1a, us-east-1e), kuriuose talpinamos bylos
  • Viena automatinio mastelio keitimo grupė, skirta valdyti „WordPress“ egzempliorių mastelį
  • Vienas NAT šliuzas viename viešajame potinklyje, kad įgalintų išeinančius skambučius egzempliorių parengimui
  • Vienas viešasis fiksuotas IP (elastinis IP) NAT šliuzui
  • Vienas RDS, skirtas „MariaDB“ egzemplioriui, automatiškai pakartojamas privačiuose potinkliuose

Šią infrastruktūrą sukursime vykdydami „Awless“ šablonus. Pirmasis šablonas sukuria potinklius ir maršrutą. {skylė} žymėjimas leidžia dinamiškai užpildyti parametrus vykdant šabloną. $ nuoroda žymėjimas įgalina atgalines sukurtų išteklių nuorodas.

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