Programování

Úžasný návod: Vyzkoušejte chytřejší rozhraní příkazového řádku pro AWS

Henri Binsztok je hlavním inovačním ředitelem společnosti Wallix a spolutvůrcem open source projektu Awless.

Když byl cloud jen o virtuálních strojích, nástroje jako Chef nebo Puppet nám pomohly snadno připravit naše virtuální počítače. Důležité bylo pouze zajistit instance, které obsahovaly veškerý požadovaný kód a data. Ale nyní, když se Amazon Web Services rozšířily na více než 90 služeb, stává se hlavní součástí práce interakce s AWS API.

Jak bychom měli spravovat infrastrukturu AWS a jaká rozhraní bychom měli používat? Většina začátečníků začíná s AWS Console, výchozím grafickým uživatelským rozhraním, zatímco ostřílení sysadminové obecně dávají přednost rozhraní příkazového řádku (CLI). Problém je v tom, že rozhraní AWS CLI není uživatelsky přívětivé. Protože integruje celé API AWS, vystavuje obrovskou plochu, pokud jde o příkazy, příznaky a možnosti.

Awless pochází z naší potřeby rychlého, výkonného a snadno použitelného rozhraní CLI pro správu AWS. S Awless můžete vytvářet a provozovat infrastrukturu AWS, počínaje od nuly, a vždy získat čitelný výstup (pro lidi i programy), prozkoumávat a dotazovat se na všechny cloudové zdroje (i offline), připojovat se k instancím a vytvářet, aktualizovat a odstranit cloudové zdroje. Kromě jednotlivých příkazových řádků podporuje Awless šablony, které umožňují vyšší úrovně automatizace. V neposlední řadě si Awless klade za cíl zajistit inteligentní výchozí hodnoty a osvědčené postupy zabezpečení.

Protože existuje tolik služeb AWS, je často důležité najít a zobrazit hierarchii služeb z příkazového řádku. Služby můžeme seskupovat podle funkcí - jako jsou výpočetní technika a databáze. Ale procházet každou z nich vyčerpávajícím způsobem je zdlouhavé, protože v době psaní tohoto článku existuje ne méně než 15 služeb kolem úložiště a databáze, nepočítaje čtyři služby migrace dat a devět analytických služeb, které přímo souvisejí s využitím dat.

Zjistili jsme, že je snazší seskupovat služby podle připravenosti na cloud. V tomto článku podrobně vysvětlíme, jak používat Awless k vytváření a správě cloudových prostředků pro skutečný případ použití, nasazení instancí WordPress připravených na produkci. Budeme používat následující zdroje AWS:

  1. Služby VM EC2 (Elastic Compute Cloud) a ELB (Elastic Load Balancing);
  2. Služby na vysoké úrovni, které běží ve virtuálních počítačích, ale jsou spravovány AWS, jako je RDS (Relational Database Service) nebo ElastiCache (pro fronty);
  3. Služby bez serveru, které běží na virtuálních počítačích s více nájemci, například S3 (úložiště objektů) nebo Lambda (provádění jedné funkce).
Wallix

Začněte s Awless

Zaregistrujte se na AWS a vytvořte si první účet u Přístup správce práva. Opatrně si poznamenejte svůj přístupový klíč a tajný klíč.

Nainstalujte si Awless

Awless je k dispozici na GitHub. Poskytujeme předem připravené binární soubory a Homebrew balíčky pro MacOS:

> vařit kohoutek wallix / awless 

> brew install awless

Správnost instalace Awless můžete zkontrolovat spuštěním:

> neuvěřitelná verze

Awless je modelován podle populárních nástrojů příkazového řádku, jako je Git. Většina příkazů má formu:

> neuvěřitelné sloveso [entita] [parametr = hodnota ...]

Tento článek poskytne 360stupňový přehled skutečných produkčních zátěží na AWS, počínaje od nuly. Kvůli jasnosti vynecháme všechna potvrzení a některé výstupní kroky, protože Awless vždy požádá o potvrzení příkazů, které vytvářejí, aktualizují nebo odstraňují prostředky.

První kroky s Awless

Náš první příkaz Awless můžeme vydat výpisem našich virtuálních privátních cloudů (VPC). Protože je to naše první spuštění, budeme muset zadat některá nezbytná data pro konfiguraci Awless:

> neuvěřitelný seznam vpcs

Vítejte na awless! Řešení dat prostředí ...

Vyberte prosím oblast AWS:

ap-severovýchod-1, ap-severovýchod-2, ap-jih-1, ap-jihovýchod-1, ap-jihový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

Synchronizace regionu „us-west-2“ ...

Nelze vyřešit pověření AWS (AWS_ACCESS_KEY_ID a AWS_SECRET_ACCESS_KEY) Zadejte přístupové klíče a vyberte název profilu (uložený na /Users/john/.aws/credentials):

ID přístupového klíče AWS? AKIAIINZQI7WIEXAMPLE

