Как да използвам Ansible за управление на вашите ресурси на AWS

Не бихте ли искали да можете просто да размахвате пръчка и слоеве ресурси във вашия акаунт в AWS внезапно - и магически - да проникнат в идеално конфигуриран живот, готов да отговори на вашите сложни инфраструктурни нужди?

Ако вече имате опит с AWS, тогава знаете колко голяма мъка може да бъде работата през уеб страница след уеб страница в конзолата за управление на Amazon, докато ръчно предоставяте услуги. И дори AWS CLI - което е огромна стъпка нагоре - може да добави собствена сложност и усилия към сместа.

Това не означава, че самата AWS не се занимава с проблема със собствения си клас мощни инструменти за оркестрация, включително CloudFormation и тяхната еластична услуга Kubernetes (нещо, на което се обръщам подробно в моя курс „Използване на Docker на AWS“ в Pluralsight). Но нито една от тези опции не живее толкова близо до съществуващата ви инфраструктура - или използва толкова познат начин на работа - колкото Ansible.

Ако вече използвате Ansible за локалните си операции, включването му във вашия AWS акаунт понякога може да бъде най-бързият и безболезнен начин за мигриране на операции в облака.

Разбиране на предимството Ansible / AWS

Моята книга „Управление на ресурсите на AWS с помощта на Ansible“ - от която е извлечена тази статия - е предназначена да ви запознае бързо с прилагането на декларативния подход на Ansible при работа с ресурси на AWS. Възможността да „декларирате“ точните резултати от конфигурацията, които искате, и след това да ги произведете, като накарате Ansible да чете книга за игра, е вълшебната пръчка на Ansible. При правилно планиране е невероятно колко лесно може да бъде изпълнението на сложни, слоести внедрявания на AWS.

Преди да стартираме проста игрална книга „Hello World“ Ansible, нека първо се уверим, че имате правилно конфигурирана работна среда, чрез която Ansible може да комуникира с всички свои нови приятели във вашия акаунт в AWS.

Подготовка на местна среда

Както вероятно вече знаете, Ansible е инструмент за оркестрация, който ви позволява да пишете файлове с текстови книги за възпроизвеждане, които декларират софтуерния профил и идеалното състояние, което искате да приложите към целевия сървър. Тези сървъри - известни като хостове - могат да бъдат предоставени за почти всяко цифрово натоварване, което можете да си представите, използвайки почти всяка комбинация от приложен софтуер и работещи на почти всяка платформа.

В добрите стари времена, когато книга за игра се изпълняваше срещу физически сървър, Ansible използваше съществуваща SSH връзка, за да влезе сигурно в отдалечения хост и да продължи да изгражда вашето приложение. Но това няма да работи за натоварванията на AWS. Виждате ли, тъй като екземплярите EC2 и друга инфраструктура, която искате да стартирате, все още не съществуват, не може да има "съществуващи" SSH връзки. Вместо това Ansible ще използва Boto 3 - комплектът за разработка на софтуер (или SDK), използван от AWS, който позволява на Python кода да комуникира с AWS API.

Използване на AWS CLI за свързване на Ansible

Не е нужно да знаете как работи всичко това, но трябва да е там, за да може да работи. Поради тази причина ще инсталирате интерфейса на командния ред на AWS (CLI). Няма да използваме самия CLI за нещо важно, но инсталирането му ще ни даде всички зависимости, от които се нуждаем. Можете да разберете как да направите тази работа на най-новата версия на която и да е операционна система, която използвате от страницата с документация на AWS.

Работата с мениджъра на пакети на Python, PIP, е популярен начин да се направи всичко това. Ето как бихте инсталирали самия PIP и след това AWS CLI на машина на Ubuntu:

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

Трябва да отбележа, че докато пиша това, Python 2 все още е жив ... но само че. Така че понякога все още може да има отделни версии на Python 2 и Python 3, инсталирани на вашата система. Тъй като Python 2 скоро ще бъде напълно оттеглена, вероятно няма да се притеснявате да посочите python3 или pip3 с вашите команди: това трябва да бъде автоматично.

След като CLI е инсталиран, стартирайте aws configureи въведете вашия идентификатор на ключа за достъп до AWS и тайния ключ за достъп.

aws configure cat .aws/credentials

Можете да получите ключове от страницата „Вашите идентификационни данни за сигурност“ в AWS Management Console. Ето как ще изглеждат тези ключове (не получавайте кофти идеи, те не са валидни):

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

