1

Я пытаюсь установить Apache на экземпляр EC2 через Ansible. Мой сборник пьес выглядит следующим образом:Установка Apache через Ansible

# Configure and deploy Apache 
- hosts: localhost 
    connection: local 
    remote_user: ec2-user 
    gather_facts: false 
    roles: 
    - ec2_apache 
    - apache 

В «ec2_apache» положения роли Экземпляр EC2 и первая задача в Apache/main.yml выглядит следующим образом:

- name: confirm using the latest Apache server 
    become: yes 
    become_method: sudo 
    yum: 
    name: httpd 
    state: latest 

Однако, я набираюсь следующее сообщение об ошибке:

"module_stderr": "sudo: a password is required\n" 

я взглянуть на: How to switch a user per task or set of tasks?, но это не похоже, чтобы решить мою проблему.

Поскольку конфигурация экземпляра Ec2 находится в одной роли, а установка Apache в другом, я каким-то образом защитил систему безопасности?

+1

Вам нужен пароль, когда вы используете 'sudo', когда находитесь на экземпляре как' ec2-user'? – ydaetskcoR

+0

Нет, если я ssh во вновь созданный экземпляр, я могу сделать базовый «sudo ls/etc». Вот что меня задело. Весь пример, который я нашел в Интернете, и через StackOverflow, не адресует создание EC2 и THEN, устанавливая какую-то часть программного обеспечения или как минимум в рамках отдельных ролей. –

ответ

2

Проблема заключается в том, что ваша игра, в которой выполняются обе роли, нацелена на localhost, поэтому ваша роль Apache пытается запустить локально, а не на целевой экземпляр EC2, sudo yum install httpd.

Как показано на примере ec2 module docs, вы должны использовать модуль add_host, чтобы добавить новые экземпляры EC2 в группу, которую вы можете настроить с последующей игрой.

Так что ваш Playbook может выглядеть примерно так:

# Configure and deploy Apache 
- name: provision instance for Apache 
    hosts: localhost 
    connection: local 
    remote_user: ec2-user 
    gather_facts: false 
    roles: 
    - ec2_apache 

- name: install Apache 
    hosts: launched 
    remote_user: ec2-user 
    roles: 
    - apache 

А потом, как в примере в модуле ec2 документации, просто сделать что-то подобное в вашей ec2_apache роли:

- name: Launch instance 
    ec2: 
    key_name: "{{ keypair }}" 
    group: "{{ security_group }}" 
    instance_type: "{{ instance_type }}" 
    image: "{{ image }}" 
    wait: true 
    region: "{{ region }}" 
    vpc_subnet_id: subnet-29e63245 
    assign_public_ip: yes 
    register: ec2 

- name: Add new instance to host group 
    add_host: hostname={{ item.public_ip }} groupname=launched 
    with_items: ec2.instances 

- name: Wait for SSH to come up 
    wait_for: host={{ item.public_dns_name }} port=22 delay=60 timeout=320 state=started 
    with_items: ec2.instances 

В стороне вы можете быстро увидеть, что ваша роль ec2_apache на самом деле довольно универсальна, и вы можете превратить ее в общую роль ec2_provision, которую могли бы использовать всевозможные другие вещи, помогая вам повторно использовать ваш код.

+0

Я выстрелил, но радости не было. В обоих случаях я вижу следующее: fatal: [xxx.xxx.xx.xx]: FAILED! => {"changed": false, "failed": true, "module_stderr": "sudo: требуется пароль \ n", "module_stdout": "", "msg": "MODULE FAILURE", "parsed": false} где «xx.xxx.xx.xxx» - это экземпляр EC2, с которым я пытаюсь установить связь. Означает ли это, что Ansible работает против правильного хоста EC2? –

Смежные вопросы