Amazon ec2 通过Ansible分配EC2

Amazon ec2 通过Ansible分配EC2,amazon-ec2,ansible,ansible-2.x,Amazon Ec2,Ansible,Ansible 2.x,当通过Ansible创建EC2实例时,如何指定安全组(这是针对非默认帐户的Amazon VPC环境)?在我的例子中,我试图将一个安全组(当前存在)分配给我的webserver EC2实例,该实例将流量限制为仅来自位于它前面的ELB的流量。如果我尝试以下方法: - name: Create webserver instance ec2: key_name: "{{ project_name }}-{{ env }}-key" image: "{{ image }}"

当通过Ansible创建EC2实例时,如何指定安全组(这是针对非默认帐户的Amazon VPC环境)?在我的例子中,我试图将一个安全组(当前存在)分配给我的webserver 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
- 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\u group\u name}}是在AWS控制台中找到的“组名”,我收到以下错误:“参数groupId的值()无效。”。该值不能为空'

如果我尝试以下方法:

- 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
- 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\u group\u id}}是在AWS控制台中找到的“组id”(例如sg-xxxxxx),我收到了相同的错误。Ansible文档说明“组”和“组id”用于安全组的规范()

我能想到的唯一一件事是,AWS找不到安全组,因为我正在创建它,它不知道要将其放置在哪个VPC中,或者它正在将其放置在我的默认VPC中,并且找不到安全组,因为它位于不同的VPC中

因此,可能更好的问题是,如何为特定EC2实例指定专有网络(当我在一个区域中有多个专有网络时)

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

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

因此,可能更好的问题是,如何为特定EC2实例指定专有网络(当我在一个区域中有多个专有网络时)

专有网络由其他值暗示,尤其是
group
/
group\u id
VPC\u subnet\u id

使用
group\u id
而不是
group
的一个主要优点是,如果意外地将子网用于错误的VPC,则会出现错误,而如果在多个VPC中有同名的安全组,使用
group
和不正确的
vpc\u子网\u id
将成功地在错误的位置启动机器

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

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

因此,可能更好的问题是,如何为特定EC2实例指定专有网络(当我在一个区域中有多个专有网络时)

专有网络由其他值暗示,尤其是
group
/
group\u id
VPC\u subnet\u id


使用
group\u id
而不是
group
的一个主要优点是,如果意外地将子网用于错误的VPC,则会出现错误,而如果在多个VPC中有同名的安全组,使用
group
和不正确的
vpc\u子网\u id
将成功地在错误的位置启动计算机。

无法在您的剧本中指定
vpc id
。而是指定
vpc\u子网\u id
。AWS可以根据子网id计算VPC。您没有指定子网id,因此AWS假定您希望在
EC2 Classic
中启动它。由于在
EC2 Classic
中找不到指定的安全组,因此将出现
未找到
无效
错误

如何解决这个问题?查找要在其中启动实例的子网的
id
。每个VPC可以有一个或多个公用和/或专用子网。从AWS仪表板中,选择
VPC服务
,该服务将列出子网和VPC。找到要在其中启动的子网,并在playbook中指定其id

vpc_subnet_id: subnet-29e63245

无法在您的剧本中指定
专有网络ID
。而是指定
vpc\u子网\u id
。AWS可以根据子网id计算VPC。您没有指定子网id,因此AWS假定您希望在
EC2 Classic
中启动它。由于在
EC2 Classic
中找不到指定的安全组,因此将出现
未找到
无效
错误

如何解决这个问题?查找要在其中启动实例的子网的
id
。每个VPC可以有一个或多个公用和/或专用子网。从AWS仪表板中,选择
VPC服务
,该服务将列出子网和VPC。找到要在其中启动的子网,并在playbook中指定其id

vpc_subnet_id: subnet-29e63245

请确保
region
参数和
AWS\u region
EC2\u region
环境变量正确。如果使用
ec2\u group
创建组,请检查是否使用了正确的
vpc\u id
参数。不创建组,而是创建ec2实例。能否参考此github repo:有关详细说明,请确保
region
参数和
AWS\u region
ec2\u region
环境变量正确。如果使用
ec2\u group
创建组,请检查是否使用了正确的
vpc\u id
参数。不创建组,而是创建ec2实例。有关详细说明,请参阅此github repo: