Besprijekoran vodič: Isprobajte pametniji CLI za AWS

Henri Binsztok glavni je direktor za inovacije u tvrtki Wallix i sukreator projekta otvorenog koda Awless.

Kad se oblak odnosio samo na virtualne strojeve, alati poput Chefa ili Lutke pomogli su nam da lako pripremimo VM-ove. Važno je bilo samo osigurati instance koje su sadržavale sav potreban kod i podatke. Ali sada kada se Amazon Web Services povećao na više od 90 usluga, interakcija s AWS API-om postaje glavni dio posla.

Kako bismo trebali upravljati AWS infrastrukturom i koja sučelja trebamo koristiti? Većina početnika započinje s AWS Console, zadanim GUI-jem, dok iskusni sysadmini uglavnom preferiraju sučelje naredbenog retka (CLI). Problem je što AWS CLI nije prilagođen korisniku. Budući da integrira cijeli AWS API, izlaže ogromnu površinu u smislu naredbi, zastavica i opcija.

Awless se rađa iz naše potrebe za brzim, snažnim i jednostavnim CLI-jem za upravljanje AWS-om. Uz Awless možete stvoriti i pokrenuti AWS infrastrukturu, počevši od nule, i uvijek dobiti čitljiv izlaz (i za ljude i za programe), istražiti i ispitati sve resurse u oblaku (čak i izvan mreže), povezati se s instancama i stvoriti, ažurirati i izbriši resurse u oblaku. Osim pojedinih naredbenih redaka, Awless podržava predloške koji omogućuju višu razinu automatizacije. Na kraju, ali ne najmanje važno, Awless želi osigurati pametne zadane postavke i najbolje sigurnosne prakse.

Budući da postoji toliko mnogo AWS usluga, često je važno pronaći i prikazati hijerarhiju usluga iz naredbenog retka. Usluge možemo grupirati prema funkcionalnostima - poput računanja i baze podataka. No, iscrpno prolaziti kroz svaku od njih zamorno je, jer od ovog pisanja postoji ne manje od 15 usluga oko pohrane i baze podataka, ne računajući četiri usluge migracije podataka i devet usluga analitike koje su izravno povezane s upotrebom podataka.

Lakše grupiramo usluge prema pripravnosti za oblak. U ovom ćemo članku detaljno objasniti kako koristiti Awless za stvaranje i upravljanje resursima u oblaku za stvarni slučaj upotrebe, postavljanje WordPress instanci spremnih za proizvodnju. Koristit ćemo sljedeće AWS resurse:

  1. VM usluge EC2 (Elastic Compute Cloud) i ELB (Elastic Load Balancing);
  2. Usluge visoke razine koje se izvode u VM-ovima, ali kojima upravlja AWS, poput RDS (usluga relacijske baze podataka) ili ElastiCache (za redove čekanja);
  3. Usluge bez poslužitelja koje se izvode u VM-ovima s više stanara, kao što su S3 (pohrana objekata) ili Lambda (izvršavanje jedne funkcije).
Wallix

Započnite s Awlessom

Prijavite se za AWS i stvorite prvi račun s AdministratorAccesspravima. Pažljivo zabilježite svoj pristupni i tajni ključ.

Instalirajte Awless

Awless je dostupan na GitHubu . Pružamo unaprijed izgrađene binarne datoteke i pakete Homebrew za MacOS:

>brew tap wallix/awless 

>brew install awless

Možete li provjeriti je li Awless pravilno instaliran pokretanjem:

>awless version

Awless je oblikovan po uzoru na popularne alate naredbenog retka poput Gita. Većina naredbi je u obliku:

>awless verb [entity] [parameter=value ...]

Ovaj će članak dati pregled od 360 stupnjeva stvarnih proizvodnih opterećenja na AWS-u, počevši od nule. Radi jasnoće izostavljamo sve korake potvrde i neke izlazne korake, jer Awless uvijek traži potvrdu naredbi koje stvaraju, ažuriraju ili brišu resurse.

Prvi koraci s Awlessom

Prvu naredbu Awless možemo izdati navođenjem naših virtualnih privatnih oblaka (VPC). Budući da je ovo naše prvo pokretanje, morat ćemo unijeti neke potrebne podatke za konfiguriranje Awless:

>awless list vpcs

Welcome to awless! Resolving environment data...

Please choose an AWS region:

ap-northeast-1, ap-northeast-2, ap-south-1, ap-southeast-1, ap-southeast-2, ca-central-1, cn-north-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

Value ? > us-west-2

Syncing region ‘us-west-2’...

Cannot resolve AWS credentials (AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY) Please enter access keys and choose a profile name (stored at /Users/john/.aws/credentials):

