2016-05-12 2 views
1

Я пытаюсь начать с возможности, в частности используя незанятую книгу для развертывания экземпляра ec2, но я все время получаю сообщение об ошибке.Ошибка запуска экземпляра ec2 с ansible

Я следовал код нашел в этой теме: Best way to launch aws ec2 instances with ansible

я подставил в собственных деталях, чтобы дать мне следующие

Файл хостов:

[local] 
localhost 

[webserver] 

create_instance.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: t2.micro 
     security_group: webserver # Change the security group name here 
     image: ami-f95ef58a # Change the AMI, from which you want to launch  the server 
     region: eu-west-1 # Change the Region 
     keypair: MyKeyPair # 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  

Затем я создаю среду varia BLES для моих ключей AWS следующим образом:

export AWS_ACCESS_KEY=my aws key 
export AWS_SECRET_KEY=my aws secret key 

Когда я запускаю мой код с Судо анзибль-PlayBook -i хостов create_instance.yml Я получаю следующее сообщение об ошибке:

PLAY [localhost]  ************************************************************** 

TASK: [make one instance] ***************************************************** 
failed: [localhost] => {"failed": true} 
msg: No handler was ready to authenticate. 1 handlers were checked.  ['HmacAuthV4Handler'] Check your credentials 

FATAL: all hosts have already failed -- aborting 

PLAY RECAP ******************************************************************** 
      to retry, use: --limit @/home/ubuntu/create_instance.retry 

localhost     : ok=0 changed=0 unreachable=0 failed=1 
Может

кого подскажите, где я могу ошибиться?

+0

Не используйте sudo. Корневой пользователь (предположительно) не имеет загруженных переменных среды – ydaetskcoR

+0

Спасибо за предложение, но пока не повезло. Чтобы подтвердить, что я правильно установил пару ключей, должна ли переменная «keypair» в моем yml-файле быть установлена ​​в качестве моей пары ключей, которая уже загружена в AWS? Под этим я подразумеваю имя пары ключей, которую я использую для создания новых экземпляров ec2 через консоль AWS? Это то, что я использовал в настоящее время, но просто хочу проверить, что это правильно. – Rjodo

+0

Это не так далеко. Это не работает, потому что у вас нет необходимых переменных соединения aws. Если вы используете sudo, то он не загрузит переменные, которые вы экспортируете в текущую оболочку. Альтернативой было бы указать «aws_access_key» и «aws_secret_key» vars в учебнике или в вашем инвентаре. – ydaetskcoR

ответ

0

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

Ansible работает на python и выбирает каталог python. Поэтому убедитесь, что вы установили awscli, используя программу apt-get install awscli. Используйте sudo pip install awscli.

Укажите ключи доступа в файле ~/.aws/credentials.

Также убедитесь, что установлена ​​обновленная версия boto и python. См. Это http://www.dowdandassociates.com/blog/content/howto-install-aws-cli-security-credentials/. Здесь подробно описаны все способы настройки ключей.

+0

Спасибо. Я последовал твоим шагам, но у меня все еще есть проблема. Ошибка, которую я получаю, заключается в следующем. Аутентификация или сбой разрешения. В некоторых случаях вы, возможно, могли пройти проверку подлинности и не иметь разрешений в удаленном каталоге. Рассмотрите возможность изменения удаленного пути temp в ansible.cfg на путь, корневой в "/ tmp". Неудачная команда: mkdir -p $ HOME/.ansible/tmp/ansible-tmp-1463751636.36-33202375925080 && chmod a + rx $ HOME/.ansible/tmp/ansible-tmp-1463751636.36-33202375925080 && echo $ HOME/.ansible/tmp/ansible-tmp-1463751636.36-33202375925080, завершен с результатом 1 – Rjodo

+0

О, это означает, что у вас нет прав на создание каталога в вашем незаменимом поле. Можете ли вы убедиться, что права на запись и право собственности на каталог /.ansible/tmp/ созданы в $ HOME? И вы используете эту игру с одним и тем же пользователем? –