Tajný přístupový klíč AWS? hYWZBVOusePEPSr5PkscplskB84fjbgUEXAMPLE

Vyberte si profilové jméno? admin

✓ /Users/john/.aws/credentials created

✓ Přihlašovací údaje pro profil „správce“ byly úspěšně uloženy

Vše hotovo. Užívat si!

Můžete zkontrolovat a nakonfigurovat neuvěřitelně pomocí `awless config`.

Nyní běží: neuvěřitelný seznam vpcs

| ID ▲ | JMÉNO | VÝCHOZÍ | STÁT | CIDR |

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

| vpc-1d1df679 | | pravda | k dispozici | 172.31.0.0/16 |

Vytvořte uživatele AWS

Nyní použijeme Awless k vytvoření nového uživatele AWS a poskytneme mu dostatečná práva pomocí profilu správce. Vytvoříme uživatele Johna a jeho přístupový klíč:

> awless create user name = john 

> awless create accesskey user = john aws_access_key_id = AKIAIOSFODNN7EXAMPLE

aws_secret_access_key = wJalrXUtnFEMI / K7MDENG / bPxRfiCYEXAMPLEKEY

Chcete uložit do svých .aws / pověření? (y / n) y

Název záznamu v .aws / pověření? [výchozí] john

Nyní, když John existuje, potřebuje sadu oprávnění. Johnovi poskytneme plný přístup ke službám EC2, RDS, Auto Scaling, CloudFront a S3, které v tomto článku použijeme:

> 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

Nyní, když je John plně funkčním uživatelem, přepneme na jeho profil pro další kroky:

> awless config set aws.profile john

Pomocí AWS nastavíme vysoce dostupné, spravované nasazení WordPress, kombinující virtuální počítače, spravované a bezserverové služby. Náš hlavní cíl je na obrázku níže. Abychom toho dosáhli, budeme muset řešit tři „výzvy devops“, využívat služeb infrastruktury AWS, spravovaných služeb a služeb bez serveru.

Wallix

Úkol 1: Zvedněte a přesuňte aplikaci na EC2

Lift and shift je nejrychlejší migrace starších aplikací do cloudu a těží z flexibility a nákladových výhod cloudových platforem. V tomto případě začneme nasazením stroje WordPress a jeho databáze do jednoho virtuálního počítače. Klienti se připojí přímo k virtuálnímu počítači.

Wallix

Vytvořte VPC

Než budeme pokračovat ve vytváření virtuálních počítačů, musíme nejprve vytvořit síťové prostředky:

  • Soukromá síť (nebo VPC)
  • Internetová brána pro tento VPC
  • Podsíť využívající internetovou bránu

Awless vyzve k chybějícím parametrům s automatickým doplňováním. Zde používáme kombinaci obou poskytovaných (param = hodnota) a vyzvané parametry:

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

> neuvěřitelně vytvořit internetovou bránu

[OK] id = igw-1234567

> neuvěřitelně připojte internetovou bránu

Uveďte prosím (Ctrl + C pro ukončení, Tab pro dokončení):

internetgateway.id? [Záložka]

internetgateway.id? igw-1234567

internetgateway.vpc? @ dvě [karta]

internetgateway.vpc? @ wordpress-vpc

Awless předkládá osvědčené postupy pro používání jmen místo ID prostředků. Jako takový, @ název-zdroje je identifikátor zdroje s názvem „název-zdroje“.

Vytvořme veřejnou podsíť pro hostování naší instance WordPress a připojme směrovací tabulku, která směruje internetový provoz na internetovou 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

> awless create routetable vpc = @ wordpress-vpc

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

Uveďte prosím (Ctrl + C pro ukončení, Tab pro dokončení):

routetable.id?[tab]

* vyberte ID směrovatelné tabulky, kterou jste vytvořili výše *

> awless create route cidr = 0.0.0.0 / 0

Uveďte prosím (Ctrl + C pro ukončení, Tab pro dokončení):

route.gateway? * ID internetové brány, kterou jste připojili k VPC výše *

tabulka trasy? * ID routovací tabulky, kterou jste vytvořili výše *

Všimněte si, že každá akce v Awless je tak jednoduchá, jak jen může být. I když se řídíme komplexním přístupem krok za krokem, Awless nám umožňuje projít zdlouhavým procesem nastavení infrastruktury mnohem rychleji než pomocí grafické konzoly nebo AWS CLI.

Vytvořte pár klíčů SSH a skupinu zabezpečení

Cloudová síť je nyní připravena. Před vytvořením instance potřebujeme pár klíčů SSH, abychom se k instanci připojili později. V jediném příkazu Awless lokálně vygeneruje pár klíčů SSH a zaregistruje ho na AWS:

> awless create keypair name = johnkey

Osvědčeným postupem je poskytnout minimální přístup k jakémukoli prostředku, takže budeme přijímat pouze připojení HTTP ze všech Internetů a SSH z naší odchozí adresy IP. K tomu vytvoříme a nakonfigurujeme skupinu zabezpečení:

