Programmēšana

Neveiksmīga apmācība: izmēģiniet gudrāku AWS CLI

Anrī Binštoks ir Wallix galvenais jauninājumu virsnieks un Awless atvērtā koda projekta līdzautors.

Kad mākonis bija saistīts tikai ar virtuālajām mašīnām, tādi rīki kā Šefpavārs vai Leļļu mašīna mums palīdzēja viegli sagatavot mūsu VM. Vienīgais, kas bija svarīgi, bija nodrošināt gadījumus, kuros bija viss nepieciešamais kods un dati. Bet tagad, kad Amazon Web Services ir ieguvis vairāk nekā 90 pakalpojumus, mijiedarbība ar AWS API kļūst par galveno darba daļu.

Kā mums vajadzētu pārvaldīt AWS infrastruktūru un kādas saskarnes mums vajadzētu izmantot? Lielākā daļa iesācēju sāk darbu ar AWS Console, noklusējuma GUI, savukārt pieredzējuši sysadmins parasti dod priekšroku komandrindas interfeisam (CLI). Problēma ir tāda, ka AWS CLI nav lietotājam draudzīgs. Tā kā tas integrē visu AWS API, tas paver milzīgu virsmu komandu, karodziņu un opciju ziņā.

Awless ir radies no mūsu nepieciešamības pēc ātras, jaudīgas un viegli lietojamas CLI, lai pārvaldītu AWS. Izmantojot Awless, jūs varat izveidot un palaist AWS infrastruktūru, sākot no nulles, un vienmēr iegūt lasāmu izvadi (gan cilvēkiem, gan programmām), izpētīt un pieprasīt visus mākoņa resursus (pat bezsaistē), izveidot savienojumu ar gadījumiem un izveidot, atjaunināt un dzēst mākoņa resursus. Papildus atsevišķām komandrindām Awless atbalsta veidnes, kas nodrošina augstāku automatizācijas līmeni. Visbeidzot, bet ne mazāk svarīgi, Awless mērķis ir nodrošināt gudrus noklusējumus un drošības paraugpraksi.

Tā kā AWS pakalpojumu ir tik daudz, no komandrindas bieži ir svarīgi atrast un parādīt pakalpojumu hierarhiju. Mēs varam grupēt pakalpojumus pēc funkcionalitātes, piemēram, aprēķināšanas un datu bāzes. Bet izsmeļoši iziet katru no tiem ir garlaicīgi, jo šajā rakstā ir ne mazāk kā 15 pakalpojumi glabāšanā un datu bāzē, neskaitot četrus datu migrācijas pakalpojumus un deviņus analīzes pakalpojumus, kas ir tieši saistīti ar datu lietošanu.

Mums ir vieglāk grupēt pakalpojumus pēc gatavības mākoņiem. Šajā rakstā mēs sīki aprakstīsim, kā lietot Awless, lai izveidotu un pārvaldītu mākoņa resursus reālam lietojumam, ražošanai gatavu WordPress gadījumu izvietošanai. Mēs izmantosim šādus AWS resursus:

  1. VM pakalpojumi EC2 (elastīgais skaitļošanas mākonis) un ELB (elastīgās slodzes līdzsvarošana);
  2. Augsta līmeņa pakalpojumi, kas darbojas VM, bet tos pārvalda AWS, piemēram, RDS (relāciju datu bāzes pakalpojums) vai ElastiCache (rindām);
  3. Pakalpojumi “bez servera”, kas darbojas vairāku nomnieku VM, piemēram, S3 (objektu krātuve) vai Lambda (vienas funkcijas izpilde).
Wallix

Sāciet darbu ar Awless

Reģistrējieties AWS un izveidojiet pirmo kontu vietnē AdministratorAccess tiesības. Uzmanīgi atzīmējiet piekļuves atslēgu un slepeno atslēgu.

Instalējiet Awless

Awless ir pieejams vietnē GitHub. Mēs nodrošinam iepriekš izveidoti bināri faili un Homebrew pakotnes MacOS:

> brūvēt krānu wallix / awless 

> brūvēt instalēt drausmīgi

Pārbaudot, vai Awless ir pareizi instalēts, palaidiet:

> drausmīga versija

Awless ir veidots pēc tādiem populāriem komandrindas rīkiem kā Git. Lielākā daļa komandu ir:

> neveikls darbības vārds [entītija] [parametrs = vērtība ...]

Šis raksts sniegs 360 grādu pārskatu par reālajām AWS ražošanas slodzēm, sākot no nulles. Skaidrības labad mēs izlaižam visus apstiprinājumus un dažas izvades darbības, jo Awless vienmēr lūdz apstiprināt komandas, kas rada, atjaunina vai dzēš resursus.

