ansible
Использование Ansible с веб-службами Amazon
Поиск…
замечания
пример-2: Это служит примером, поэтому просто не копируйте / не пропустите его. Вместо этого, чтобы удовлетворить ваши потребности, вы должны настроить свои переменные; ansible_key, правила группы безопасности и т. д.
Пример-1: Для того, чтобы отключить SSH строгой проверки ключа хоста, поведение мы не хотим при автоматизации задач, мы не установить его no
в ansible.cfg
файле. т.е.: StrictHostKeyChecking=no
Файл ec2.py
- это скрипт python, который выполняет и возвращает ваши ресурсы AWS на основе ec2.ini
который является конфигурационным файлом, который вам нужно настроить, если вы хотите ограничить область вашего проекта в определенных регионах, определенных тегах и т. Д. ...
Как запустить экземпляр EC2 из официальных AMI Amazon, изменить его и сохранить в новом AMI
Это очень обычный рабочий процесс при использовании Ansible для создания экземпляра AWS EC2. Это сообщение предполагает базовое понимание Ansible и, самое главное, предполагает, что вы правильно настроили его для подключения к AWS.
Как утверждает настоящая официальная документация Ansible , мы собираемся использовать четыре роли:
1- ami_find, чтобы получить идентификатор ami, на основе которого мы запустим экземпляр EC2.
2- ec2_ami_creation для эффективного запуска экземпляра EC2.
3- code_deploy для модификации экземпляра; это может быть что угодно, поэтому мы просто переносим файл на целевую машину.
4- build_ami для создания нашего нового изображения на основе исполняемого экземпляра ec2. Этот пост предполагает, что вы находитесь на верхнем уровне своего проекта Ansible: my_ansible_project
Первая роль: ami_find
cd my_ansible_project/roles && ansible-galaxy init ami_find
В этой роли мы собираемся использовать модуль ec2_ami_find, и в качестве примера мы будем искать машину Ubuntu и получить ее ami_id (ami-xxxxxxxx). Теперь отредактируйте my_ansible_project/roles/ami_find/tasks/main.yml
:
---
- ec2_ami_find:
name: "ubuntu/images/hvm-ssd/ubuntu-trusty-14.04-amd64-server-*"
sort: name
sort_order: descending
sort_end: 1
region: "{{ aws_region }}"
register: ami_find
- set_fact: ami_ubuntu="{{ ami_find.results[0].ami_id }}"
Вторая роль: ec2_ami_creation
Здесь мы будем использовать ami_id
мы получили от первой роли, а затем ami_id
наш новый экземпляр на основе этого:
cd my_ansible_project/roles && ansible-galaxy init ec2_ami_creation
В этой роли мы будем использовать, самое главное, ec2_module для запуска нашего экземпляра. Теперь отредактируйте my_ansible_project/roles/ec2_ami_creation/tasks/main.yml
:
---
- ec2_vpc_subnet_facts:
region: "{{aws_region}}"
register: vpc
- name: creation of security group of the ec2 instance
ec2_group:
name: example
description: an example EC2 group
region: "{{ aws_region }}"
rules:
- proto: tcp
from_port: 22
to_port: 22
cidr_ip: 0.0.0.0/0
state: present
register: ec2_sg
- name: create instance using Ansible
ec2:
key_name: "{{ ansible_key }}"
group: example
vpc_subnet_id: "{{vpc.subnets[0].id}}"
instance_type: "{{ instance_type }}"
ec2_region: "{{ aws_region }}"
image: "{{ base_image }}"
assign_public_ip: yes
wait: yes
register: ec2
- set_fact: id={{ec2.instances[0].id}}
- name: adding the newly created instance to a temporary group in order to access it later from another play
add_host: name={{ item.public_ip }} groups=just_created
with_items: ec2.instances
- name: Wait for SSH to come up
wait_for: host={{ item.public_dns_name }} port=22 delay=10 timeout=640 state=started
with_items: ec2.instances
Третья роль: code_deploy
Здесь мы предоставим этот экземпляр, который был добавлен в группу с именем just_created
cd my_ansible_project/roles && ansible-galaxy init code_deploy
В этой роли мы будем использовать template_module для передачи файла и записи имени машины в нем. Теперь отредактируйте my_ansible_project/roles/code_deploy/tasks/main.yml
:
---
- template: src=my_file.txt.j2 dest=/etc/my_file.txt
затем перейдите в папку шаблонов внутри вашей роли:
cd my_ansible_project/roles/templates
и добавьте файл my_file.txt.j2
содержащий:
my name is {{ ansible_hostname }}`
Четвертая роль: build_ami
Теперь мы создадим образ работающего экземпляра с помощью модуля ec2_ami . Перейдите в папку проекта и:
cd my_ansible_project/roles && ansible-galaxy init build_ami
Теперь отредактируйте my_ansible_project/roles/build_ami/tasks/main.yml
:
---
- ec2_ami:
instance_id: "{{ instance_id }}"
wait: yes
name: Base_Image
Теперь, я думаю, вам было интересно, как организовать все эти роли. Я прав? Если да, продолжайте чтение.
Мы напишем книгу, состоящую из трех пьес: первая игра, применимая на localhost
будет называть наши первые две роли, вторая игра применима к нашей команде just_created . последняя роль будет применяться на localhost
. Почему localhost
? Когда мы хотим управлять некоторыми ресурсами AWS, мы используем нашу локальную машину так же просто. Затем мы будем использовать файл vars, в который будут помещены наши переменные: ansible_key
, aws_region
и т. Д.
создайте папку инфраструктуры в верхней части вашего проекта и добавьте в нее файл под названием aws.yml
:
---
aws_region: ap-southeast-2
ansible_key: ansible
instance_type: t2.small
Поэтому в верхней части вашего проекта создайте build_base_image.yml
и добавьте следующее:
---
- hosts: localhost
connection: local
gather_facts: False
vars_files:
- infrastructure/aws.yml
roles:
- ami_find
- { role: ec2_creation, base_image: "{{ ami_ubuntu }}"}
- hosts: just_created
connection: ssh
gather_facts: True
become: yes
become_method: sudo
roles:
- code_deploy
- hosts: localhost
connection: local
gather_facts: False
vars_files:
- infrastructure/aws.yml
roles:
- { role: new_image, instance_id: "{{ id }}"}
Вот и все, не забудьте удалить свои ресурсы после тестирования, или почему бы не создать роль для удаления исполняемого экземпляра :-)
Как правильно настроить Ansible для подключения к Amazon Web Services
Управление ресурсами AWS, которые масштабируются вверх и вниз, попадает в рамки статического файла хоста инвентаря, поэтому нам нужно что-то динамическое. И для этого нужны динамические запасы . Давайте начнем:
Загрузите файлы ec2.ini и ec2.py в папку проекта:
cd my_ansible_project
wget https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/ec2.py
wget https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/ec2.ini
После этого сделайте ec2.py
файл ec2.py
:
chmod +x ec2.py
Теперь экспортируйте свой ключ AWS Secret и Access в качестве переменных окружения:
export AWS_ACCESS_KEY_ID='ABCDEFGHIJKLM'
export AWS_SECRET_ACCESS_KEY='NOPQRSTUVWXYZ'
Для использования скрипта ec2.py
нам нужен Python AWS SDK, boto
поэтому вам нужно его установить:
sudo pip install boto
Чтобы проверить, все ли хорошо, попробуйте выполнить ec2.py
, указав свои ресурсы:
./ec2.py --list
вы должны увидеть нечто похожее на:
{
"_meta": {
"hostvars": {}
}
}
Теперь мы хотим использовать динамический инвентарь вместе с нашим статическим файлом hosts. Сначала создайте папку под названием inventory
, добавьте ec2.py
, ec2.ini
и наш файл hosts
затем скажите Ansible, чтобы использовать эту папку в качестве файла инвентаризации:
mkdir inventory
mv ec2.py inventory/ec2.py
mv ec2.ini inventory/ec2.ini
mv hosts inventory/hosts
Затем мы должны определить конфигурацию уровня проекта для Ansible, создав файл конфигурации Ansible в папке проекта с именем ansible.cfg
и добавив следующее:
[defaults]
hostfile = inventory
[ssh_connection]
pipelining = False
ssh_args = -o ControlMaster=auto -o ControlPersist=30m -o StrictHostKeyChecking=no
Затем нам нужно настроить Ansible для использования ключа SSH для аутентификации доступа к нашим экземплярам EC2. Использование агента SSH - лучший способ аутентификации с помощью ресурсов, поскольку это упрощает управление ключами:
ssh-agent bash
ssh-add ~/.ssh/keypair.pem
Это оно! Если вы следовали этому, вы можете протестировать его с помощью модуля ping
а затем вы увидите, что ваши запущенные экземпляры, которые были настроены для использования вашего ключа, отвечающего на понг:
ansible -m ping all
11.22.33.44 | success >> {
"changed": false,
"ping": "pong"
}