Programovanie

Úžasný návod: Vyskúšajte inteligentnejšie rozhranie CLI pre AWS

Henri Binsztok je hlavným inovačným riaditeľom spoločnosti Wallix a spolutvorcom open source projektu Awless.

Keď bol cloud iba o virtuálnych strojoch, nástroje ako Chef alebo Puppet nám pomohli ľahko pripraviť naše VM. Dôležité bolo jediné - zabezpečiť inštancie, ktoré obsahovali všetok požadovaný kód a údaje. Ale teraz, keď sa služba Amazon Web Services rozšírila na viac ako 90 služieb, stáva sa interakcia s AWS API hlavnou súčasťou práce.

Ako by sme mali spravovať infraštruktúru AWS a aké rozhrania by sme mali používať? Väčšina začiatočníkov začína s AWS Console, predvoleným GUI, zatiaľ čo ostrieľaní správcovia všeobecne uprednostňujú rozhranie príkazového riadku (CLI). Problém je v tom, že AWS CLI nie je užívateľsky prívetivý. Pretože integruje celé AWS API, vystavuje obrovskú plochu, pokiaľ ide o príkazy, príznaky a možnosti.

Awless sa rodí z našej potreby rýchleho, výkonného a ľahko použiteľného CLI na správu AWS. S programom Awless môžete vytvárať a prevádzkovať infraštruktúru AWS, a to od nuly, a vždy získať čitateľný výstup (pre ľudí aj programy), skúmať a dopytovať všetky cloudové zdroje (aj offline), pripájať sa k inštanciám a vytvárať, aktualizovať a odstrániť cloudové zdroje. Okrem jednotlivých príkazových riadkov podporuje Awless šablóny, ktoré umožňujú vyššiu úroveň automatizácie. V neposlednom rade je cieľom spoločnosti Awless zabezpečiť inteligentné predvolené hodnoty a najlepšie postupy zabezpečenia.

Pretože existuje toľko služieb AWS, je často dôležité nájsť a zobraziť hierarchiu služieb z príkazového riadku. Služby môžeme zoskupovať podľa funkcií - napríklad výpočtovej techniky a databázy. Ale podrobne prechádzať každou z nich je zdĺhavé, pretože v čase písania tohto článku nie je v okolí úložiska a databázy menej ako 15 služieb, bez započítania štyroch služieb migrácie údajov a deviatich analytických služieb, ktoré priamo súvisia s využívaním údajov.

Zjednocujeme služby podľa pripravenosti na cloud. V tomto článku sa podrobne dozvieme, ako používať Awless na vytváranie a správu cloudových zdrojov pre skutočný prípad nasadenia inštancií WordPress pripravených na výrobu. Budeme používať nasledujúce zdroje AWS:

  1. Služby VM EC2 (Elastic Compute Cloud) a ELB (Elastic Load Balancing);
  2. Služby na vysokej úrovni, ktoré bežia na virtuálnych počítačoch, ale sú spravované AWS, ako napríklad RDS (Relational Database Service) alebo ElastiCache (pre fronty);
  3. Služby bez servera, ktoré bežia na virtuálnych počítačoch s viacerými nájomníkmi, napríklad S3 (ukladanie objektov) alebo Lambda (vykonávanie jednej funkcie).
Wallix

Začnite s Awless

Zaregistrujte sa v službe AWS a vytvorte si prvý účet v službe Prístup správcu práva. Pozorne si poznačte prístupový kľúč a tajný kľúč.

Nainštalujte si program Awless

Awless je k dispozícii na GitHub. Zabezpečujeme vopred pripravené binárne súbory a Homebrew balíčky pre MacOS:

> pripraviť kohútik wallix / awless 

> variť nainštalovať strašne

Správnosť inštalácie programu Awless môžete skontrolovať spustením:

> strašná verzia

Awless je modelovaný podľa populárnych nástrojov príkazového riadku, ako je Git. Väčšina príkazov je vo forme:

> neuveriteľné sloveso [entita] [parameter = hodnota ...]

Tento článok poskytne 360-stupňový prehľad o skutočnom produkčnom zaťažení na AWS, počnúc nulou. Kvôli prehľadnosti vynechávame všetky potvrdzovacie a niektoré výstupné kroky, pretože program Awless vždy požaduje potvrdenie príkazov, ktoré vytvárajú, aktualizujú alebo odstraňujú zdroje.

