“assign_public_ip:no”仍在创建公共IP:Ansible和EC2

时间:2017-01-31 12:47:11

标签: amazon-ec2 ansible

我已经为我的ec2创建任务定义了assign_public_ip: no

- name: Basic provisioning of EC2 instance
      ec2:
        assign_public_ip: no
        aws_access_key: "{{ aws_id }}"
        aws_secret_key: "{{ aws_key }}"
        region: "{{ aws_region }}"
        image: "{{ standard_ami }}"
        instance_type: "{{ free_instance }}"
        key_name: "{{ ssh_keyname }}"
        count: 3
        state: present
        group_id: "{{ secgroup_id }}"
        wait: no
        #delete_on_termination: yes

        instance_tags:
          Name: Dawny33Template
      register: ec2

然而,产生的实例被分配了公共IP:

TASK [Add new instance to host group] ******************************************
changed: [localhost] => (item={u'kernel': None, u'root_device_type': u'ebs', u'private_dns_name': u'ip-172-31-45-61.us-west-2.compute.internal', u'public_ip': u'35.167.242.55', u'private_ip': u'172.31.45.61', u'id': u'i-0b2f186f2ea822a61', u'ebs_optimized': False, u'state': u'pending', u'virtualization_type': u'hvm', u'root_device_name': u'/dev/xvda', u'ramdisk': None, u'block_device_mapping': {u'/dev/xvda': {u'status': u'attaching', u'delete_on_termination': True, u'volume_id': u'vol-07e905319086716c9'}}, u'key_name': u'Dawny33Ansible', u'image_id': u'ami-f173cc91', u'tenancy': u'default', u'groups': {u'sg-eda31a95': u'POC'}, u'public_dns_name': u'ec2-35-167-242-55.us-west-2.compute.amazonaws.com', u'state_code': 0, u'tags': {u'Name': u'Dawny33Template'}, u'placement': u'us-west-2b', u'ami_launch_index': u'2', u'dns_name': u'ec2-35-167-242-55.us-west-2.compute.amazonaws.com', u'region': u'us-west-2', u'launch_time': u'2017-01-31T06:25:38.000Z', u'instance_type': u't2.micro', u'architecture': u'x86_64', u'hypervisor': u'xen'})

有人可以帮我理解为什么会这样吗?

2 个答案:

答案 0 :(得分:1)

" assign_public_ip"字段是bool值。 here

有人确实在ansible-module-core库中解决了这个问题,但没有反映出变化。 here

答案 1 :(得分:1)

这里的问题是我在公共VPC中启动了slave实例。因此,默认情况下会分配公共IP。

因此,如果不需要公共IP,则需要在VPC的私有子网中启动实例。例如,下面是在私有子网中配置EC2实例的示例任务:

- name: Basic provisioning of EC2 instance
  ec2:
    assign_public_ip: no
    aws_access_key: "{{ aws_id }}"
    aws_secret_key: "{{ aws_key }}"
    region: "{{ aws_region }}"
    image: "{{image_instance }}"
    instance_type: "{{ free_instance }}"
    key_name: "{{ ssh_keyname }}"
    count: 3
    state: present
    group_id: "{{ secgroup_id }}"
    vpc_subnet_id: "{{ private_subnet_id }}"
    wait: no
    instance_tags:
      Name: {{ template_name }}
  #delete_on_termination: yes
  register: ec2