Pirmie soļi ar Awless

Mēs varam izdot savu pirmo komandu Awless, uzskaitot mūsu virtuālos privātos mākoņus (VPC). Tā kā šī ir mūsu pirmā palaišana, mums būs jāievada daži nepieciešamie dati, lai konfigurētu Awless:

> drausmīgs saraksts vpcs

Laipni lūdzam šausmīgi! Notiek vides datu risināšana ...

Lūdzu, izvēlieties AWS reģionu:

ap-ziemeļaustrumi-1, ap-ziemeļaustrumi-2, ap-dienvidi-1, ap-dienvidaustrumi-1, ap-dienvidaustrumi-2, ca-centrālie-1, cn-ziemeļi-1, eu-centrālie-1, eu- rietumi-1, eu-rietumi-2, sa-austrumi-1, us-austrumi-1, us-austrumi-2, us-gov-west-1, us-rietumi-1, us-rietumi-2

Vērtība? > us-west-2

Sinhronizē reģionu ‘us-west-2’ ...

Nevar atrisināt AWS akreditācijas datus (AWS_ACCESS_KEY_ID un AWS_SECRET_ACCESS_KEY) Lūdzu, ievadiet piekļuves atslēgas un izvēlieties profila nosaukumu (saglabāts vietnē /Users/john/.aws/credentials):

AWS piekļuves atslēgas ID? AKIAIINZQI7WIEXAMPLE

AWS slepenā piekļuves atslēga? hYWZBVOusePEPSr5PkscplskB84fjbgUEXAMPLE

Izvēlēties profila vārdu? admin

✓ /Users/john/.aws/credentials izveidots

✓ Profila ‘admin’ akreditācijas dati ir veiksmīgi saglabāti

Viss pabeigts. Izbaudi!

Jūs varat pārskatīt un konfigurēt awless, izmantojot `awless config`.

Tagad darbojas: drausmīgs saraksts vpcs

| ID ▲ | VĀRDS | DEFAULT | VALSTS | CIDR |

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

| vpc-1d1df679 | | taisnība | pieejams | 172.31.0.0/16 |

Izveidojiet AWS lietotāju

Tagad mēs izmantosim Awless, lai izveidotu jaunu AWS lietotāju un piešķirtu viņam pietiekamas tiesības, izmantojot administratora profilu. Mēs izveidojam lietotāju John un viņa piekļuves atslēgu:

> awless izveidot lietotāja vārdu = john 

> awless izveidot piekļuves taustiņu user = john aws_access_key_id = AKIAIOSFODNN7EXAMPLE

aws_secret_access_key = wJalrXUtnFEMI / K7MDENG / bPxRfiCYEXAMPLEKEY

Vai vēlaties saglabāt .aws / akreditācijas datus? (jā / n) jā

Ieraksta nosaukums .aws / akreditācijas dati? [noklusējums] Džons

Tagad, kad Džons pastāv, viņam nepieciešamas atļauju kopas. Mēs piešķirsim Džonam pilnu piekļuvi EC2, RDS, Auto Scaling, CloudFront un S3 pakalpojumiem, kurus izmantosim šajā rakstā:

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

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

> awless attach policy service = s3 piekļuve = pilns lietotājs = john

> awless attach policy service = piekļuves automātiska mērogošana = full user = john

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

Tagad, kad Jānis ir pilnībā funkcionāls lietotājs, mēs pārslēgsimies uz viņa profilu, lai veiktu nākamās darbības:

> awless config set aws.profile john

Mēs izmantosim AWS, lai izveidotu ļoti pieejamu, pārvaldītu WordPress izvietošanu, apvienojot VM, pārvaldītos un bez servera pakalpojumus. Mūsu galvenais mērķis ir attēlots zemāk. Mums būs jārisina trīs “izaicinājumi”, lai to sasniegtu, izmantojot attiecīgi AWS infrastruktūras pakalpojumus, pārvaldītos pakalpojumus un bez servera pakalpojumus.

Wallix

1. izaicinājums: paceliet un pārvietojiet lietojumprogrammu uz EC2

Pacelšana un pārslēgšana ir ātrākā mantoto lietojumprogrammu migrēšana mākonī un gūšana no mākoņa platformu elastības un izmaksu priekšrocībām. Šajā gadījumā mēs sāksim ar WordPress dzinēja un tā datu bāzes izvietošanu vienā VM. Klienti izveidos tiešu savienojumu ar VM.

Wallix

Izveidojiet VPC

Pirms turpināt veidot VM, vispirms jāizveido tīkla resursi:

  • Privāts tīkls (vai VPC)
  • Interneta vārteja šim VPC
  • Apakštīkls, izmantojot interneta vārteju