Prvé kroky s Awlessom

Náš prvý príkaz Awless môžeme vydať uvedením zoznamu našich virtuálnych privátnych cloudov (VPC). Pretože toto je naše prvé spustenie, budeme musieť zadať niektoré potrebné údaje na konfiguráciu Awless:

> neuveriteľný zoznam vpcs

Vitajte na super! Riešenie údajov o prostredí ...

Vyberte oblasť AWS:

ap-severovýchod-1, ap-severovýchod-2, ap-juh-1, ap-juhovýchod-1, ap-juhovýchod-2, ca-central-1, cn-sever-1, eu-central-1, eu- west-1, eu-west-2, sa-east-1, us-east-1, us-east-2, us-gov-west-1, us-west-1, us-west-2

Hodnota? > us-west-2

Synchronizuje sa región „us-west-2“ ...

Nie je možné vyriešiť poverenia AWS (AWS_ACCESS_KEY_ID a AWS_SECRET_ACCESS_KEY). Zadajte prístupové kľúče a vyberte názov profilu (uložený na /Users/john/.aws/credentials):

ID prístupového kľúča AWS? AKIAIINZQI7WIEXAMPLE

Tajný prístupový kľúč AWS? hYWZBVOusePEPSr5PkscplskB84fjbgUEXAMPLE

Vyberte si profilové meno? admin

✓ /Users/john/.aws/credentials created

✓ Poverenia pre profil „admin“ boli úspešne uložené

Všetko hotové. Užite si to!

Pomocou `awless config` môžete skontrolovať a konfigurovať neskutočne.

Teraz beží: neuveriteľný zoznam vpcs

| ID ▲ | NÁZOV | VÝCHODNÉ | ŠTÁT | CIDR |

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

| vpc-1d1df679 | | pravda | k dispozícii | 172.31.0.0/16 |

Vytvorte používateľa AWS

Teraz použijeme program Awless na vytvorenie nového používateľa AWS a poskytneme mu dostatočné práva pomocou profilu správcu. Vytvoríme používateľa Johna a jeho prístupový kľúč:

> awless create user name = john 

> awless create accesskey user = john aws_access_key_id = AKIAIOSFODNN7EXAMPLE

aws_secret_access_key = wJalrXUtnFEMI / K7MDENG / bPxRfiCYEXAMPLEKEY

Prajete si uložiť do svojich .aws / poverení? (r / n) r

Názov záznamu v .aws / povereniach? [predvolené] john

Teraz, keď John existuje, potrebuje sadu povolení. Johnovi poskytneme plný prístup k službám EC2, RDS, Auto Scaling, CloudFront a S3, ktoré budeme v tomto článku používať:

> 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 = autoscaling access = full user = john

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

Teraz, keď je John plne funkčný používateľ, prepneme na jeho profil pre ďalšie kroky:

> neuveriteľná konfiguračná sada aws.profile john

Pomocou AWS nastavíme vysoko dostupné a spravované nasadenie WordPress kombinujúce virtuálne počítače, spravované a bezserverové služby. Náš hlavný cieľ je zobrazený nižšie. Budeme musieť vyriešiť tri „výzvy devops“, aby sme to dosiahli, a to využitím služieb infraštruktúry AWS, spravovaných služieb a služieb bez servera.

Wallix

Výzva 1: Zdvihnite a posuňte aplikáciu na EC2

Zdvihnutie a posun je najrýchlejšia migrácia starších aplikácií do cloudu a využitie výhod flexibility a nákladov cloudových platforiem. V tomto prípade začneme nasadením WordPress enginu a jeho databázy do jedného VM. Klienti sa pripoja priamo k VM.

Wallix

Vytvorte VPC

Pred pokračovaním vo vytváraní VM musíme najskôr vytvoriť sieťové prostriedky:

  • Privátna sieť (alebo VPC)
  • Internetová brána pre tento VPC
  • Podsieť používajúca internetovú bránu

Spoločnosť Awless zobrazí výzvu na nájdenie chýbajúcich parametrov s automatickým dokončením. Tu použijeme kombináciu oboch poskytnutých (param = hodnota) a vyzvané parametre:

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

> úžasné vytvoriť internetovú bránu

[OK] id = igw-1234567

