Подтвердить что ты не робот

Лучший способ запустить aws ec2 экземпляры с возможностью

Я пытаюсь создать небольшую инфраструктуру webapp с возможностью использования на Amazon AWS, и я хочу сделать весь процесс: запустить экземпляр, настроить службы и т.д., но я не могу найти подходящий инструмент или модуль для решения этой проблемы от правды. Главным образом запуск EC2.

Большое спасибо.

4b9b3361

Ответ 1

Это короткий ответ на ваш вопрос, если вы хотите подробно и полностью автоматизировать роль, пожалуйста, дайте мне знать. Благодаря

Необходимое условие

  • анзибль

  • Библиотека Python boto

  • Настройка доступа и секретных ключей AWS в настройках среды
    (лучше всего внутри ~./boto)

Создание экземпляра EC2:

Чтобы создать экземпляр EC2, пожалуйста, измените эти параметры, которые вы можете найти в файле ec2_launch.yml в разделе "vars":

  • регион #, где хотите запустить экземпляр (ы), США, Австралию, Ирландию и т.д.
  • count # Количество экземпляров, которые вы хотите создать

    Как только вы упомянули этот параметр, выполните следующую команду:

ansible-playbook -i содержит ec2_launch.yml

Содержимое файла хостов:

[local]
localhost

[webserver]

Содержимое файла ec2_launch.yml:

---
  - name: Provision an EC2 Instance
    hosts: local
    connection: local
    gather_facts: False
    tags: provisioning
    # Necessary Variables for creating/provisioning the EC2 Instance
    vars:
      instance_type: t1.micro
      security_group: webserver # Change the security group name here
      image: ami-98aa1cf0 # Change the AMI, from which you want to launch the server
      region: us-east-1 # Change the Region
      keypair: ansible # Change the keypair name
      count: 1

    # Task that will be used to Launch/Create an EC2 Instance
    tasks:

      - name: Create a security group
        local_action: 
          module: ec2_group
          name: "{{ security_group }}"
          description: Security Group for webserver Servers
          region: "{{ region }}"
          rules:
            - proto: tcp
              type: ssh
              from_port: 22
              to_port: 22
              cidr_ip: 0.0.0.0/0
            - proto: tcp
              from_port: 80
              to_port: 80
              cidr_ip: 0.0.0.0/0
          rules_egress:
            - proto: all
              type: all
              cidr_ip: 0.0.0.0/0


      - name: Launch the new EC2 Instance
        local_action: ec2 
                      group={{ security_group }} 
                      instance_type={{ instance_type}} 
                      image={{ image }} 
                      wait=true 
                      region={{ region }} 
                      keypair={{ keypair }}
                      count={{count}}
        register: ec2

      - name: Add the newly created EC2 instance(s) to the local host group (located inside the directory)
        local_action: lineinfile 
                      dest="./hosts" 
                      regexp={{ item.public_ip }} 
                      insertafter="[webserver]" line={{ item.public_ip }}
        with_items: "{{ ec2.instances }}"


      - name: Wait for SSH to come up
        local_action: wait_for 
                      host={{ item.public_ip }} 
                      port=22 
                      state=started
        with_items: "{{ ec2.instances }}"

      - name: Add tag to Instance(s)
        local_action: ec2_tag resource={{ item.id }} region={{ region }} state=present
        with_items: "{{ ec2.instances }}"
        args:
          tags:
            Name: webserver

Ответ 2

Как говорили другие, облачный модуль содержит практически всю необходимую поддержку предоставления AWS. Тем не менее, Ansible парадигма имеет смысл, когда есть существующая машина SSH: умеет ориентироваться и подключаться. Фаза создания экземпляра, по сути, предлагает вам настроить таргетинг на вашу локальную машину и вызывать конечные точки AWS API.

Как и вы, мне нужна команда с одним выстрелом с изящным переходом от экземпляра EC2 в его конфигурацию. Там есть предложения о том, как сделать что-то подобное в документации, но он полагается на модуль add_host, чтобы настроить Ansible идею текущего инвентаря хоста, и даже тогда я не мог" t найти решение, которое не чувствует, что я работал против, а не с системой.

В конце концов, я выбрал два разных плейбука: security.yml, который использует модули ec2, ec2_group, ec2_vol, ec2_eip и route53, чтобы убедиться, что у меня есть "аппаратное обеспечение", а затем configure.yml, больше похожее на традиционный Ansible site.yml, который может обрабатывать инвентарь хоста (статический в моем случае, но динамический будет работать хорошо) как заданный и делать все, что хорошее декларативное состояние переходит.

Оба проигрывателя являются идемпотентными, но configure.yml, предназначенный для повторного запуска снова и снова в конечном итоге.

Ответ 3

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

Если вам нужен "лучший" способ, вам сложно выполнить CloudFormation, который можно запустить из Ansible.