Поиск…


замечания

пример-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"
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow