2016-04-06 9 views
6

Mi piacerebbe creare e fornire macchine Amazon EC2 con l'aiuto di Ansible. Ora, ottengo il seguente errore:Ansible Amazon EC2. La coppia di chiavi non esiste

fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "msg": "Instance creation failed => InvalidKeyPair.NotFound: The key pair '~/.keys/EC2-Kibi-Enterprise-Deployment.pem' does not exist"} 

Ma esiste la chiave .pem:

$ ls -lh ~/.keys/EC2-Kibi-Enterprise-Deployment.pem 
-r-------- 1 sergey sergey 1.7K Apr 6 09:56 /home/sergey/.keys/EC2-Kibi-Enterprise-Deployment.pem 

ed è stato creato nella regione di UE (Irlanda).

Ecco il mio playbook:

-- 
- name: Setup servers on Amazon EC2 machines 
    hosts: localhost 
    gather_facts: no 

    tasks: 
    - include_vars: group_vars/all/ec2_vars.yml 

    ### Create Amazon EC2 instances 
    - name: Amazon EC2 | Create instances 
     ec2: 
     count: "{{ count }}" 
     key_name: "{{ key }}" 
     region: "{{ region }}" 
     zone: "{{ zone }}" 
     group: "{{ group }}" 
     instance_type: "{{ machine }}" 
     image: "{{ image }}" 
     wait: true 
     wait_timeout: 500 
     #vpc_subnet_id: "{{ subnet }}" 
     #assign_public_ip: yes 
     register: ec2 

    - name: Amazon EC2 | Wait for SSH to come up 
     wait_for: 
     host: "{{ item.public_ip }}" 
     port: 22 
     delay: 10 
     timeout: 60 
     state: started 
     with_items: "{{ ec2.instances }}" 

    - name: Amazon EC2 | Add hosts to the kibi_servers in-memory inventory group 
     add_host: hostname={{ item.public_ip }} groupname=kibi_servers 
     with_items: "{{ ec2.instances }}" 
    ### END 

### Provision roles 
- name: Amazon EC2 | Provision new instances 
    hosts: kibi_servers 
    become: yes 
    roles: 
    - common 
    - java 
    - elasticsearch 
    - logstash 
    - nginx 
    - kibi 
    - supervisor 
### END 

E il mio var file:

count: 2 
region: eu-west-1 
zone: eu-west-1a 
group: default 
image: ami-d1ec01a6 
machine: t2.medium 
subnet: subnet-3a2aa952 
key: ~/.keys/EC2-Kibi-Enterprise-Deployment.pem 

Cosa c'è di sbagliato con il file .pem qui?

risposta

10

Il parametro key per ec2 module cerca il nome della coppia di chiavi che è già stato caricato in AWS, non una chiave locale.

Se si desidera che Ansible carichi una chiave pubblica, è possibile utilizzare ec2_key module.

Così il vostro playbook sarebbe simile a questa:

-- 
- name: Setup servers on Amazon EC2 machines 
    hosts: localhost 
    gather_facts: no 

    tasks: 
    - include_vars: group_vars/all/ec2_vars.yml 

    ### Create Amazon EC2 key pair 
    - name: Amazon EC2 | Create Key Pair 
     ec2_key: 
     name: "{{ key_name }}" 
     region: "{{ region }}" 
     key_material: "{{ item }}" 
     with_file: /path/to/public_key.id_rsa.pub 

    ### Create Amazon EC2 instances 
    - name: Amazon EC2 | Create instances 
     ec2: 
     count: "{{ count }}" 
     key_name: "{{ key_name }}" 
     ... 
+0

Devo creare una coppia di chiavi SSH localmente e importare la chiave pubblica nella console di Amazon? È la chiave? – trex

+0

È necessario caricare la chiave pubblica (non la parte privata) in AWS. Puoi farlo tramite la console o puoi farlo tramite Ansible come nell'esempio. – ydaetskcoR

+0

Sembra che il modulo 'ec2_keypair' non esista. Ma c'è il modulo [ec2_key] (http://docs.ansible.com/ansible/ec2_key_module.html). L'ho usato e indicato anche 'key_name: ~/.ssh/EC2-Kibi-Enterprise' nel file var. Ora ho il seguente errore: 'fallito: [localhost] => (item = ssh-rsa AA ...", "msg": "È necessario specificare una regione o ec2_url"} ". – trex

2

La soluzione è stata trovata. EC2 non piace quando si inserisce un percorso completo per il file chiave .pem.

Così, mi sono trasferito EC2-Kibi-Enterprise-Deployment.pem in ~/.ssh, aggiunto al agente di autenticazione con ssh-add utilizzando:

ssh-add ~/.ssh/EC2-Kibi-Enterprise-Deployment.pem 

e corretto la linea chiave nel mio file var a
key: EC2-Kibi-Enterprise-Deployment.pem

Lo stesso se si utilizza Strumenti cli EC2, non specificare un percorso completo per il file chiave.
ec2-run-instances ami-d1ec01a6 -t t2.medium --region eu-west-1 --key EC2-Kibi-Enterprise-Deployment.pem

+0

Devo cambiare chiave da: ~/.keys/EC2-Kibi- Da Enterprise-Deployment.pem a key: ~/.keys/EC2-Kibi-Enterprise-Deployment –