Hogyan lehet használni az AWS-erőforrások kezelését

Nem szeretné, ha egyszerűen pálcát tudna integetni, és az AWS-fiókjában lévő erőforrásrétegek hirtelen - és varázslatos módon - tökéletesen konfigurált életet nyernének, készen állva az összetett infrastrukturális igények kielégítésére?

Ha már rendelkezik tapasztalattal az AWS-szel kapcsolatban, akkor tudja, hogy mekkora fájdalmat okozhat az Amazon kezelői konzolban a weblap után a weboldal kezelése kézi szolgáltatásnyújtás közben. És még az AWS CLI is - ami hatalmas előrelépés - hozzáadhatja saját összetettségét és erőfeszítését a keverékhez.

Ez nem azt jelenti, hogy az AWS maga nem oldja meg a problémát a saját nagy teljesítményű hangszerelési eszközeivel, beleértve a CloudFormation-t és az Elastic Kubernetes Service szolgáltatást (amivel hosszasan foglalkozom a Pluralsight "Docker használata AWS-en" tanfolyamomon). De ezek a lehetőségek egyikük sem él olyan közel a meglévő infrastruktúrához - vagy nem használ olyan ismerős működési módot - mint az Ansible.

Ha már az Ansible programot használja helyszíni műveleteihez, akkor annak AWS-fiókjához való csatlakoztatása időnként a leggyorsabb és legkönnyebb mód lehet a műveletek felhőbe történő áttelepítésére.

Az Ansible / AWS előny megértése

Az AWS-erőforrások kezelése az Ansible használatával című könyvemet - amelyből ezt a cikket kivonatoltam - arra terveztem, hogy gyorsan bemutassam az Ansible deklaratív megközelítésének alkalmazását az AWS-erőforrásokkal való munkában. Az Ansible varázspálcája az, hogy "deklarálhatja" a kívánt konfigurációs eredményeket, majd előállíthatja őket azzal, hogy Ansible elolvassa a játékkönyvet. Megfelelő megtervezéskor elképesztő, milyen egyszerű lehet komplex, réteges AWS-telepítéseket végrehajtani.

Mielőtt elindítanánk egy egyszerű "Hello World" Ansible játékfüzetet, először győződjünk meg arról, hogy rendelkezik-e egy megfelelően konfigurált munkakörnyezettel, amelyen keresztül az Ansible kommunikálni tud minden új barátjával az AWS-fiókjában.

Helyi környezet előkészítése

Mint valószínűleg már tudja, az Ansible egy olyan hangszerelési eszköz, amely lehetővé teszi olyan egyszerű szöveges playbook fájlok írását, amelyek deklarálják a szoftverprofilt és az ideális állapotot, amelyet a célkiszolgálóra szeretne alkalmazni. Ezek a kiszolgálók - más néven gazdagépek - szinte minden elképzelhető digitális munkaterheléshez rendelkezésre állnak, szinte bármilyen alkalmazásszoftver-kombinációt használva, és szinte bármilyen platformon futtathatók.

A régi szép időkben, amikor a játékfüzetet egy fizikai szerverrel futtatták, az Ansible egy meglévő SSH-kapcsolatot alkalmaz, hogy biztonságosan belépjen a távoli gazdagépre, és folytassa az alkalmazás felépítését. De ez nem fog működni az AWS-terheléseknél. Látja, hogy mivel az EC2 példányok és az elindítani kívánt egyéb infrastruktúra még nem létezik, nem létezhetnek "létező" SSH kapcsolatok. Ehelyett az Ansible a Boto 3-at használja - az AWS által használt szoftverfejlesztő készletet (vagy SDK-t), amely lehetővé teszi a Python-kód kommunikációját az AWS API-val.

Az AWS CLI használata az Ansible csatlakoztatásához