> 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 = autorizovat cidr = $ MY_IP / 32 portrange = 22

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

Poskytněte aplikaci uživatelské údaje AWS

Nyní poskytneme naši instanci WordPress prostřednictvím uživatelských dat AWS. Zde použijeme skript dostupný na GitHubu:

> 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.sharsh tajná skupina

Můžeš použít strašná show získat informace o jakémkoli zdroji, například veřejné IP adrese naší instance WordPress:

> awless show wordpress-instance

Můžete se připojit k IP adrese z výstupu příkazu, abyste získali přístup ke službě WordPress (i když možná budete muset počkat několik minut, než bude instance správně zřízena).

WordPress Foundation

Ve výchozím nastavení vytvoří Awless pomocí Amazon Linux typ t2.micro (1 vCPU, 1 GB RAM). Výchozí hodnoty můžete aktualizovat pomocí neuvěřitelná konfigurační sada:

> awless config set instance.type m4.large 

> UBUNTU_AMI = $ (neuvěřitelné vyhledávací obrázky kanonické: ubuntu —id-only –silent)

> awless config set instance.image $ UBUNTU_AMI

K tomuto bodu jsme vytvořili několik zdrojů. Použitím neuvěřitelný seznam, můžeme vypsat uživatele, instance, podsítě a všechny ostatní typy zdrojů (samozřejmě za předpokladu, že váš profil AWS má dostatečná práva). Například můžeme vypsat instance:

> neuvěřitelné instance seznamu 

| ID ▲ | ZÓNA | JMÉNO | UPTIME |

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

| i-00268db26b0d0393c | us-west-1c | instance WordPress | 57 minut |

[...]

Awless poskytuje výkonnou funkci, která umožňuje snadné připojení k instancím pomocí SSH. V zákulisí Awless automaticky získá IP adresu instance, uhodne uživatelské jméno a spojí se s párem klíčů, který jsme vytvořili dříve:

> awless ssh wordpress-instance

Chcete-li odstranit instanci WordPress, můžete spustit awless delete instance id = @ wordpress-instance. Můžete to udělat hned, protože v další výzvě vytvoříme pokročilejší nasazení.

Jak používat šablony Awless

Všechny kroky v této výzvě lze popsat jako posloupnost příkazů Awless, kde jsou výsledky předchozích příkazů (například ID internetové brány) použity jako vstupy do následujících příkazů. Protože Awless poskytuje integrovaný šablonový systém, můžete zapouzdřit všechny výzvy 1 v šabloně a spustit je pomocí:

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

Awless nabízí výkonnou funkci, která vám umožní vrátit většinu změn aplikovaných na infrastrukturu AWS. Můžete například odstranit celou infrastrukturu vytvořenou šablonou v jediném příkazu: awless revert revert-id. Najít dané revert-id, hrozný log seznam všech příkazů dříve použitých pro cloudovou infrastrukturu s jejich výstupem i ID:

> neuvěřitelný protokol # najít ID, které chcete vrátit > neuvěřitelný návrat 01BM6D1YRZ5SSN5Z09VEEGN0HV

Výzva 2: Využívejte služby AWS

Naše předchozí nasazení je funkční, ale docela řemeslné. Náš blog je poháněn jednou instancí v jedné zóně dostupnosti (AZ). Nyní chceme vytvořit vysoce dostupný blog s nástrojem pro vyrovnávání zatížení, dvěma instancemi v různých AZ a replikovanou databází sdílenou našimi instancemi. Namísto spuštění vlastní databáze v instanci použijeme AWS RDS, spravovanou službu Amazonu pro databáze SQL. Používání spravované služby poskytuje mnoho výhod včetně klastrování, spravovaného zabezpečení a záloh.

Wallix

Abychom měli vysoce dostupné zdroje, musíme je distribuovat v podsítích v různých zónách dostupnosti (AZ) a vyvážit zátěž pomocí Elastic Load Balancing.

Wallix

Pro tuto výzvu vytvoříme následující:

  • Jeden nástroj pro vyrovnávání zatížení k distribuci zátěže mezi instance
  • Dvě veřejné podsítě pro přidružení k nástroji pro vyrovnávání zatížení orientovanému na internet
  • Dvě soukromé podsítě v různých AZ (např. Us-východ-1a, us-východ-1e) k hostování instancí
  • Jedna skupina automatického škálování pro správu škálování instancí WordPress
  • Jedna brána NAT v jedné veřejné podsíti umožňující odchozí volání pro zřizování instancí
  • Jedna veřejná pevná IP (Elastic IP) pro bránu NAT
  • Jeden RDS pro instanci MariaDB se automaticky replikoval v soukromých podsítích

Tuto infrastrukturu vybudujeme spuštěním šablon Awless. První šablona vytváří podsítě a směrování. The {otvor} notace umožňuje dynamické vyplňování parametrů během běhu šablony. The $ reference notace umožňuje zpětné odkazy na vytvořené prostředky.