Nu ți-ar plăcea să poți flutura pur și simplu o baghetă, iar straturile de resurse din contul tău AWS ar proveni brusc – și magic – la o viață perfect configurată, gata să răspundă nevoilor complexe de infrastructură?

Dacă aveți deja experiență cu AWS, atunci știți cât de greu poate fi să lucrați prin pagină web după pagină web în consola de administrare Amazon pe măsură ce furnizați manual servicii. Și chiar și AWS CLI – care este un pas uriaș – poate adăuga complexitatea și efortul propriu la mix.

Asta nu înseamnă că AWS în sine nu abordează problema cu propria lor clasă de instrumente puternice de orchestrație, inclusiv CloudFormation și Serviciul lor Elastic Kubernetes (lucru pe care îl abordez pe larg în cursul meu „Folosind Docker pe AWS” la Pluralsight). Dar niciuna dintre aceste opțiuni nu trăiește atât de aproape de infrastructura dvs. existentă – sau folosește un mod de operare la fel de familiar ca Ansible.

Dacă utilizați deja Ansible pentru operațiunile dvs. locale, conectarea acestuia la contul dvs. AWS poate fi uneori cea mai rapidă și nedureroasă modalitate de a migra operațiunile în cloud.

Înțelegerea avantajului Ansible / AWS

Cartea mea “Gestionați resursele AWS utilizând Ansible„- din care este extras acest articol – este conceput pentru a vă introduce rapid în aplicarea lui Ansible declarativ abordare a lucrului cu resurse AWS. Posibilitatea de a „declara” rezultatele precise ale configurației dorite și apoi de a le produce obținând Ansible să citească o carte de joc este bagheta magică a Ansible. Când este planificat corespunzător, este uimitor cât de simplu poate fi să executați implementări AWS complexe, stratificate.

Înainte de a lansa un simplu manual Ansible „Hello World”, să ne asigurăm mai întâi că aveți un mediu de lucru configurat corespunzător prin care Ansible poate comunica cu toți noii săi prieteni din contul dvs. AWS.

Pregătirea unui mediu local

După cum probabil știți deja, Ansible este un instrument de orchestrare care vă permite să scrieți text simplu carte de joc fișiere care declara profilul software și starea ideală pe care doriți să o aplicați pe un server țintă. Aceste servere – cunoscute sub numele de gazde – pot fi furnizate pentru aproape orice sarcină digitală pe care vi-o puteți imagina, folosind aproape orice combinație de software de aplicații și rulând pe aproape orice platformă.

În vremurile bune, când un playbook era rulat pe un server fizic, Ansible folosea o conexiune SSH existentă pentru a se conecta în siguranță la gazda de la distanță și pentru a construi aplicația. Dar asta nu va funcționa pentru sarcinile de lucru AWS. Vedeți, deoarece instanțele EC2 și alte infrastructuri pe care doriți să le lansați nu există încă, nu pot exista conexiuni SSH „existente”. În schimb, Ansible va folosi Boto 3 – setul de dezvoltare software (sau SDK) utilizat de AWS care permite codului Python să comunice cu API-ul AWS.

Utilizarea AWS CLI pentru a conecta Ansible

Nu trebuie să știi cum funcționează toate acestea, dar trebuie să fie acolo, așa că poate sa muncă. Din acest motiv, veți instala interfața liniei de comandă AWS (CLI). Nu vom folosi CLI în sine pentru nimic important, dar instalarea acestuia ne va oferi toate dependențele de care vom avea nevoie. Puteți afla cum să faceți acest lucru să funcționeze pe cea mai recentă versiune a sistemului de operare pe care îl utilizați din Pagina de documentare AWS.

Lucrul cu managerul de pachete Python, PIP, este un mod popular de a face toate acestea. Iată cum ați instala PIP în sine și apoi AWS CLI pe o mașină Ubuntu:

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

Ar trebui să observ că, în timp ce scriu acest lucru, Python 2 este încă în viață … dar doar doar. Deci, uneori, ar putea exista încă versiuni separate Python 2 și Python 3 instalate pe sistemul dvs. Deoarece Python 2 va fi în curând depreciat, probabil că nu va trebui să vă faceți griji cu privire la specificarea python3 sau pip3 cu comenzile dvs.: aceasta ar trebui să fie automată.

După instalarea CLI, rulați aws configure și introduceți ID-ul cheii de acces AWS și cheia de acces secret.

aws configure
cat .aws/credentials

Puteți obține chei din pagina Acreditările dvs. de securitate din AWS Management Console. Iată cum vor arăta aceste taste (nu primiți idei obraznice, acestea nu sunt valabile):

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

Rețineți că o pereche de chei emise utilizatorului root al contului dvs. AWS oferă acces complet la întregul dvs. cont AWS. Oricine deține acele acreditări ar putea repede să plătească șase sau chiar șapte taxe pentru servicii, așa să fie foarte aveți grijă cum le folosiți și le păstrați. În mod ideal, ar fi mai bine să vă limitați expunerea la risc prin crearea unui utilizator administrator în serviciul AWS Identify and Access Management (IAM) cu puteri limitate și folosind o cheie emisă utilizatorului respectiv.

