通过Ansible分配EC2

时间:2016-06-01 14:01:24

标签: amazon-ec2 ansible ansible-2.x

通过Ansible创建EC2实例时,如何指定安全组(这适用于非默认帐户的Amazon VPC环境)?在我的情况下,我试图将一个安全组(当前存在)分配给我的网络服务器EC2实例,该实例将流量限制为仅来自位于其前面的ELB的流量。如果我尝试以下内容:

- name: Create webserver instance
  ec2: 
    key_name: "{{ project_name }}-{{ env }}-key"
    image: "{{ image }}"
    instance_type: "{{ instance_type }}"
    instance_tags: '{"Name":"{{ project_name }}-{{ env }}-{{ webserver_name }}","Owner":"{{ project_name }}", "Type":"{{ webserver_name }}","Environment":"{{ env }}"}'
    region: "{{ aws_region }}"
    group: "{{ security_group_name }}"
    wait: true
  register: ec2

其中{{security_group_name}}是'群组名称'在AWS控制台中找到,我收到以下错误:'参数groupId的Value()无效。该值不能为空'

如果我尝试以下方法:

- name: Create webserver instance
  ec2: 
    key_name: "{{ project_name }}-{{ env }}-key"
    image: "{{ image }}"
    instance_type: "{{ instance_type }}"
    instance_tags: '{"Name":"{{ project_name }}-{{ env }}-{{ webserver_name }}","Owner":"{{ project_name }}", "Type":"{{ webserver_name }}","Environment":"{{ env }}"}'
    region: "{{ aws_region }}"
    group_id: "{{ security_group_id }}"
    wait: true
  register: ec2

其中{{security_group_id}}是'群组ID'在AWS控制台中找到(例如sg-xxxxxx),我收到同样的错误。 Ansible文档指出' group'和' group_id'用于安全组的规范(http://docs.ansible.com/ansible/ec2_module.html)。

我唯一能想到的是AWS无法找到安全组,因为我正在创建它并且它不知道将其放入的VPC,或者它将它放在我的默认VPC中,并且找不到安全组它是在一个不同的VPC。

所以,或许更好的问题是,如何为特定EC2实例指定VPC(当我在一个区域中有多个VPC时)?

2 个答案:

答案 0 :(得分:0)

  

我收到以下错误:'参数groupId的值()无效。该值不能为空'

听起来这些变量没有定义;你在哪里定义它们?当你不使用变量但直接输入值时它是否有用?

  

所以,或许更好的问题是,如何为特定EC2实例指定VPC(当我在一个区域中有多个VPC时)?

其他值隐含了VPC,特别是group / group_idvpc_subnet_id

使用group_id代替group的一个主要优点是,如果您不小心将子网用于错误的VPC,则会出现错误,而如果您的安全组具有相同的安全组多个VPC中的名称,使用group和不正确的vpc_subnet_id将成功在错误的位置启动计算机。

答案 1 :(得分:0)

无法在剧本中指定initWidget(uiBinder.createAndBindUi(this));。而是指定VPC ID。 AWS可以根据子网ID确定VPC。您没有指定子网ID,因此AWS假定您要在vpc_subnet_id中启动它。由于在EC2 Classic中找不到指定的安全组,因此您收到EC2 Classicnot found错误。

如何解决这个问题?找到要启动实例的子网的invalid。每个VPC可以有一个或多个公共和/或私有子网。在AWS仪表板中,选择将列出子网和VPC的id。找到要在其中启动的子网,并在剧本中指定其ID。

VPC Service