Как управлять виртуальными машинами с помощью модуля Ansible EC2 AWS

При работе с существующими экземплярами Amazon Web Service (AWS) EC2 веб-сервиса, навигация по консоли управления работает нормально. Но по мере роста вашей инфраструктуры управление экземплярами занимает много времени и становится сложным. Есть ли более эффективный способ управления экземплярами? Да! Вам может помочь модуль AWS Ansible EC2.

В этом руководстве вы узнаете, как модуль Ansible AWS EC2 дает вам мощные возможности для управления экземплярами AWS EC2 на основе примеров.

Читайте дальше и начинайте!

Предварительные требования

Это руководство состоит из пошаговых инструкций. Если вы хотите следовать за ними, убедитесь, что у вас есть следующее:

  • Узел управления Ansible – В этом руководстве используется версия Ansible v2.11.7 на машине с Ubuntu 20.04.3 LTS.

Убедитесь, что пользователь IAM настроен для программного доступа и что вы назначили ему существующую политику AmazonEC2FullAccess.

  • Настроен файл инвентаря и один или несколько хостов для выполнения команд и плейбуков Ansible. Удаленный компьютер с Linux называется myserver, и в этом руководстве используется группа инвентаря с названием web.
  • На контроллере Ansible и удаленном узле должна быть установлена Python версии 3.6 или выше. В этом руководстве используется Python версии 3.8.10 на машине с Ubuntu.
  • Необходимо установить модули boto3 версии выше 1.15.0 и botocore версии выше 1.18.0 на хосте контроллера Ansible и на удаленной машине.

Создание или перезапуск экземпляра EC2 с помощью команд Ad Hoc

Если вы планируете создать или перезапустить один экземпляр EC2 в учетной записи AWS, достаточно выполнить команды Ad Hoc. Команды Ad Hoc позволяют быстро и эффективно выполнить одну команду для создания экземпляра EC2 или изменения типа экземпляра AWS EC2.

Войдите на контроллер Ansible и выполните следующую команду ansible, чтобы подключиться (-m amazon.aws.ec2_instance) к хосту (web).

Команда передает аргумент (-a), который указывает Ansible на перезапуск экземпляра AWS EC2 с помощью instance_tags=Name=Tag1) в регионе us-east-2. Для аутентификации подключения к учетной записи AWS вы добавляете информацию о aws_access_key и aws_secret_key в команду Ad Hoc.

В данном учебнике все действия выполняются в регионе us-east-2, но вы можете выполнить те же действия в любом регионе AWS по вашему выбору.

ansible web -m amazon.aws.ec2 -a " state=restarted instance_tags=Name=Tag1 aws_access_key=AKIAVWOJMI5I2DPXXXX aws_secret_key=F9PaprqnPUn/XXXXXXXXXXXX region=us-east-2"

После завершения выполнения команды вы увидите сообщение CHANGED, как показано ниже, что подтверждает успешное перезапуск экземпляра AWS EC2 с помощью Ansible.

Running an Ad Hoc Command to Restart an Amazon EC2 Instance

Запуск экземпляра EC2 с помощью сценария Ansible

Вы только что научились выполнять команду Ansible ad hoc, что отлично подходит для одноразовых действий! Но возможно, вам нужно выполнить несколько задач. В этом случае создайте сценарий Ansible, который запустит экземпляр EC2 для выполнения нескольких задач.

1. Откройте терминал на вашем хосте контроллера Ansible, затем выполните следующие команды, чтобы создать каталог с именем ~/ansible_aws_ec2_module и перейти в этот каталог.

Этот каталог будет содержать сценарий и все необходимые файлы конфигурации, которые вы будете использовать для вызова модуля Ansible AWS EC2.

mkdir ~/ansible_aws_ec2_module
cd ~/ansible_aws_ec2_module

2. Затем откройте ваш любимый текстовый редактор, создайте файл с именем main.yml в каталоге ~/ansible_aws_ec2_module. Заполните файл main.yml следующим содержимым YAML сценария.

Приведенный ниже сценарий содержит задачу, которая запускает экземпляр с публичным IP-адресом в определенной VPC в учетной записи AWS.

С этой точки и до конца учебника замените значения aws_access_key и aws_secret_key на свои собственные.

---
- name: Ansible EC2 instance Launch module demo
# Определение удаленного сервера, где модуль Ansible EC2 будет управлять объектами
  hosts: web
  remote_user: ubuntu # Использование удаленного пользователя ubuntu
  tasks:
		# Задача для запуска экземпляра AWS EC2 с публичным IP-адресом
    - name: start an instance with a public IP address
      amazon.aws.ec2:
				# Установка имени ключа
        key_name: mykey
				# Определение типа экземпляра, образа, идентификатора виртуальной частной сети, присвоения публичного IP-адреса, региона AWS
        instance_type: t2.micro
        image: ami-0b9064170e32bde34
        wait: yes
        count: 1
        vpc_subnet_id: subnet-0dc9af4c75ad3e2ee
        assign_public_ip: yes
        aws_region: us-east-2
        aws_access_key: AKIAVWOJMI5XXXXXXXX
        aws_secret_key: F9PaprqnPUn/NP8lzQXXXXXXXXXXXXXXXXXX

3. Выполните следующую команду для вызова плейбука (main.yml). Плейбук затем выполняет задачи для создания нового экземпляра в регионе us-east-2 с типом экземпляра t2.micro.

ansible-playbook main.yml

Ниже вы можете видеть, что некоторые задачи имеют статус changed, что указывает на успешное создание экземпляра Ansible и изменение состояния задачи для выполнения команды. В отличие от этого, вы видите статус ok, так как некоторые задачи не требуют изменений.

Executing a Playbook

