Sådan bruges Ansible til at styre dine AWS-ressourcer

Ville du ikke elske at være i stand til simpelthen at bølge en stav og lag af ressourcer i din AWS-konto pludselig - og magisk - ville komme til perfekt konfigureret liv, klar til at imødekomme dine komplekse infrastrukturbehov?

Hvis du allerede har erfaring med AWS, ved du, hvor meget det kan være at arbejde gennem websiden efter websiden i Amazon-administrationskonsollen, når du manuelt leverer tjenester. Og selv AWS CLI - som er et stort skridt op - kan tilføje sin egen kompleksitet og indsats til blandingen.

Det er ikke at sige, at AWS ikke selv løser problemet med deres egen klasse af kraftfulde orkestreringsværktøjer, inklusive CloudFormation og deres Elastic Kubernetes Service (noget jeg adresserer udførligt i mit "Brug af Docker på AWS" -kursus på Pluralsight). Men ingen af ​​disse muligheder lever ret så tæt på din eksisterende infrastruktur - eller bruger en velkendt måde at operere på - som Ansible.

Hvis du allerede bruger Ansible til dine lokale operationer, kan tilslutning af det til din AWS-konto undertiden være den hurtigste og mest smertefri måde at migrere operationer til skyen på.

Forståelse af Ansible / AWS-fordelen

Min bog "Manage AWS Resources Using Ansible" - hvorfra denne artikel er uddraget - er designet til hurtigt at introducere dig til at anvende Ansible's deklarative tilgang til at arbejde med AWS-ressourcer. At være i stand til at "erklære" de nøjagtige konfigurationsresultater, du ønsker, og derefter producere dem ved at få Ansible til at læse en playbook er Ansible's tryllestav. Når det er ordentligt planlagt, er det forbløffende, hvor simpelt det kan være at udføre komplekse, lagdelte AWS-implementeringer.

Før vi lancerer en simpel "Hello World" Ansible playbook, lad os først sørge for, at du har et korrekt konfigureret arbejdsmiljø, hvorigennem Ansible kan kommunikere med alle sine nye venner på din AWS-konto.

Forberedelse af et lokalt miljø

Som du sikkert allerede ved, er Ansible et orkestreringsværktøj, der giver dig mulighed for at skrive playbook- filer i almindelig tekst , der erklærer softwareprofilen og den ideelle tilstand, du gerne vil anvende på en målserver. Disse servere - kendt som værter - kan tilvejebringes til næsten enhver digital arbejdsbyrde, du kan forestille dig, ved hjælp af næsten enhver kombination af applikationssoftware og kører på næsten enhver platform.

I de gode gamle dage, hvor en playbook blev kørt mod en fysisk server, ville Ansible anvende en eksisterende SSH-forbindelse for sikkert at logge ind på den eksterne vært og gå omkring med at opbygge din applikation. Men det fungerer ikke for AWS-arbejdsbelastninger. Ser du, fordi de EC2-forekomster og anden infrastruktur, du vil starte endnu ikke findes, kan der ikke være nogen "eksisterende" SSH-forbindelser. I stedet bruger Ansible Boto 3 - softwareudviklingssættet (eller SDK), der bruges af AWS, der gør det muligt for Python-kode at kommunikere med AWS API.

Brug af AWS CLI til Connect Ansible

Du behøver ikke vide, hvordan alt det fungerer, men det skal være der, så det kan fungere. Af den grund skal du installere AWS kommandolinjegrænseflade (CLI). Vi bruger ikke selve CLI til noget vigtigt, men installation af det giver os alle de afhængigheder, vi har brug for. Du kan finde ud af, hvordan du får dette til at fungere i den nyeste version af det OS, du bruger, fra AWS-dokumentationssiden.

At arbejde med Python-pakkehåndtering, PIP, er en populær måde at få alt dette gjort på. Sådan installerer du PIP selv og derefter AWS CLI på en Ubuntu-maskine:

sudo apt update sudo apt install python3-pip pip3 install awscli

Jeg skal bemærke, at mens jeg skriver dette, lever Python 2 stadig ... men kun lige. Så der kan undertiden stadig være separate Python 2 og Python 3 versioner installeret på dit system. Da Python 2 snart vil blive forældet, behøver du sandsynligvis ikke bekymre dig om at angive python3 eller pip3 med dine kommandoer: det skal være automatisk.

Når CLI er installeret, skal du køre aws configureog indtaste dit AWS-adgangsnøgle-id og hemmelige adgangsnøgle.

aws configure cat .aws/credentials

Du kan få nøgler fra siden Sikkerhedsoplysninger i AWS Management Console. Sådan ser disse nøgler ud (får ikke uartige ideer, disse er ikke gyldige):

AccessKeyId: AKIALNZTQW6H3EFBRLHQ SecretAccessKey: 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

Husk bare, at et par nøgler udstedt til rodbrugeren af ​​din AWS-konto giver fuld adgang til hele din AWS-konto. Enhver, der har disse legitimationsoplysninger, vil hurtigt være i stand til at opkræve seks og endda syv figurgebyrer, så vær meget forsigtig med, hvordan du bruger og opbevarer dem. Ideelt set ville det være bedre for dig at begrænse din risikoeksponering ved at oprette en adminbruger i AWS Identify and Access Management (IAM) -tjenesten med begrænsede beføjelser og bruge en nøgle udstedt til den pågældende bruger.

