首页 文章

Ansible AWS:无法连接到EC2实例

提问于
浏览
1

我想要实现的目标

我想使用一个Ansible playbook创建一个安装了LAMP堆栈的EC2实例 .

问题

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

这是错误:

致命:[35.154.26.86]:无法访问! => {“已更改”:false,“msg”:“[Errno无]无法连接到端口22或35.154.26.86”,“无法访问”: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- launch-wizard-1有SSH .

4- myKeyPair是从我的设备导入控制台的公钥(不知道这是否正常)

5-我是一个大新手

1 回答

  • 0

    Ansible需要在VM上安装 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 }}"
    

相关问题