AWS Access Key ID? AKIAIINZQI7WIEXAMPLE

AWS Secret Access Key? hYWZBVOusePEPSr5PkscplskB84fjbgUEXAMPLE

Choose a profile name? admin

✓ /Users/john/.aws/credentials created

✓ Credentials for profile ‘admin’ stored successfully

All done. Enjoy!

You can review and configure awless with `awless config`.

Now running: awless list vpcs

|     ID ▲     | NAME | DEFAULT |   STATE   |     CIDR      |

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

| vpc-1d1df679 |      | true    | available | 172.31.0.0/16 |

Stvorite korisnika AWS-a

Sada ćemo koristiti Awless za stvaranje novog korisnika AWS-a i davanje dovoljnih prava pomoću administratorskog profila. Izrađujemo korisnika Ivana i njegov pristupni ključ:

>awless create user name=john 

>awless create accesskey user=john aws_access_key_id = AKIAIOSFODNN7EXAMPLE

aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

Do you want to save in your .aws/credentials? (y/n) y

Entry name in .aws/credentials? [default] john

Sad kad John postoji, treba mu niz dozvola. Dat ćemo Johnu puni pristup uslugama EC2, RDS, Auto Scaling, CloudFront i S3 koje ćemo koristiti u ovom članku:

>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

Sad kad je John potpuno funkcionalni korisnik, prebacit ćemo se na njegov profil za sljedeće korake:

>awless config set aws.profile john

Upotrijebit ćemo AWS za postavljanje visoko dostupne, upravljane implementacije WordPressa, kombinirajući VM-ove, upravljane usluge i usluge bez poslužitelja. Naš glavni cilj je prikazan u nastavku. Morat ćemo se pozabaviti s tri "devops izazova" da bismo ga postigli, koristeći usluge infrastrukture AWS, upravljane usluge i usluge bez poslužitelja.

Wallix

Izazov 1: Podignite i prebacite aplikaciju na EC2

Podizanje i pomicanje je najbrža migracija naslijeđenih aplikacija u oblak i iskoristi fleksibilnost i troškovne prednosti platformi u oblaku. U ovom ćemo slučaju započeti s postavljanjem WordPress motora i njegove baze podataka u jedan VM. Klijenti će se izravno povezati s VM-om.

Wallix

Stvorite VPC

Prije nego što nastavimo s izradom VM-a, prvo moramo stvoriti mrežne resurse:

  • A private network (or VPC)
  • An Internet gateway for this VPC
  • A subnet using the Internet gateway

Awless will prompt for any missing parameters with autocompletion. Here we use a mix of both provided (param=value) and prompted parameters:

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

>awless create internetgateway

[OK] id=igw-1234567

>awless attach internetgateway

Please specify (Ctrl+C to quit, Tab for completion):

internetgateway.id? [Tab]

internetgateway.id? igw-1234567

internetgateway.vpc? @wo[Tab]

internetgateway.vpc? @wordpress-vpc

Awless puts forward the best practice to use names rather than resource IDs. As such, @resource-name is the identifier of the resource named “resource-name.”

Let’s create a public subnet to host our WordPress instance, and attach a route table that routes the Internet traffic to the VPC’s Internet gateway:

>awless create subnet cidr=10.0.0.0/24 [email protected] name=wordpress-public-subnet 

>awless update subnet [email protected] public=true

>awless create routetable [email protected]

>awless attach routetable [email protected]

        Please specify (Ctrl+C to quit, Tab for completion):

        routetable.id?[tab]

        *select the ID of the routetable you created above*

>awless create route cidr=0.0.0.0/0

        Please specify (Ctrl+C to quit, Tab for completion):

route.gateway? *the ID of the internet gateway you attached to the VPC above*

route.table? *the ID of the routetable you created above*

Note that each action in Awless is about as simple as it can get. Although we follow a comprehensive step-by-step approach, Awless allows us to get through the tedious process of setting up an infrastructure much faster than with the graphical console or the AWS CLI.

Create an SSH keypair and a security group

The cloud network is now ready. Before creating the instance, we need an SSH key pair, to connect to the instance later. In a single command, Awless generates an SSH key pair locally and registers it on AWS:

>awless create keypair name=johnkey

A best practice is to give minimal access to any resource, so we will only accept HTTP connections from all the Internet and SSH from our outgoing IP address. To do that, we create and configure a security group:

>awless create securitygroup [email protected] description=\”HTTP public + SSH access\” name=wordpress-secgroup 

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

>awless update securitygroup [email protected] inbound=authorize cidr=$MY_IP/32 portrange=22

>awless update securitygroup [email protected] inbound=authorize cidr=0.0.0.0/0 portrange=80

Provision the application with AWS user data