Nem kell tudni, hogy minden működik, de ott kell lennie, így tud működni. Ezért telepíteni fogja az AWS parancssori felületet (CLI). Magát a CLI-t semmilyen fontos dologra nem fogjuk használni, de annak telepítése minden szükséges függőséget megad nekünk. Az AWS dokumentációs oldaláról megtudhatja, hogyan kell ezt működtetni a használt operációs rendszer legújabb verzióján.

A Python csomagkezelővel (PIP) való együttműködés népszerű módja mindezek megvalósításának. Így telepítheti magát a PIP-t, majd az AWS CLI-t egy Ubuntu gépre:

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

Meg kell jegyeznem, hogy amikor ezt írom, a Python 2 még mindig életben van ... de csak éppen. Tehát néha előfordulhat, hogy külön Python 2 és Python 3 verzió van telepítve a rendszerére. Mivel a Python 2 hamarosan teljesen megszűnik, valószínűleg nem kell aggódnia a python3 vagy a pip3 megadásával a parancsokkal: ennek automatikusnak kell lennie.

A CLI telepítése után futtassa aws configureés írja be az AWS hozzáférési kulcs azonosítóját és a titkos hozzáférési kulcsot.

aws configure cat .aws/credentials

A kulcsokat az AWS Management Console Biztonsági hitelesítő adatai oldaláról szerezheti be. A kulcsok így fognak kinézni (ne kapj rossz ötleteket, ezek nem érvényesek):

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

Csak ne feledje, hogy az AWS-fiók root felhasználójának kiadott kulcspár teljes hozzáférést biztosít a teljes AWS-fiókjához. Bárki, aki rendelkezik ezekkel a hitelesítő adatokkal, gyorsan felemelheti a hat, sőt hét számjegyű szolgáltatási díjat, ezért legyen nagyon óvatos, hogyan használja és tárolja azokat. Ideális esetben jobb lenne, ha korlátozná a kockázati kitettséget, ha adminisztrátori felhasználót hozna létre az AWS azonosító és hozzáférés-kezelési (IAM) szolgáltatásban korlátozott hatáskörökkel, és az adott felhasználó számára kiadott kulcsot használna.

Mindenesetre miért csinálom ezt? Az AWS-hitelesítő fájlom feltöltésének értéke az, hogy az Ansible elég okos ahhoz, hogy megkeresse, és ha más hitelesítési kulcsok nem állnak rendelkezésre a rendszerkörnyezetben, ezeket használja. Hamarosan meglátja, milyen hatalmas kényelem lesz. Tudnia kell azonban az Ansible playbookok hitelesítésének kezelésének más módjairól, például az ansible-vault használatáról vagy az aws_keys.yml fájl létrehozásáról, majd meghívásáról. De egy dolgot mindenképpen NEM szabad megtenni, ha hardveresen kódolja a kulcsokat a játékkönyv-fájljaiban - különösen, ha azt tervezi, hogy egy olyan online adattárba tolja, mint a GitHub. Gyorsan tesztelem a CLI-t, hogy megbizonyosodjak arról, hogy megfelelően tudunk csatlakozni az AWS-hez. Ez az egyszerű parancs felsorolja azokat a S3 csoportokat, amelyek véletlenül vannak ezen a fiókon belül.

aws s3 ls

Most már készen állunk az ansible telepítésére. Megyek azért a pip3-mal. Ugyanolyan egyszerűen használhatnám a szokásos Ubuntu apt adattárat, de valószínűleg egy kissé régebbi verziót telepít. A hálózati kapcsolattól függően ez eltart egy-két percig, de ennek nagy részét kihagyom.

$ pip3 install ansible 

Az ansible --version futtatásával megerősítem, hogy megfelelően telepítve van. Ez megmutatja a kiépített verziót, amely szerint a konfigurált Ansible modulok alapértelmezés szerint a fájlrendszer e két helyének egyikébe kerülnek mentésre, hogy itt más modulok is elérhetők lesznek - és ami a legfontosabb - hogy az Ansible futtatható fájl található a / local / bin / könyvtárban, a felhasználó otthoni könyvtárában. Az itteni felhasználómat egyébként ubuntunak hívják. Láthatja azt is, hogy a Python 3 szép, naprakész verzióját használjuk.

