Як використовувати Ansible для управління ресурсами AWS

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

Якщо ви вже маєте досвід роботи з AWS, тоді ви знаєте, наскільки важким може бути перебіг веб-сторінки за веб-сторінкою на консолі керування Amazon, коли ви вручаєте послуги вручну. І навіть CLI AWS - що є величезним кроком вперед - може додати власної складності та зусиль до поєднання.

Це не означає, що сама AWS не вирішує проблему з власним класом потужних інструментів оркестрації, включаючи CloudFormation та їхню еластичну службу Kubernetes (те, про що я довго розглядаю у своєму курсі "Використання Docker на AWS" у Pluralsight). Але жоден із цих варіантів не живе так близько до вашої існуючої інфраструктури - або використовує такий звичний спосіб роботи - як Ansible.

Якщо ви вже використовуєте Ansible для локальних операцій, підключення його до свого облікового запису AWS іноді може бути найшвидшим і найбезболішим способом перенесення операцій у хмару.

Розуміння переваги Ansible / AWS

Моя книга "Управління ресурсами AWS за допомогою Ansible" - з якої витягнута ця стаття - покликана швидко ознайомити вас із застосуванням декларативного підходу Ansible до роботи з ресурсами AWS. Можливість "оголосити" точні результати конфігурації, які ви хочете, а потім створити їх, отримавши Ansible для читання ігрової книги, - це чарівна паличка Ansible. При правильному плануванні вражає, наскільки просто може бути виконання складних багаторівневих розгортань AWS.

Перш ніж ми запустимо просту книгу-програму Ansible "Hello World", спершу переконайтеся, що у вас є правильно налаштоване робоче середовище, за допомогою якого Ansible може спілкуватися з усіма новими друзями у вашому обліковому записі AWS.

Підготовка місцевого середовища

Як ви, напевно, вже знаєте, Ansible - це інструмент оркестрації, який дозволяє писати текстові файли відтворювальних книжок, які декларують профіль програмного забезпечення та ідеальний стан, який ви хочете застосувати до цільового сервера. Ці сервери - відомі як хости - можна забезпечити практично для будь-якого цифрового навантаження, яке ви можете собі уявити, використовуючи практично будь-яку комбінацію прикладного програмного забезпечення та працюючи практично на будь-якій платформі.

У старі добрі часи, коли playbook запускався на фізичному сервері, Ansible використовував існуюче з'єднання SSH для надійного входу на віддалений хост і для створення своєї програми. Але це не буде працювати для навантажень AWS. Розумієте, оскільки екземпляри EC2 та інша інфраструктура, яку ви хочете запустити, ще не існують, не може бути "існуючих" з'єднань SSH. Натомість Ansible використовуватиме Boto 3 - набір для розробки програмного забезпечення (або SDK), що використовується AWS, що дозволяє коду Python взаємодіяти з API AWS.

Використання 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. Ось як виглядатимуть ці клавіші (не отримуйте ніяких неслухняних ідей, вони не дійсні):

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

Тільки пам’ятайте, що пара ключів, виданих кореневому користувачеві вашого облікового запису AWS, забезпечує повний доступ до всього вашого облікового запису AWS. Будь-хто, хто має ці дані, швидко зможе нарахувати шість і навіть сім цифр за послуги, тому будьте дуже обережні, як ви їх використовуєте та зберігаєте. В ідеалі, вам було б краще обмежити ризик, створивши адміністратора в службі AWS Identification and Access Management (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 за допомогою простого посібника

Це буде дуже простим доказом демонстрації концепції. Я створив пару файлів, провів вас через синтаксис, а потім запустив. По-перше, я буду використовувати будь-який текстовий редактор для створення файлу hosts . Зазвичай файл хостів повідомляє Ansible, де він може знайти віддалені сервери, які ви хочете надати. Але оскільки у випадку з AWS ресурси, які будуть нашими хостами, ще не існують, ми просто вкажемо Ansible на localhost, а boto буде обробляти кулуарні підключення. Ось як буде виглядати вміст цього файлу:

[local] localhost 

Далі я створю файл файлу збірки, який я буду називати test-ansible.yml. Звичайно, розширення yml вказує на те, що цей файл повинен бути відформатований із використанням синтаксису мови розмітки YAML. Як ви можете бачити з тексту файлу, який я вставив трохи нижче, це почнеться з трьох рисок, що позначають початок файлу, а потім з відступом тире, що вводить набір визначень. Значення "хостів" може бути одним або кількома віддаленими комп'ютерами, але, як я вже говорив, ми залишимо це для локальної системи, щоб з'ясувати. Те саме стосується нашого зв’язку.

Наступний розділ включає завдання, які ми хочемо виконувати Ansible. Цей буде використовувати модуль aws_s3 для створення нового сегмента на Amazon S3 Simple Storage Service в регіоні США-схід-1. Я повинен дати йому цю потворну назву, тому що сегменти S3 вимагають унікальних імен у всьому світі - якщо ім'я, яке ви вибрали, зіткнеться з будь-яким із незліченних мільйонів імен, що вже існують, операція не вдасться.

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

Я запускаю playbook, викликаючи команду ansible-playbook за допомогою -i, щоб вказати файл hosts, а потім вказуючи на файл test.yml. Ansible повинен дати нам якийсь зворотний зв’язок лише за хвилину чи дві. Якщо ми досягнемо успіху, ви побачите "0" як значення "не вдалося" і принаймні "1" як значення "добре".

$ 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 

Якщо я ще раз перевірю свій список сегментів, я повинен - ​​і все ж - побачити новий:

$ 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 

Це дуже короткий вступ до налаштування середовища Ansible. Ми побачили, як використання Ansible з автоматично наданими ресурсами Amazon буде працювати інакше, ніж у традиційних хостів Ansible. Вам знадобиться інший набір засобів автентифікації та контролю запасів. Ми пройшли процес налаштування середовища Ansible та підключення його до AWS, а потім запустили просту книгу для ігор. Короткий і солодкий.

Ця стаття виходить з моєї книги "Управління ресурсами AWS за допомогою Ansible". На моєму веб-сайті, bootstrap-it.com, є більше технологічних переваг - у формі книг, курсів та статей.