我已经启动了我的第一个实例,并将其用作 Web 服务器。我看到它有一个公共 DNS(公共 URL),例如:
ec2-123-45-6-789.compute-1.amazonaws.com
我可以通过浏览器成功访问该服务器,通过 cURL 等方式访问它。
我想将此 Web 服务器用作我正在构建的应用程序中后端服务,因此我将这个 URL 放在了我的应用程序的配置中,并且效果很好。
但是当我手动停止并重新启动我的实例时,我看到公共 DNS 发生了变化!我读到过,当您明确停止并重新启动时会发生这种情况,但如果您只是“重新启动”,则不会发生这种情况。
我并不打算明确停止并重新启动该服务器,但我的问题是:这个公共 DNS 是否会因为某种原因而自行改变?例如,如果机器异常崩溃,或者其他情况。
换句话说,运送连接到此 URL 的应用程序是否安全?
答案1
公共 DNS 名称始终与公共 IP 地址匹配。
实例的公共 IP 地址保持不变,直到实例终止或停止。重新启动不会更改公共 IP 地址。
如果 EC2 实例位于 VPC 中,那么它将在停止和启动时保留相同的公共 IP 地址。
如果不在 VPC 中的 EC2 实例停止后再重新启动,它可能会收到不同的公共 IP 地址。
实例可能会失败。当您启动新实例来替换失败或终止的实例时,它可能会收到不同的公共 IP 地址。
因为实例可能会失败,而且您可能想要更改实例的大小(使用停止/启动),所以不建议“发布连接到 [公共 IP 地址](或 DNS 名称)的应用程序”。一旦您的实例停止/终止/失败,其他用户可以将该 IP 地址分配给他们的实例,并且您的所有流量都会流向他们。
建议使用弹性 IP 地址将公共服务与您的实例关联。您可以保留弹性 IP 地址,并且可以随时间将其分配给您想要的任何实例,即使它是停止/启动后的同一实例。
每个弹性 IP 地址都带有一个公共 DNS 名称,但您最好将自己的主机名映射到弹性 IP 地址,以便该名称对人类更有意义。
以下是弹性 IP 地址的指南:
这是我写的一篇文章,讨论了重新启动和停止/启动实例之间的区别:
重启与停止/启动 Amazon EC2 实例
http://alestic.com/2011/09/ec2-reboot-stop-start
这是我写的一篇文章,其中提供了一个您可能想要停止/启动实例的理由,即使您认为今天不会这样做:
将 EC2 实例移动到更大的尺寸
http://alestic.com/2011/02/ec2-change-type
答案2
更改 DNS 公共名称的更新/更正 这两个保持不变:“公共 DNS 名称始终与公共 IP 地址匹配。
实例的公共 IP 地址保持不变,直到实例终止或停止。重新启动不会更改公共 IP 地址。
如果你停止并在 VPC 中重新启动 EC2 实例,在大多数情况下,它可能会接收不同的公共 IP地址。