4. Теперь откройте ваш любимый веб-браузер и войдите в консоль управления AWS.

5. Наконец, нажмите на строку поиска в верхней части консоли, найдите EC2 и нажмите на пункт меню EC2. Это перенаправит ваш браузер на страницу EC2.

Searching the EC2 service in the AWS account

На странице EC2 вы увидите только что созданный экземпляр, как показано ниже.

newly created instance

Остановка нескольких экземпляров AWS EC2.

Возможно, некоторые экземпляры AWS EC2 больше не выполняют никакой функции. Если это так, вы можете остановить или прекратить работу нескольких экземпляров, выполнив плейбук Ansible. Укажите идентификаторы экземпляров и объявите значения в задаче для установки поведения модуля Ansible EC2 AWS при остановке экземпляров.

1. Создайте плейбук Ansible с именем stop.yml и скопируйте/вставьте нижеприведенный код в плейбук.

Ниже приведен плейбук, останавливающий два экземпляра (i-0d8c7eb4eb2c643a1 и i-0dbc17a67c0f7577c).

---
- name: Stopping the already Launched EC2 instances using Ansible EC2 Module
# Задание удаленного сервера, на котором модуль Ansible EC2 будет управлять объектами
  hosts: web
  gather_facts: false
  # Использование удаленного пользователя ubuntu
  remote_user: ubuntu 
  vars:
    instance_ids:
      - 'i-0d8c7eb4eb2c643a1'
      - 'i-0dbc17a67c0f7577c'
    region: us-east-2
  tasks:
    - name: Stopping the already launched AWS EC2 instances
      amazon.aws.ec2:
        instance_ids: '{{ instance_ids }}'
        region: '{{ region }}'
        state: stopped
        wait: True
        vpc_subnet_id: subnet-0dc9af4c75ad3e2ee
        assign_public_ip: yes
        aws_access_key: AKIAVWOJMI5XXXXXXXX
        aws_secret_key: F9PaprqnPUn/NP8lzQXXXXXXXXXXXXXXXXXX

Если вы предпочитаете прекратить работу экземпляров, а не останавливать их, измените значение state на absent.

2. Теперь выполните следующую команду, чтобы выполнить плейбук (stop.yml), который остановит указанные в плейбуке экземпляры. ansible-playbook stop.yml

ansible-playbook stop.yml
Executing the Ansible playbook using the ansible-playbook command.

3. Наконец, перейдите к экземплярам AWS в веб-браузере, и вы увидите, что два экземпляра успешно остановлены, как показано ниже.

Viewing Stopped Instances

Создание экземпляра с меткой, объемом и мониторингом Cloud Watch.

Возможно, вам потребуется оснастить ваш экземпляр более продвинутыми компонентами, такими как тегирование, мониторинг с облачными оповещениями CloudWatch и создание тома для хранения данных. В этом случае использование модуля EC2 AWS в Ansible плейбуке поможет вам.

Теги – отличный способ организации ресурсов AWS и эффективного расчета стоимости ресурсов в консоли управления AWS.

1. Создайте новый Ansible плейбук с именем advanced.yml и заполните плейбук следующим кодом.

Нижеприведенный плейбук запустит экземпляр AWS EC2 с (volumes—> /dev/sdb), мониторингом и тегом Instance1.

---
- name: Adding Tag, Volumes, and cloud Watch Monitoring to an an instance
  hosts: web
  remote_user: ubuntu
  tasks:
    - name: Adding Tag, Volumes, and cloud Watch Monitoring to an an instance
      amazon.aws.ec2:
        instance_type: t2.micro
        image: ami-0b9064170e32bde34
        vpc_subnet_id: subnet-0dc9af4c75ad3e2ee
        region: us-east-2
        aws_access_key: AKIAVWOJMI5I2DXXXX
        aws_secret_key: F9PaprqnPUn/NP8lzQ5lWjXXXXXXXXXXXXXXXx
				# Создание томов и присоединение к экземпляру AWS EC2 типа io1
        volumes:
          - device_name: /dev/sdb
            volume_type: io1
            iops: 1000
            volume_size: 100
				# Включение мониторинга CloudWatch 
				# для экземпляра AWS EC2, который будет запущен
        monitoring: yes
				# Тегирование экземпляра AWS EC2, который будет запущен
        instance_tags:
            Name: Instance1

2. Теперь выполните следующую команду для выполнения плейбука (advanced.yml), который запустит экземпляр AWS EC2 с тегом, томом и мониторингом CloudWatch. ansible-playbook advanced.yml

ansible-playbook advanced.yml
Executing the Ansible Playbook to Create an Instance with Tag, Volume, and Cloud Watch Monitoring

3. Перейдите на вкладку Storage экземпляра, который вы хотите проверить, в консоли AWS EC2. Под Блочные устройства кликните по ID тома из списка, чтобы просмотреть подробную информацию об экземпляре.

Verifying the volume created in the AWS account for the AWS EC2 instance.

4. Наконец, перейдите на вкладку Tags на странице с общей информацией об экземпляре. Вы увидите тег, установленный для экземпляра в плейбуке (шаг один), как показано ниже.

Verifying the tags in the AWS account for the AWS EC2 instance.

Вывод

В этом руководстве вы воспользовались модулем Ansible AWS EC2 для управления экземплярами AWS EC2 с помощью одной команды. Вы также узнали, как настраивать экземпляры AWS EC2, такие как перезапуск, завершение, добавление тегов и т. д.

Теперь, когда у вас есть надежные знания о модуле Ansible AWS EC2, вы готовы включить модуль Ansible EC2 AWS в свою рутину управления экземпляром? Возможно, вы захотите автоматизировать задачу, добавив cron job?

Source:
https://adamtheautomator.com/ansible-ec2/