1

给定:
我们想要重用的一个(或多个)弹性 IP。(IP 池)
一个 CloudFormation 模板,其机器具有与之关联的弹性 IP。(通过 AWS::EC2::EIPAssociation)启动/拆除从共享 EIP 池获取 ips 的多个 CloudFormation 堆栈。(ip是堆栈中的一个参数,在堆栈启动之前计算)

我的预期是,如果一个 VPC / CloudFormation 堆栈已经在使用 EIP,那么其他使用它的尝试将会失败。
事实证明,如果您尝试在另一个堆栈中使用相同的 EIP,它将起作用。EIP 将绑定到最新创建的堆栈。

更糟糕的是,如果说堆栈 1 使用 EIP,堆栈 2 使用相同的 EIP,如果在堆栈 2 使用后拆除堆栈 1,“偷”了 IP,堆栈 2 将丢失 IP(导致IP 是免费的 - 即不绑定到任何实例)。

有没有人遇到过这个问题?你如何确保你没有在上述情况下跑步?

我必须使用 ips 的原因是它们被列入白名单,以便在我通过公共互联网与之交互的系统中进行访问。流量必须来自该池中的 IP,不能随便抓取任何随机公共 IP。

4

2 回答 2

1

如果您想要通过 cloudformation 实现,我不是 100%。但就我个人而言,我会以不同的方式来做。Cloudformation 非常擅长它的功能,但是当您想要开始添加逻辑和条件时,它会遇到困难。

像往常一样创建所有实例,但不要尝试绑定 eip,而是使用用户数据脚本和 aws cli 搜索未附加的 eip 并附加它。使用 cli 执行此操作将为您提供更多功能。

祝你好运

于 2015-08-08T10:05:03.603 回答
1

不要将 EIP 直接附加到实例,而是附加一个附加了 EIP 的 ENI。如果 ENI 正在使用中,它不会从当前附加到的实例中分离。

于 2015-08-08T22:18:24.750 回答