通过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时)?
答案 0 :(得分:0)
我收到以下错误:'参数groupId的值()无效。该值不能为空'
听起来这些变量没有定义;你在哪里定义它们?当你不使用变量但直接输入值时它是否有用?
所以,或许更好的问题是,如何为特定EC2实例指定VPC(当我在一个区域中有多个VPC时)?
其他值隐含了VPC,特别是group
/ group_id
和vpc_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 Classic
或not found
错误。
如何解决这个问题?找到要启动实例的子网的invalid
。每个VPC可以有一个或多个公共和/或私有子网。在AWS仪表板中,选择将列出子网和VPC的id
。找到要在其中启动的子网,并在剧本中指定其ID。
VPC Service