Awless pieprasīs visus trūkstošos parametrus ar automātisko pabeigšanu. Šeit mēs izmantojam abu sniegto (param = vērtība) un pieprasītie parametri:

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

> bezgalīgi izveidot Internetgateway

[Labi] id = igw-1234567

> briesmīgi pievienot internetgateway

Lūdzu, norādiet (lai izietu, nospiediet Ctrl + C, lai pabeigtu tabulēšanu):

internetgateway.id? [Tab]

internetgateway.id? igw-1234567

internetgateway.vpc? @ wo [cilne]

internetgateway.vpc? @ wordpress-vpc

Awless izvirza labāko praksi vārdu, nevis resursu ID izmantošanai. Kā, @ resursa nosaukums ir resursa identifikators ar nosaukumu “resursa nosaukums”.

Izveidosim publisku apakštīklu, lai mitinātu mūsu WordPress instanci, un pievienojiet maršrutu tabulu, kas novirza interneta trafiku uz VPC interneta vārteju:

> awless izveidot apakštīklu cidr = 10.0.0.0 / 24 vpc = @ wordpress-vpc name = wordpress-public-subnet 

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

> awless izveidot maršrutējamu vpc = @ wordpress-vpc

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

Lūdzu, norādiet (lai izietu, nospiediet taustiņu kombināciju Ctrl + C, lai pabeigtu tabulēšanu):

routetable.id?[tab]

* atlasiet iepriekš izveidotā maršrutētā datora ID *

> neveiksmīgs maršruta izveide cidr = 0.0.0.0 / 0

Lūdzu, norādiet (lai izietu, nospiediet taustiņu kombināciju Ctrl + C, lai pabeigtu tabulēšanu):

route.gateway? * interneta vārtejas ID, kuru esat pievienojis VPC iepriekš *

route.table? * iepriekš izveidotā maršrutējamā tīkla ID *

Ņemiet vērā, ka katra Awless darbība ir aptuveni tikpat vienkārša, cik tā var būt. Lai gan mēs ievērojam visaptverošu soli pa solim pieeju, Awless ļauj mums daudz ātrāk tikt cauri garlaicīgam infrastruktūras izveidošanas procesam nekā ar grafisko konsoli vai AWS CLI.

Izveidojiet SSH atslēgu pāri un drošības grupu

Mākoņu tīkls tagad ir gatavs. Pirms eksemplāra izveidošanas mums ir nepieciešams SSH atslēgu pāris, lai vēlāk izveidotu savienojumu ar instanci. Vienā komandā Awless lokāli ģenerē SSH atslēgu pāri un reģistrē to AWS:

> awless izveidot taustiņu pāri = johnkey

Labākā prakse ir nodrošināt minimālu piekļuvi jebkuram resursam, tāpēc mēs pieņemsim tikai HTTP savienojumus no visa interneta un SSH no mūsu izejošās IP adreses. Lai to izdarītu, mēs izveidojam un konfigurējam drošības grupu:

> awless izveidot drošības grupu vpc = @ wordpress-vpc description = \ ”HTTP public + SSH access \” name = wordpress-secgroup 

> MY_IP = $ (bezkaunīgs whoami - tikai un vienīgi)

> awless update securitygroup id = @ ienākošs wordpress-secgroup = autorizēt cidr = $ MY_IP / 32 portrange = 22

> awless update securitygroup id = @ ienākošs wordpress-secgroup = autorizēt cidr = 0.0.0.0 / 0 portrange = 80

Nodrošiniet lietojumprogrammu ar AWS lietotāja datiem

Tagad mēs nodrošināsim savu WordPress instanci, izmantojot AWS lietotāja datus. Šeit mēs izmantosim GitHub pieejamo skriptu:

> awless create instance subnet = @ wordpress-public-subnet keypair = johnkey name = wordpress-instance userdata = // raw.githubusercontent.com/zn3zman/AWS-WordPress-Creation/16a52aef4f618d558d61197df4e4eca4c015277f/WP-Set/WP-Set secgrupa

Tu vari izmantot šausmīgs šovs lai iegūtu informāciju par jebkuru resursu, piemēram, par mūsu WordPress instances publisko IP adresi:

> briesmīgi parādīt wordpress-instanci

Varat izveidot savienojumu ar IP adresi no komandas izvades, lai piekļūtu savam WordPress pakalpojumam (lai gan, iespējams, būs jāgaida dažas minūtes, līdz eksemplārs tiek pareizi nodrošināts).

WordPress fonds

Pēc noklusējuma Awless izveidos tipu t2.micro (1 vCPU, 1GB RAM), izmantojot Amazon Linux. Noklusējuma vērtības var atjaunināt, izmantojot šausmīgs konfigurācijas komplekts:

> awless config set instance.type m4.large 

