【问题标题】:Allocate EC2 through Ansible通过 Ansible 分配 EC2
【发布时间】:2016-06-01 14:01:23
【问题描述】:

通过 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 的值 () 无效。值不能为空'

如果我尝试以下操作:

- 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 }} 是在 AWS 控制台中找到的“组 ID”(例如 sg-xxxxxx),我收到同样的错误。 Ansible 文档指出,“group”和“group_id”用于指定安全组 (http://docs.ansible.com/ansible/ec2_module.html)。

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

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

【问题讨论】:

  • 请确保region参数和AWS_REGIONEC2_REGION环境变量正确。如果您使用ec2_group 创建组,请检查您是否使用了正确的vpc_id 参数。
  • 不创建组,而是创建一个 ec2 实例。
  • 你可以参考这个github repo:github.com/arbabnazar/ansible-aws-roles以获得详细说明

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


【解决方案1】:

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

听起来这些变量没有定义;你在哪里定义它们?不使用变量,而是直接把值放进去,是否有效?

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

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

使用group_id 而不是group 的主要优点之一是,如果您不小心将子网用于错误的 VPC,则会收到错误消息,而如果您在多个 VPC 中有同名的安全组,使用group 和不正确的vpc_subnet_id 将成功地在错误的位置启动机器。

【讨论】:

    【解决方案2】:

    无法在您的剧本中指定VPC ID。相反,您指定vpc_subnet_id。 AWS 可以根据子网 ID 找出 VPC。您没有指定子网 ID,因此 AWS 假定您要在 EC2 Classic 中启动它。由于在EC2 Classic 中未找到指定的安全组,您将收到not foundinvalid 错误。

    如何解决这个问题?找到您要在其中启动实例的子网的id。每个 VPC 可以有多个公有和/或私有子网。在 AWS 控制面板中,选择 VPC Service,它将列出子网和 VPC。找到您要在其中启动的子网,并在 playbook 中指定其 id。

    vpc_subnet_id: subnet-29e63245
    

    【讨论】:

      猜你喜欢
      • 2023-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多