Hvorfor gør jeg det under alle omstændigheder? Værdien af ​​at udfylde min AWS-legitimationsfil er, at Ansible er smart nok til at lede efter den, og hvis ingen andre godkendelsesnøgler er tilgængelige i systemmiljøet, bruger den disse. Du vil snart se, hvor mægtigt praktisk det vil være. Du skal dog være opmærksom på andre måder at administrere godkendelse af Ansible playbooks på, f.eks. Ved hjælp af ansible-vault eller ved at oprette og derefter påkalde en aws_keys.yml-fil. Men en ting, du absolut ikke bør gøre, er at kode nøglerne i dine playbook-filer - især hvis du planlægger at skubbe dem til et online arkiv som GitHub. Jeg vil hurtigt teste CLI for at sikre, at vi korrekt kan oprette forbindelse til AWS. Denne enkle kommando viser alle S3-skovle, jeg tilfældigvis har inden for denne konto.

aws s3 ls

Vi er nu klar til at installere ansible. Jeg går med pip3 til det. Jeg kunne bruge det almindelige Ubuntu apt-arkiv lige så let, men det vil sandsynligvis installere en lidt ældre version. Afhængigt af din netværksforbindelse tager det et minut eller to, men jeg springer det meste over.

$ pip3 install ansible 

Jeg bekræfter, at det er korrekt installeret ved at køre ansible --version. Dette viser os den version, der blev bygget, at konfigurerede Ansible-moduler som standard vil blive gemt på en af ​​disse to placeringer i filsystemet, at andre moduler vil være tilgængelige her og - vigtigst af alt - at den Ansible-eksekverbare fil er placeret i / local / bin / biblioteket under min brugers hjemmekatalog. Min bruger her kaldes forresten ubuntu. Du kan også se, at vi bruger en flot, opdateret version af Python 3.

$ ansible --version ansible 2.8.5 config file = None configured module search path = ['/home/ubuntu/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /home/ubuntu/.local/lib/python3.6/site-packages/ansible executable location = /home/ubuntu/.local/bin/ansible python version = 3.6.8 (default, Aug 20 2019, 17:12:48) [GCC 8.3.0] 

Et trin mere. Som jeg nævnte tidligere, vil Ansible oprette forbindelse til AWS ved hjælp af boto SDK. Så vi bliver nødt til at installere boto- og boto 3-pakkerne. Jeg går også med PIP til denne.

$ pip3 install boto boto3 

Når den ene er blevet bragt om bord, er vi klar til at få nogle rigtige ting gjort. Det begynder i næste afsnit.

Test af anvendelig med en simpel playbook

Dette bliver meget simpelt bevis på konceptdemo. Jeg opretter et par filer, leder dig gennem syntaksen og skyder den derefter op. Først og fremmest bruger jeg en hvilken som helst almindelig teksteditor til at oprette en værtsfil . Normalt fortæller værtsfilen Ansible, hvor den kan finde de eksterne servere, du vil tilvejebringe. Men da de ressourcer, der er vores værter endnu ikke findes i AWS, vil vi ganske enkelt pege Ansible til localhost, og boto håndterer forbindelser bag kulisserne. Sådan ser indholdet af den fil ud:

[local] localhost 

Derefter opretter jeg en playbook-fil, som jeg kalder test-ansible.yml. Yml-udvidelsen indikerer selvfølgelig, at denne fil skal formateres ved hjælp af YAML-markeringssprogssyntaks. Som du kan se fra den filtekst, jeg har indsat lige nedenfor, begynder det med tre bindestreger, der markerer starten på filen og derefter et indrykket strejke, der introducerer et sæt definitioner. Værdien af ​​"værter" kan være en eller flere fjerncomputere, men som jeg har sagt, overlader vi det til det lokale system at finde ud af. Det samme gælder for vores forbindelse.

Det næste afsnit indeholder de opgaver, vi ønsker, at Ansible skal udføre. Denne bruger aws_s3-modulet til at oprette en ny spand på Amazons S3 Simple Storage Service i us-øst-1-regionen. Jeg er nødt til at give det dette grimme navn, fordi S3 skovle kræver globalt unikke navne - hvis et navn, du vælger, kolliderer med et af de utallige millioner af navne, der allerede er derude, vil operationen mislykkes.

--- - name: Test s3 hosts: local connection: local tasks: - name: Create new bucket aws_s3: bucket: testme817275b mode: create region: us-east-1 

Jeg kører playbook ved at kalde ansible-playbook-kommandoen ved hjælp af -i for at specificere hosts-filen og derefter pege på test.yml-filen. Ansible burde give os feedback på bare et øjeblik eller to. Hvis det lykkes, ser du "0" som værdien af ​​"mislykkedes" og mindst "1" som værdien af ​​"ok".

$ ansible-playbook -i hosts test-ansible.yml PLAY [Test s3] ****************************************************** TASK [Create new bucket] ******************************************** changed: [localhost] PLAY RECAP ********************************************************** localhost: ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 

Hvis jeg tjekker min liste med skovle en gang til, skal jeg - og gøre - se den nye:

$ aws s3 ls 2018-12-30 15:19:24 elasticbeanstalk-us-east-1-297972716276 2018-10-12 04:09:37 mysite548.com 2019-09-24 15:53:26 testme817275b 

Det er en meget kort introduktion til opsætning af et Ansible-miljø. Vi så, hvordan brugen af ​​Ansible med Amazons automatisk tilvejebragte ressourcer vil fungere anderledes end det ville med traditionelle Ansible-værter. Du vil kræve et andet sæt godkendelses- og lagerstyringsværktøjer. Vi gik igennem processen med at oprette et Ansible-miljø og forbinde det til AWS og derefter køre en simpel playbook. Kort og sød.

Denne artikel kommer fra min bog "Manage AWS Resources Using Ansible". Der er mere teknologisk godhed - i form af bøger, kurser og artikler - tilgængelig på min hjemmeside, bootstrap-it.com.