> UBUNTU_AMI = $ (lieliski meklēšanas attēli ir kanoniski: ubuntu - tikai un vienīgi - kluss)

> awless config set instance.image $ UBUNTU_AMI

Līdz šim mēs esam izveidojuši vairākus resursus. Izmantojot šausmīgs saraksts, mēs varam uzskaitīt lietotājus, gadījumus, apakštīklus un visus citus resursu veidus (ja jūsu AWS profilam, protams, ir pietiekamas tiesības). Piemēram, mēs varam uzskaitīt gadījumus:

> drausmīgi sarakstu gadījumi 

| ID ▲ | ZONA | VĀRDS | UZTURĒŠANA |

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

| i-00268db26b0d0393c | us-west-1c | wordpress-instance | 57 minūtes |

[...]

Awless nodrošina spēcīgu funkciju, kas nodrošina ērtu savienojumu ar gadījumiem, izmantojot SSH. Aizkulisēs Awless automātiski iegūs instances IP adresi, uzminēs lietotājvārdu un izveidos savienojumu ar iepriekš izveidoto atslēgu pāri:

> drausmīgs ssh wordpress-instance

Ja vēlaties izdzēst WordPress instanci, varat palaist awless izdzēst instances id = @ wordpress-instance. Jūs varat to izdarīt tūlīt, jo nākamajā izaicinājumā mēs izveidosim uzlabotu izvietošanu.

Kā izmantot Awless veidnes

Visas šī izaicinājuma darbības var raksturot kā Awless komandu secību, kur iepriekšējo komandu rezultāti (piemēram, interneta vārtejas ID) tiek izmantoti kā ieeja nākamajās komandās. Tā kā Awless nodrošina iebūvētu veidņu sistēmu, jūs varētu iekapsulēt visu 1. izaicinājumu veidnē un palaist to ar:

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

Awless piedāvā spēcīgu funkciju, kas ļauj atcelt lielāko daļu izmaiņu, kas tiek piemērotas AWS infrastruktūrai. Piemēram, vienā komandā varat izdzēst visu veidnes izveidoto infrastruktūru: šausmīgi atgriezt revert-id. Lai atrastu doto atgriezt id, drausmīgs baļķis ir uzskaitītas visas komandas, kas iepriekš piemērotas mākoņa infrastruktūrai, gan ar to izvadi, gan ID:

> drausmīgs žurnāls # atrodiet atjaunojamo ID > awless revert 01BM6D1YRZ5SSN5Z09VEEGN0HV

2. izaicinājums: izmantojiet AWS pārvaldītos pakalpojumus

Mūsu iepriekšējā izvietošana ir funkcionāla, taču diezgan amatnieciska. Mūsu emuāru nodrošina viens eksemplārs vienā pieejamības zonā (AZ). Tagad mēs vēlamies izveidot ļoti pieejamu emuāru ar slodzes līdzsvarotāju, diviem gadījumiem dažādos AZ un kopētu datu bāzi, kuru koplieto mūsu instances. Tā vietā, lai eksemplārā vadītu savu datu bāzi, mēs izmantosim AWS RDS, Amazon pārvaldīto SQL datu bāzu pakalpojumu. Pārvaldīta pakalpojuma izmantošana nodrošina daudzas priekšrocības, tostarp kopu veidošanu, pārvaldītu drošību un dublējumus.

Wallix

Lai mums būtu ļoti pieejami resursi, mums tie jāsadala apakštīklos dažādās pieejamības zonās (AZ) un līdzsvarot slodzi, izmantojot elastīgās slodzes līdzsvarošanu.

Wallix

Šim izaicinājumam mēs izveidosim:

  • Viens slodzes balansētājs, lai sadalītu slodzi starp instancēm
  • Divi publiski apakštīkli, kas jāsaista ar interneta slodzes līdzsvarotāju
  • Divi privāti apakštīkli dažādās AZ (piemēram, us-east-1a, us-east-1e), lai uzņemtu gadījumus
  • Viena automātiskās mērogošanas grupa, lai pārvaldītu WordPress gadījumu mērogošanu
  • Viens NAT vārteja vienā publiskā apakštīklā, lai iespējotu izejošos zvanus instanču nodrošināšanai
  • Viens publisks fiksēts IP (elastīgs IP) NAT vārtejai
  • Viens RDS MariaDB gadījumam automātiski tiek atkārtots privātajos apakštīklos

Mēs izveidosim šo infrastruktūru, palaižot Awless veidnes. Pirmā veidne izveido apakštīklus un maršrutēšanu. The {hole} apzīmējums ļauj parametrus dinamiski aizpildīt veidnes darbības laikā. The $ atsauce apzīmējums ļauj izveidot izveidoto resursu atsauces.

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