Само не забравяйте, че чифт ключове, издадени на основния потребител на вашия акаунт в AWS, осигурява пълен достъп до целия ви акаунт в AWS. Всеки, който притежава тези идентификационни данни, ще може бързо да начисли шест и дори седемцифрени такси за услуги, така че бъдете много внимателни как ги използвате и съхранявате. В идеалния случай би било по-добре да ограничите излагането на риск, като създадете администраторски потребител в услугата AWS за идентифициране и управление на достъпа (IAM) с ограничени правомощия и като използвате ключ, издаден на този потребител.

Във всеки случай, защо правя това? Стойността на попълването на моя файл с идентификационни данни на AWS е, че Ansible е достатъчно умен, за да го търси и, ако в системната среда няма други ключове за удостоверяване, той ще ги използва. Скоро ще видите колко мощно удобно ще бъде това. Трябва обаче да сте наясно с други начини за управление на удостоверяването за книгите за игра Ansible, като използване на ansible-vault или чрез създаване и след това извикване на файл aws_keys.yml. Но едно нещо, което определено НЕ трябва да правите, е да кодирате клавишите във файловете на вашите плейбуци - особено ако планирате да ги изпратите в онлайн хранилище като GitHub. Бързо ще тествам CLI, за да се уверя, че можем правилно да се свържем с AWS. Тази проста команда ще изброи всички сегменти на S3, които имам в този акаунт.

aws s3 ls

Вече сме готови да инсталираме ansible. Ще отида с pip3 за това. Бих могъл да използвам обикновеното хранилище на Ubuntu apt също толкова лесно, но най-вероятно ще инсталира малко по-стара версия. В зависимост от вашата мрежова връзка това ще отнеме минута или две, но ще пропусна по-голямата част от това.

$ pip3 install ansible 

Ще потвърдя, че е правилно инсталиран, като стартирам ansible --version. Това ни показва версията, която е изградена, че конфигурираните модули Ansible по подразбиране ще бъдат запазени в някое от тези две места във файловата система, че другите модули ще бъдат налични тук и - най-важното - че се намира изпълнимият файл Ansible в / local / bin / директорията под домашната директория на моя потребител. Моят потребител тук, между другото, се нарича ubuntu. Можете също така да видите, че използваме хубава, актуална версия на 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] 

Още една стъпка. Както споменах по-рано, Ansible ще се свърже с AWS с помощта на boto SDK. Така че ще трябва да инсталираме пакетите boto и boto 3. Ще отида с PIP и за този.

$ pip3 install boto boto3 

След като този бъде приет на борда, ще бъдем готови да свършим някои истински неща. Това ще започне в следващия раздел.

Тестване на Ansible с обикновен Playbook

This is going to be very simple proof of concept demo. I'll create a couple of files, walk you through the syntax, and then fire it up. First off, I'll use any plain text editor to create a hosts file. Normally, the hosts file tells Ansible where it can find the remote servers you want to provision. But since, in the case of AWS, the resources that will be our hosts don't yet exist, we'll simply point Ansible to localhost and boto will handle connections behind the scenes. Here's what the contents of that file will look like:

[local] localhost 

Next, I'll create a playbook file that I'll call test-ansible.yml. The yml extension, of course, indicates that this file must be formatted using YAML markup language syntax. As you can see from the file text I've pasted just below, that'll begin with three dashes marking the start of the file and then an indented dash introducing a set of definitions. The value of "hosts" could be one or more remote computers but, as I've said, we'll leave that up to the local system to figure out. The same goes for our connection.

The next section includes the tasks we want Ansible to perform. This one will use the aws_s3 module to create a new bucket on Amazon's S3 Simple Storage Service in the us-east-1 region. I have to give it this ugly name because S3 buckets require globally unique names - if a name you choose clashes with any one of the countless millions of names already out there, the operation will fail.

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

I run the playbook by calling the ansible-playbook command using -i to specify the hosts file, and then pointing to the test.yml file. Ansible should give us some feedback in just a moment or two. If we're successful, you'll see "0" as the value of "failed" and at least "1" as the value of "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 

If I check my list of buckets once more, I should - and do - see the new one:

$ 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 

That's a very brief intro to setting up an Ansible environment. We saw how using Ansible with Amazon's automatically provisioned resources is going to work differently than it would with traditional Ansible hosts. You're going to require a different set of authentication and inventory control tools. We walked through the process of setting up an Ansible environment and connecting it to AWS, and then running a simple playbook. Short and sweet.

This article comes from my book "Manage AWS Resources Using Ansible". There's more technology goodness - in the form of books, courses, and articles - available on my website, bootstrap-it.com.