我正在创建一个工具,通过 ElasticBeanstalk 将 Docker 映像部署到 EC2,以便开发团队可以快速演示他们的工作而无需合并。我不希望为这些应用程序启用 Elastic IP,因为它们的寿命很短。
我之所以问这个问题,是因为如果我的工具构建了超过 5 个应用程序(而且速度很快),任何新应用程序都会失败,因为无法为新应用程序分配 Elastic IP。这是因为 AWS 账户通常有一个最多可用 5 个弹性 IP。我可以转到 aws web 控制台并在实例上选择“取消关联弹性 IP 地址”(见下文),之后 ec2 实例将获得一个新的 ip(几分钟后)。这就是我想要的,但我想以编程方式执行此操作,并且更愿意在没有它的情况下启动应用程序,而不是在创建实例后执行此操作。
是否有一个配置选项可以用来禁用新实例的弹性 IP?
我正在使用节点aws-sdk,但任何语言的任何提示都可以。
我正在创建m1.small
单个实例。
如果在启动时无法做到这一点,我必须使用EC2.解除关联地址功能。
答案1
当使用环境类型“单实例”时,您总是会获得一个 EIP。
单实例环境包含一个具有弹性 IP 地址的 Amazon EC2 实例。
禁用“关联公共 IP 地址”选项没有任何效果。
切换到“负载平衡、自动扩展”环境即可无需 EIP 即可运行。
答案2
我不希望这些应用程序启用弹性 IP,因为它们的寿命很短。
如果您位于 VPC 的公共子网中(很有可能),则该实例需要该子网才能与 Internet 通信。http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Internet_Gateway.html:
为了使公有子网中的实例能够与 Internet 通信,它必须具有公有 IP 地址或与实例上的私有 IP 地址关联的弹性 IP 地址。您的实例仅知道 VPC 和子网内定义的私有(内部)IP 地址空间。Internet 网关在逻辑上代表您的实例提供一对一 NAT,因此当流量离开您的 VPC 子网并进入 Internet 时,回复地址字段将设置为您的实例的公有 IP 地址或弹性 IP 地址,而不是其私有 IP 地址。相反,发往您的实例的公有 IP 地址或弹性 IP 地址的流量在传送到 VPC 之前,其目标地址将转换为实例的私有 IP 地址。
新实例附带的自动分配的 EIP 不花费任何费用,并且当实例退役时它们会自动消失。
答案3
有一个弹性豆茎环境选项可能正是您想要的。
命名空间:aws:ec2:vpc AssociatePublicIpAddress:false
如果您设置了它,则此环境创建的所有节点将没有公共 IP。入站流量必须使用负载均衡器。VPC 和子网需要与 NAT 网关或互联网网关关联才能获得出站互联网访问权限。如果您没有出站互联网访问权限,则 Elastic Beanstalk 构建将失败(它将无法访问 AWS 服务)。
答案4
解除弹性 IP 地址关联后,您有大约 10 秒钟的时间来“释放”它。一旦释放,它将不会再回来。