我的 AWS 账户中的弹性 IP 分配已达到上限。我有一个通过 Cloudfront 提供的 Elastic Beanstalk 应用程序。我认为,由于应用程序的 CNAME 已映射到 Cloudfront 的 CNAME,因此释放 EB 应用程序的 ec2 实例的弹性 IP 应该没问题,所以我这样做了。但是,EB 应用程序已停止工作。即使我尝试使用 Cloudfront 的 CNAME 访问 Web 应用程序,仍然无法访问。在弹性 IP 释放后不久,ec2 实例就分配了一个公共 IP 地址。
有人能解释一下吗?我该如何解决这个问题?
谢谢
答案1
简而言之:CloudFront不会坐在你的 VPC 中,而是与你的EB通过公共互联网。因此您的EB需要公共 IP 可从CloudFront。公网 IP 可以是 Elastic IP,也可以是“标准”临时公网 IP。
弹性 IP有一些优势标准公网 IP- 最重要的是,它可以从一个 EC2 实例移动到另一个 EC2 实例,并且即使 EC2 停止,它仍会分配在您的帐户中。
我不确定 EB 是否可以与标准公共 IP(非 EIP)。我猜不是,因为它们非常不稳定且不可预测,当它们更改时,更新 EB DNS 名称可能非常复杂。另一方面,弹性 IP 已分配给您的帐户,并且可以在 EB 实例之间移动,因此无需更新 DNS。
您可能需要将旧的 EIP 附加回 EB 才能使其重新工作。
我建议你提出AWS 支持请求 ➡ 服务限制增加并请求可用 EIP 数量增加 5 或 10。
希望有帮助:)
答案2
我最终自己弄清楚了这一点。看起来取决于您的 EB 环境的类型,公共 IP 地址的工作方式不同。
对于单实例环境(我这里的情况),AWS 无论如何都会分配一个弹性 IP 地址。根据文档:
单实例环境包含一个具有弹性 IP 地址的 Amazon EC2 实例。
所以基本上,只要您的环境保持单实例,您就不能摆脱已分配给您的实例的弹性 IP,否则您的环境将像我的情况一样停止工作。
解决方案:
我通过将环境更改为负载平衡来修复它,最小值为 1,最大值为 1,实例数始终保持为 1。负载平衡环境依赖于 ELB 的 CNAME,而不是 EC2 的 IP 地址,因此即使我的 ec2 实例的公共 IP 发生变化,我的 EB 应用程序的 DNS 记录也不会受到影响,cloudfront 分发也不会受到影响。