> strašne pripojiť internetovú bránu

Prosím zadajte (Ctrl + C pre ukončenie, Tab pre dokončenie):

internetgateway.id? [Tab]

internetgateway.id? igw-1234567

internetgateway.vpc? @wo [karta]

internetgateway.vpc? @ wordpress-vpc

Spoločnosť Awless predkladá osvedčené postupy na používanie názvov a nie ID zdrojov. Ako taký, @ názov-zdroja je identifikátor zdroja s názvom „názov-zdroja“.

Vytvorme verejnú podsieť na hosťovanie našej inštancie WordPress a pripojme smerovaciu tabuľku, ktorá smeruje internetový prenos na internetovú bránu VPC:

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

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

> neuveriteľné vytvoriť smerovateľný vpc = @ wordpress-vpc

> neuveriteľné pripojiť smerovateľnú podsieť = @ wordpress-public-subnet

Prosím zadajte (Ctrl + C pre ukončenie, Tab pre dokončenie):

routetable.id?[tab]

* vyberte ID routovacej tabuľky, ktorú ste vytvorili vyššie *

> neuveriteľné vytvoriť trasu cidr = 0.0.0.0 / 0

Prosím zadajte (Ctrl + C pre ukončenie, Tab pre dokončenie):

route.gateway? * ID internetovej brány, ktorú ste pripojili k VPC vyššie *

tabuľka trasy? * ID routovacej tabuľky, ktorú ste vytvorili vyššie *

Upozorňujeme, že každá akcia v aplikácii Awless je asi taká jednoduchá, ako len môže byť. Aj keď sa riadime komplexným prístupom krok za krokom, Awless nám umožňuje prejsť zdĺhavým procesom nastavenia infraštruktúry oveľa rýchlejšie ako pomocou grafickej konzoly alebo AWS CLI.

Vytvorte pár kľúčov SSH a skupinu zabezpečenia

Cloudová sieť je teraz pripravená. Pred vytvorením inštancie potrebujeme pár kľúčov SSH, aby sme sa k inštancii mohli pripojiť neskôr. V jednom príkaze Awless lokálne vygeneruje pár kľúčov SSH a zaregistruje ho na AWS:

> awless create keypair name = johnkey

Osvedčeným postupom je poskytnúť minimálny prístup k ľubovoľným zdrojom, takže budeme prijímať iba pripojenia HTTP zo všetkých sietí Internet a SSH z našej odchádzajúcej adresy IP. Za týmto účelom vytvoríme a nakonfigurujeme skupinu zabezpečenia:

> awless create securitygroup vpc = @ wordpress-vpc description = \ ”HTTP public + SSH access \” name = wordpress-secgroup 

> MY_IP = $ (awless whoami —ip-only)

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

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

Poskytnite aplikácii údaje používateľa AWS

Teraz poskytneme našu inštanciu WordPress prostredníctvom údajov používateľa AWS. Tu použijeme skript dostupný na GitHub:

> awless create instance subnet = @ wordpress-public-subnet keypair = johnkey name = wordpress-instance userdata = // raw.githubusercontent.com/zn3zman/AWS-WordPress-Creation/16a52aef4f618d558d61197df4e4eca4c015277f/WP-Setup.sharp-Setup.sh tajná skupina

Môžeš použiť strasna show získať informácie o akomkoľvek zdroji, napríklad verejnej adrese IP našej inštancie WordPress:

> úžasné ukážka inštancie wordpressu

Môžete sa pripojiť k adrese IP z výstupu príkazu, aby ste získali prístup k službe WordPress (aj keď na správne zabezpečenie inštancie budete možno musieť počkať niekoľko minút).

WordPress Foundation

V predvolenom nastavení vytvorí program Awless typ t2.micro (1 vCPU, 1 GB RAM) pomocou systému Amazon Linux. Predvolené hodnoty môžete aktualizovať pomocou strašná konfiguračná sada:

> neuveriteľná konfiguračná sada instance.type m4.large 

> UBUNTU_AMI = $ (neuveriteľné hľadané obrázky kanonické: ubuntu —id-only -silent)

> neuveriteľná konfiguračná sada instance.image $ UBUNTU_AMI

