今天我正在尝试将多个弹性IP分配给多个不同的私有IP地址。
注意:IP地址是假的,我写这些是为了让你明白我想做什么。
这是我迄今取得的成就:
Server 1
Elastic Network Interface
Private IP 172.x.x.1 (public IP: 55.x.x.1)
Secondary Private IP
172.x.x.2 (public IP: NONE SET)
172.x.x.3 (public IP: NONE SET)
Server 2
Elastic Network Interface
Private IP 174.x.x.1 (public IP: 57.x.x.1)
Secondary Private IP
174.x.x.2 (public IP: NONE SET)
174.x.x.3 (public IP: NONE SET)
这就是我想要实现的目标:
Server 1
Elastic Network Interface
Private IP 172.x.x.1 (public IP: 55.x.x.1)
Secondary Private IP
172.x.x.2 (public IP: 55.x.x.2)
172.x.x.3 (public IP: 55.x.x.3)
Server 2
Elastic Network Interface
Private IP 174.x.x.1 (public IP: 57.x.x.1)
Secondary Private IP
174.x.x.2 (public IP: 57.x.x.2)
174.x.x.3 (public IP: 57.x.x.3)
这是我到目前为止写的Ansible剧本:
{{ platform }}
是通过CLI传递的额外var。
- name: Provision a set of Edge instances
ec2:
key_name: ec2user
group: "launch-wizard-1"
instance_type: "m4.2xlarge"
image: "ami-xxxxxxx"
region: "eu-west-1"
wait: true
exact_count: 2
count_tag:
PlatformName: "{{ platform }}"
Role: Edge
instance_tags:
Name: "{{ platform }}::Edge"
PlatformName: "{{ platform }}"
Role: Edge
LongName: "Edge server for {{ platform }}'s platform"
Groups: common,server,rabbitmq,memcache,stats,cache-manager,media,content,icecast
register: edge_ec2
- name: Find ENIs created for Edge instances
ec2_eni_facts:
region: "eu-west-1"
filters:
attachment.instance-id: "{{ item }}"
with_items: "{{ edge_ec2.instance_ids }}"
register: edge_enis
- name: Adds an additional private IP to the Edge ENIs
ec2_eni:
region: "eu-west-1"
eni_id: "{{ item.interfaces[0].id }}"
subnet_id: "{{ item.interfaces[0].subnet_id }}"
state: present
secondary_private_ip_address_count: 2
register: created_ips
with_items: "{{ edge_enis.results }}"
- name: Adds additional elastic IPs to the Edge ENIs
ec2_eip:
device_id: "{{ item.0.interface.attachment.instance_id }}"
region: "eu-west-1"
private_ip_address: "{{ item.1.private_ip_address }}"
in_vpc: true
register: eips
with_subelements:
- "{{ created_ips.results }}"
- interface.private_ip_addresses
为什么不将新分配的弹性IP分配给辅助私有IP,而只分配给主要IP,即使我明确指示将其分配给辅助私有IP?
答案 0 :(得分:0)
我不知道为什么Ansible ec2_eip模块无法创建新的弹性IP并将其分配给指定的辅助私有IP地址,但我确实发现了一种解决方法。
我遇到了同样的问题 - 在我看来private_ip_address
选项被忽略了。这是我的代码片段无效:
- name: try to create an EIP and associate it in one pass
ec2_eip:
device_id: "{{ item.network_interfaces[0].network_interface_id }}"
private_ip_address: "{{ item.network_interfaces[0].private_ip_addresses[1].private_ip_address }}"
region: ap-southeast-2
in_vpc: true
with_items: "{{ servers.results[0].instances }}"
我的解决方法是预先创建弹性IP,然后在单独的任务中将它们与私有IP相关联。
- name: "allocate a new elastic IP for each server without associating it with anything"
ec2_eip:
state: 'present'
region: ap-southeast-2
register: eip2
with_items: "{{ servers.results[0].instances }}"
- name: Associate elastic IPs with the first interface attached to each instance
ec2_eip:
public_ip: "{{ eip2.results[item.0].public_ip }}"
device_id: "{{ item.1.network_interfaces[0].network_interface_id }}"
private_ip_address: "{{ item.1.network_interfaces[0].private_ip_addresses[1].private_ip_address }}"
region: ap-southeast-2
in_vpc: true
with_indexed_items: "{{ servers.results[0].instances }}"
我的主要发现是,如果您提供public_ip
,则private_ip_address
选项开始被识别。