În orice caz, de ce fac asta? Valoarea populării fișierului meu de acreditări AWS este că Ansible este suficient de inteligent pentru a-l căuta și, dacă nu există alte chei de autentificare disponibile în mediul de sistem, le va folosi. În curând veți vedea cât de convenabil va fi. Cu toate acestea, ar trebui să fiți conștienți de alte modalități de gestionare a autentificării pentru cărțile de joc Ansible, cum ar fi utilizarea ansible-seif sau prin crearea și apoi invocarea unui fișier aws_keys.yml. Dar un lucru pe care cu siguranță NU ar trebui să-l faceți este să codificați tastele din fișierele din playbook – mai ales dacă intenționați să le împingeți către un depozit online precum GitHub. Voi testa rapid CLI-ul pentru a mă asigura că ne putem conecta corect la AWS. Această comandă simplă va afișa toate gălețile S3 pe care le-am avut în acest cont.

aws s3 ls

Acum suntem gata să instalăm ansible. Voi merge cu pip3 pentru asta. Aș putea folosi depozitul obișnuit Ubuntu apt la fel de ușor, dar cel mai probabil va instala o versiune ceva mai veche. În funcție de conexiunea la rețea, va dura un minut sau două, dar o să omit majoritatea.

$ pip3 install ansible

Voi confirma că este instalat corect executând ansible –version. Aceasta ne arată versiunea care a fost construită, că modulele Ansible configurate vor fi, în mod implicit, salvate în oricare dintre aceste două locații din sistemul de fișiere, că alte module ar fi disponibile aici și – cel mai important – că executabilul Ansible este localizat în directorul / local / bin / de sub directorul de acasă al utilizatorului meu. Apropo, utilizatorul meu de aici se numește ubuntu. Puteți vedea, de asemenea, că folosim o versiune frumoasă și actualizată a 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]

Încă un pas. După cum am menționat mai devreme, Ansible se va conecta la AWS folosind boto SDK. Deci, va trebui să instalăm pachetele boto și boto 3. Voi merge și cu PIP și pentru acesta.

$ pip3 install boto boto3

Odată ce a fost adus la bord, vom fi gata să facem lucruri reale. Aceasta va începe în secțiunea următoare.

Testarea Ansible cu un Playbook simplu

Aceasta va fi o dovadă foarte simplă a demonstrației conceptuale. Voi crea câteva fișiere, vă voi conduce prin sintaxă și apoi îl voi declanșa. În primul rând, voi folosi orice editor de text simplu pentru a crea un gazde fişier. În mod normal, fișierul hosts îi spune Ansible unde poate găsi serverele la distanță pe care doriți să le provocați. Dar, din moment ce, în cazul AWS, resursele care vor fi gazdele noastre nu există încă, vom indica pur și simplu Ansible către localhost și boto va gestiona conexiunile din culise. Iată cum va arăta conținutul acelui fișier:

[local]
localhost

Apoi, voi crea un fișier playbook pe care îl voi numi test-ansible.yml. Extensia yml, desigur, indică faptul că acest fișier trebuie formatat folosind sintaxa limbajului de marcare YAML. După cum puteți vedea din textul fișierului pe care l-am lipit mai jos, acesta va începe cu trei liniuțe care marchează începutul fișierului și apoi cu o liniuță indentată care introduce un set de definiții. Valoarea „gazdelor” ar putea fi unul sau mai multe computere la distanță, dar, așa cum am spus, vom lăsa asta la latitudinea sistemului local pentru a ne da seama. Același lucru este valabil și pentru conexiunea noastră.

Următoarea secțiune include sarcini vrem ca Ansible să efectueze. Acesta va folosi modulul aws_s3 pentru crea o nouă găleată pe serviciul de stocare simplă Amazon S3 din regiunea us-est-1. Trebuie să îi dau acest nume urât, deoarece gălețile S3 necesită nume unice la nivel global – dacă un nume pe care îl alegeți se ciocnește cu oricare dintre nenumăratele milioane de nume care există deja, operațiunea va eșua.

---
  - name: Test s3
    hosts: local
    connection: local

    tasks:
      - name: Create new bucket
        aws_s3:
          bucket: testme817275b
          mode: create
          region: us-east-1

Rulez playbook-ul apelând comanda ansible-playbook folosind -i pentru a specifica fișierul hosts și apoi arătând spre fișierul test.yml. Ansible ar trebui să ne ofere un feedback în doar un moment sau două. Dacă avem succes, veți vedea „0” ca valoare „eșuat” și cel puțin „1” ca valoare „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 

Dacă îmi verific din nou lista de găleți, ar trebui – și fac – să o văd pe cea nouă:

$ 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

Aceasta este o introducere foarte scurtă pentru crearea unui mediu Ansible. Am văzut cum utilizarea Ansible cu resursele furnizate automat de Amazon va funcționa diferit decât ar fi cu gazdele tradiționale Ansible. Veți avea nevoie de un set diferit de instrumente de autentificare și control al inventarului. Am parcurs procesul de configurare a unui mediu Ansible și conectarea acestuia la AWS, apoi a rulat un simplu manual. Scurt și dulce.

Acest articol vine din cartea mea “Gestionați resursele AWS utilizând AnsibleExistă mai multe bunătăți tehnologice – sub formă de cărți, cursuri și articole – disponibile pe pagina mea site-ul web, bootstrap-it.com.