2017-07-28 236 views
1

我想实现的目标

我想创建一个使用一个Ansible操作手册安装LAMP堆栈的EC2实例。Ansible AWS:无法连接到EC2实例

问题

实例创建工作正常,我可以在EC2控制台修改它,但在尝试访问例如安装Apache或创建密钥的实例时出现的问题。

这是错误:

fatal: [35.154.26.86]: UNREACHABLE! => { "changed": false, "msg": "[Errno None] Unable to connect to port 22 on or 35.154.26.86", "unreachable": true }

Error Screenshot

代码

这是我的剧本:

--- 
- name: Power up an ec2 with LAMP stack installed 
    hosts: localhost 
    become: true 
    become_user: root 
    gather_facts: False 
    vars: 
    keypair: myKeyPair 
    security_group: launch-wizard-1 
    instance_type: t2.micro 
    image: ami-47205e28 
    region: x-x-x 
    tasks: 
    - name: Adding Python-pip 
     apt: name=python-pip state=latest 

    - name: Install Boto Library 
     pip: name=boto 

    - name: Launch instance (Amazon Linux) 
     ec2: 
     key_name: "{{ keypair }}" 
     group: "{{ security_group }}" 
     instance_type: "{{ instance_type }}" 
     image: "{{ image }}" 
     wait: true 
     region: "{{ region }}" 
     aws_access_key: "xxxxxxxxxxxxxxxxxxx" 
     aws_secret_key: "Xxxxxxxxxxxxxxxxxxx" 
     register: ec2 

    - name: Print all ec2 variables 
     debug: var=ec2 

    - name: Add all instance public IPs to host group 
     add_host: hostname={{ item.public_ip }} groups=ec2hosts 
     with_items: "{{ ec2.instances }}" 


- hosts: ec2hosts 
    remote_user: ec2-user 
    become: true 
    gather_facts: false 
    tasks: 
#I need help here, don't know what to do. 
    - name: Create an EC2 key 
     ec2_key: 
     name: "privateKey" 
     region: "x-x-x" 
     register: ec2_key 

    - name: Save private key 
     copy: content="{{ ec2_key.private_key }}" dest="./privateKey.pem" mode=0600 
     when: ec2_key.changed 

    # The Rest is installing LAMP 

信息:

1-我的主机文件是默认的。

2-我用这个命令来运行剧本:

sudo ansible-playbook lamp.yml -vvv -c paramiko

3-发射的向导-1有SSH。

4- myKeyPair是从我的设备导入到控制台的公钥(不知道这是确定)

5-我是一个大菜鸟

+0

你为什么不跟着例如,从[文档](http://docs.ansible.com/ansible/latest/ec2_module.html)?请注意,_Wait用于SSH上传任务。下一个你会遇到的问题是在远程主机上执行'ec2_key'。 –

回答

0

Ansible需要在虚拟机安装Python工作。

这里是你需要的代码:

- name: upload an ssh keypair to ec2 
    hosts: localhost 
    connection: local 
    gather_facts: False 
    vars: 
     keypair_name: Key_name 
     key_material: "{{ lookup('file', 'keyfile') }}" 
     region: "{{ region }}" 


    tasks: 
     - name: ssh keypair for ec2 
     ec2_key: 
      aws_access_key: "xxxxxxxxxxxxxxxxxxx" 
      aws_secret_key: "Xxxxxxxxxxxxxxxxxxx" 
      region: "{{ region }}" 
      name: "{{ keypair_name }}" 
      key_material: "{{ key_material }}" 
      state: present 


    - name: Power up an ec2 with LAMP stack installed 
    hosts: localhost 
    become: true 
    become_user: root 
    gather_facts: False 
    vars: 
     keypair: myKeyPair 
     security_group: launch-wizard-1 
     instance_type: t2.micro 
     image: ami-47205e28 
     region: x-x-x 
     my_user_data: | # install Python: Ansible needs Python pre-installed on the instance to work! 
     #!/bin/bash 
     sudo apt-get install python -y 

    tasks: 
     - name: Adding Python-pip 
     apt: name=python-pip state=latest 

     - name: Install Boto Library 
     pip: name=boto 

     - name: Launch instance (Amazon Linux) 
     ec2: 
      key_name: "{{ keypair }}" 
      group: "{{ security_group }}" 
      instance_type: "{{ instance_type }}" 
      image: "{{ image }}" 
      wait: true 
      wait_timeout: 300 
      user_data: "{{my_user_data}}" 
      region: "{{ region }}" 
      aws_access_key: "xxxxxxxxxxxxxxxxxxx" 
      aws_secret_key: "Xxxxxxxxxxxxxxxxxxx" 
     register: ec2 

     - name: Add all instance public IPs to host group 
     add_host: hostname={{ item.public_ip }} groups=ec2hosts 
     with_items: "{{ ec2.instances }}"