3

我正在尝试使用Ansible创建一个EC2实例,配置一个Web服务器,然后将其注册到负载平衡器。我在创建EC2实例时没有问题,也没有配置Web服务器,但是根据我使用的代码,尝试在现有负载平衡器上注册它的所有尝试都会因错误而发生错误。如何使用Ansible创建AWS EC2实例并将其分配给ELB?

有没有人有过这样做的成功?

这里是链接到Ansible文档的EC2和ec2_elb模块:

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

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

或者,如果它不能够进行对ELB创建后注册EC2实例,我会安排另一个收集所有具有特定名称的EC2实例的“游戏”,并通过它们循环,将它们添加到ELB中。

+0

您是否需要使用Ansible?使用'boto.ec2.elb'模块做同样的事情非常简单。 – Ross

+0

elb模块实际上有如何使用它的例子..你是否尝试过在你的剧本中实现它?如果是这样,结果如何? – Mxx

+0

你使用的是什么版本的软件?我知道ec2_elb模块有很多最近的bug修复。具体来说,在12月9日有一个修复:“尚未注册的实例帐户,修复#5076”可能与您遇到的问题有关。 –

回答

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_*变量。当然你可以自己填写这些参数。

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