We will now provision our WordPress instance through AWS user data. Here we will use the script available on GitHub:

>awless create instance [email protected] keypair=johnkey name=wordpress-instance userdata=//raw.githubusercontent.com/zn3zman/AWS-WordPress-Creation/16a52aef4f618d558d61197df4e4eca4c015277f/WP-Setup.sh [email protected]

You can use awless show to get information about any resource, such as the public IP address of our WordPress instance:

>awless show wordpress-instance

Možete se povezati s IP adresom iz izlaza naredbe da biste pristupili svojoj WordPress usluzi (iako ćete možda trebati pričekati nekoliko minuta da bi instanca bila pravilno pripremljena).

WordPress Foundation

Prema zadanim postavkama, Awless će stvoriti tip t2.micro (1 vCPU, 1 GB RAM-a) koristeći Amazon Linux. Zadane vrijednosti možete ažurirati pomoću awless config set:

>awless config set instance.type m4.large 

>UBUNTU_AMI=$(awless search images canonical:ubuntu —id-only —silent)

>awless config set instance.image $UBUNTU_AMI

Do ovog trenutka izgradili smo nekoliko resursa. Korištenjem awless listmožemo navesti korisnike, instance, podmreže i sve druge vrste resursa (pod uvjetom da vaš AWS profil naravno ima dovoljna prava). Na primjer, možemo navesti instance:

>awless list instances 

|       ID ▲        |   ZONE   |        NAME        | UPTIME  |

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

|i-00268db26b0d0393c|us-west-1c| wordpress-instance | 57 mins |

[...]

Awless nudi moćnu značajku koja omogućuje jednostavno povezivanje na instance s SSH-om. Iza kulisa, Awless će automatski dobiti IP adresu instance, pogoditi korisničko ime i povezati se s parom ključeva koje smo ranije stvorili:

>awless ssh wordpress-instance

If you want to delete the WordPress instance, you can run awless delete instance [email protected]. You can do it now, as we will create a more advanced deployment in the next challenge.

How to use Awless templates

All the steps in this challenge can be described as a sequence of Awless commands, where the results of previous commands (for instance, the ID of the Internet gateway) are used as inputs to subsequent commands. Because Awless provides a built-in templating system, you could encapsulate all of Challenge 1 in a template and run it with:

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

Awless offers a powerful feature that enables you to revert most changes applied to an AWS infrastructure. For instance, you can delete the whole infrastructure created by a template in a single command: awless revert revert-id. To find a given revert-id, awless log lists all of the commands previously applied to the cloud infrastructure, with both their output and their ID:

>awless log # find the ID to revert >awless revert 01BM6D1YRZ5SSN5Z09VEEGN0HV

Challenge 2: Use AWS managed services

Naša prethodna implementacija je funkcionalna, ali prilično zanatska. Naš blog pokreće jedan primjerak u jednoj zoni dostupnosti (AZ). Sada želimo stvoriti visoko dostupan blog, s uravnoteživačem opterećenja, dva primjerka u različitim AZ-ima i repliciranom bazom podataka koju dijele naše instance. Umjesto da u instanci pokrenemo vlastitu bazu podataka, koristit ćemo AWS RDS, Amazonovu uslugu kojom upravljaju baze podataka SQL. Korištenje upravljane usluge pruža brojne prednosti, uključujući grupiranje, upravljanu sigurnost i sigurnosne kopije.

Wallix

Da bismo imali visoko dostupne resurse, moramo ih distribuirati u podmreže u različitim zonama dostupnosti (AZ) i uravnotežiti opterećenje putem elastičnog uravnoteženja opterećenja.

Wallix

Za ovaj izazov stvorit ćemo sljedeće:

  • Jedan uravnoteživač opterećenja za raspodjelu opterećenja između instanci
  • Dvije javne podmreže za povezivanje s uravnoteživačem opterećenja okrenutom ka Internetu
  • Dvije privatne podmreže u različitim AZ-ima (npr. Us-istok-1a, SAD-istok-1e) za smještaj instanci
  • Jedna grupa za automatsko skaliranje za upravljanje skaliranjem WordPress instanci
  • Jedan NAT pristupnik u jednoj javnoj podmreži kako bi omogućio odlazne pozive za omogućavanje instanci
  • Jedan javni fiksni IP (Elastični IP) za NAT pristupnik
  • Jedna instanca RDS-a za MariaDB automatski se replicira u privatne podmreže

Izgradit ćemo ovu infrastrukturu izvođenjem predložaka Awless. Prvi predložak stvara podmreže i usmjeravanje. {hole}Notacija omogućava parametri biti popunjena dinamički tijekom trčanja predloška. $referenceZapis omogućava povratak reference stvorenih resursa.