Do tohto bodu sme vytvorili niekoľko zdrojov. Použitím strašný zoznam, môžeme uviesť zoznam používateľov, inštancií, podsietí a všetkých ostatných typov zdrojov (samozrejme za predpokladu, že váš profil AWS má dostatočné práva). Napríklad môžeme uviesť zoznam inštancií:

> úžasné príklady zoznamu 

| ID ▲ | ZÓNA | NÁZOV | UPTIME |

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

| i-00268db26b0d0393c | us-west-1c | inštancia wordpress | 57 minút |

[...]

Awless poskytuje výkonnú funkciu, ktorá umožňuje ľahké pripojenie k inštanciám pomocou SSH. V zákulisí Awless automaticky získa adresu IP inštancie, uhádne používateľské meno a spojí sa s párom klávesov, ktorý sme vytvorili predtým:

> strašná inštancia ssh wordpress

Ak chcete odstrániť inštanciu WordPress, môžete spustiť awless delete instance id = @ wordpress-instance. Môžete to urobiť hneď, pretože v ďalšej výzve vytvoríme pokročilejšie nasadenie.

Ako používať šablóny Awless

Všetky kroky v tejto výzve možno opísať ako postupnosť príkazov Awless, kde sa výsledky predchádzajúcich príkazov (napríklad ID internetovej brány) používajú ako vstupy do nasledujúcich príkazov. Pretože program Awless poskytuje vstavaný šablónový systém, môžete celú výzvu 1 zapuzdriť do šablóny a spustiť pomocou:

> úžasné spustenie //raw.githubusercontent.com/wallix/awless-templates/bcd0dd41b1524eeac1e53d12b2998bc56689c517/simple_wordpress_infra.aws

Awless ponúka výkonnú funkciu, ktorá vám umožní vrátiť väčšinu zmien použitých v infraštruktúre AWS. Celú infraštruktúru vytvorenú šablónou môžete napríklad odstrániť jediným príkazom: awless revert revert-id. Aby som našiel dané reverzne-id, hrozný log uvádza zoznam všetkých príkazov predtým použitých v cloudovej infraštruktúre s ich výstupom a identifikáciou:

> hrozné log # nájdite ID, ktoré chcete vrátiť späť > neskutočný návrat 01BM6D1YRZ5SSN5Z09VEEGN0HV

Výzva 2: Využívajte služby spravované AWS

Naše predchádzajúce nasadenie je funkčné, ale dosť remeselné. Náš blog je založený na jednej inštancii v jednej zóne dostupnosti (AZ). Teraz chceme vytvoriť vysoko dostupný blog s nástrojom na vyrovnávanie zaťaženia, dvoma inštanciami v rôznych AZ a replikovanou databázou, ktorú zdieľajú naše inštancie. Namiesto spustenia vlastnej databázy v inštancii použijeme AWS RDS, spravovanú službu Amazonu pre databázy SQL. Používanie spravovanej služby poskytuje mnoho výhod vrátane klastrovania, spravovaného zabezpečenia a záloh.

Wallix

Aby sme mali vysoko dostupné zdroje, musíme ich distribuovať do podsietí v rôznych zónach dostupnosti (AZ) a vyvážiť zaťaženie pomocou Elastic Load Balancing.

Wallix

Pre túto výzvu vytvoríme nasledovné:

  • Jeden nástroj na vyrovnávanie zaťaženia na rozloženie zaťaženia medzi inštanciami
  • Dve verejné podsiete, ktoré je možné priradiť k nástroju na vyrovnávanie zaťaženia otočenému k internetu
  • Dve súkromné ​​podsiete v rôznych AZ (napr. Us-východ-1a, us-východ-1e) na hosťovanie inštancií
  • Jedna skupina s automatickým škálovaním na správu škálovania inštancií WordPress
  • Jedna brána NAT v jednej verejnej podsieti, ktorá umožňuje odchádzajúce volania na zabezpečenie inštancií
  • Jedna verejná pevná IP (elastická IP) pre bránu NAT
  • Jeden RDS pre inštanciu MariaDB sa automaticky replikoval v súkromných podsieťach

Túto infraštruktúru vybudujeme spustením šablón Awless. Prvá šablóna vytvára podsiete a smerovanie. The {diera} notácia umožňuje dynamické vyplnenie parametrov počas chodu šablóny. The $ referencia notácia umožňuje spätné referencie vytvorených prostriedkov.

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