如何使用Ansible创建AWS EC2实例并将其分配给ELB?

时间:2014-02-19 16:54:46

标签: amazon-web-services amazon-ec2 ansible amazon-elb ansible-playbook

我正在尝试使用Ansible创建EC2实例,配置Web服务器,然后将其注册到负载均衡器。我没有创建EC2实例的问题,也没有配置Web服务器,但是根据我使用的代码,所有尝试将其注册到现有负载均衡器的失败都会因错误而异。

有没有人成功这样做过?

以下是ec2和ec2_elb模块的Ansible文档的链接:

http://docs.ansible.com/ec2_module.html

http://docs.ansible.com/ec2_elb_module.html

或者,如果无法针对ELB帖子创建注册EC2实例,我会选择另一个“播放”来收集具有特定名称的所有EC2实例并循环遍历它们,将它们添加到ELB。

2 个答案:

答案 0 :(得分:3)

这就是我的工作:

- name: Add machine to elb
  local_action:
      module: ec2_elb
      aws_access_key: "{{lookup('env', 'AWS_ACCESS_KEY')}}"
      aws_secret_key: "{{lookup('env', 'AWS_SECRET_KEY')}}"
      region: "{{ansible_ec2_placement_region}}"
      instance_id: "{{ ansible_ec2_instance_id }}"
      ec2_elbs: "{{elb_name}}"
      state: present

最大的问题是访问和密钥。 ec2_elb模块似乎没有使用环境变量或读取〜/ .boto,所以我不得不手动传递它们。

如果使用ec2_facts模块,ansible_ec2_*变量可用。您当然可以自己填写这些参数。

答案 1 :(得分:0)

下面的剧本应该适用于创建ec2服务器并将其注册到elb。确保正确设置了变量,或者您也可以在playbook中对变量值进行硬编码。

- name: Creating webserver
  local_action:
    module: ec2
    region: "{{ region }}"
    key_name: "{{ key }}"
    instance_type: t1.micro
    image: "{{ ami_id }}"
    wait: yes
    assign_public_ip: yes
    group_id: ["{{ sg_webserver }}"]
    vpc_subnet_id: "{{ PublicSubnet }}"
    instance_tags: '{"Name": "webserver", "Environment": "Dev"}
  register: webserver
- name: Adding Webserver to ELB
  local_action: 
    module: ec2_elb
    ec2_elbs: "{{ elb_name }}"
    instance_id: "{{ item.id }}"
    state: 'present'
    region: "{{ region }}"
  with_items: nat.instances