$ 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] 

Még egy lépés. Mint korábban említettem, az Ansible a boto SDK segítségével csatlakozik az AWS-hez. Tehát telepítenünk kell a boto és a boto 3 csomagokat. Ehhez megyek PIP-vel is.

$ pip3 install boto boto3 

Amint ezt a fedélzetre vitték, készen állunk arra, hogy valódi dolgokat készítsünk el. Ez a következő szakaszban kezdődik.

Tesztelés lehetséges egy egyszerű játékkönyvvel

Ez a koncepció bemutatójának nagyon egyszerű bizonyítéka lesz. Létrehozok egy pár fájlt, végigvezetek a szintaxison, majd elindítom. Először is, bármilyen egyszerű szövegszerkesztővel fogok létrehozni egy gazdagép fájlt. Normál esetben a hosts fájl megmondja az Ansible-nak, hogy hol találja meg a távoli kiszolgálókat, amelyeket ellátni szeretne. De mivel az AWS esetében még nem léteznek olyan erőforrások, amelyek házigazdáink lesznek, egyszerűen az Ansible to localhost-ra mutatunk, és a boto kezeli a kulisszák mögötti kapcsolatokat. Így néz ki a fájl tartalma:

[local] localhost 

Ezután létrehozok egy playbook fájlt, amelyet a test-ansible.yml fájlnak hívok. Az yml kiterjesztés természetesen azt jelzi, hogy ezt a fájlt a YAML jelölőnyelv szintaxisával kell formázni. Amint az az alatta beillesztett fájlszövegből is látható, ez három kötőjellel kezdődik, amely a fájl kezdetét jelöli, majd behúzott kötőjel, amely meghatározási készletet vezet be. A "gazdagépek" értéke lehet egy vagy több távoli számítógép, de mint mondtam, ezt a helyi rendszerre bízzuk, hogy kitaláljuk. Ugyanez vonatkozik a kapcsolatunkra is.

A következő szakasz azokat a feladatokat tartalmazza, amelyeket az Ansible-nak szeretnénk végrehajtani. Ez az aws_s3 modult használja az Amazon S3 egyszerű tárolási szolgáltatásának új rakomány létrehozásához az us-east-1 régióban. Ezt a csúnya nevet kell adnom neki, mert az S3 vödrök globálisan egyedi neveket igényelnek - ha egy választott név összeütközik a már létező számtalan millió név bármelyikével, a művelet kudarcot vall.

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

Úgy futtatom a játékkönyvet, hogy meghívom az ansible-playbook parancsot az -i használatával a hosts fájl megadásához, majd rámutatok a test.yml fájlra. Az Ansible egy-két pillanat alatt visszajelzést ad nekünk. Ha sikeresek vagyunk, akkor a "0" értéket a "sikertelen" és legalább az "1" értéket az "ok" értékként látja.

$ 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 

Ha még egyszer megnézem a vödröm listáját, meg kell látnom - és meg kell tennem - az újat:

$ 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 

Ez egy nagyon rövid bevezető az Ansible környezet létrehozásához. Láttuk, hogy az Ansible használata az Amazon automatikusan rendelkezésre álló erőforrásaival másképp fog működni, mint a hagyományos Ansible gazdagépekkel. Más hitelesítési és készlet-ellenőrzési eszközökre lesz szüksége. Végigjártuk az Ansible környezet felállításának és az AWS-hez való csatlakozásának folyamatát, majd egy egyszerű játékfüzetet futtattunk. Rövid és édes.

Ez a cikk az "AWS-erőforrások kezelése az Ansible használatával" című könyvemből származik. Több technológiai jóság - könyvek, tanfolyamok és cikkek formájában - elérhető a weboldalamon, a bootstrap-it.com címen.