【问题标题】:Refreshing DNS after changing s3 bucket target IP address更改 s3 存储桶目标 IP 地址后刷新 DNS
【发布时间】:2020-12-25 03:59:19
【问题描述】:
我有一个本地端口 8501 托管网站 app.py 的 EC2 实例。
为了提供公共访问权限,我在属性对话框中创建了一个指向 ipaddress:port 的 S3 存储桶,并使用 Route53 指向 s3 存储桶。
但是,当我更新我的 EC2 实例时,IP 地址发生了变化。我更新了 S3 目标,它适用于所有新用户,但之前使用过我网站的人会被重定向到旧 IP 地址。
是否可以在不要求老用户清除缓存的情况下也将其指向新的 IP 地址?
【问题讨论】:
标签:
amazon-s3
amazon-ec2
amazon-cloudfront
amazon-route53
【解决方案1】:
在我看来,有更好的方法来实现你所需要的。
-
为实例分配弹性 IP (EIP)。如果您重新启动甚至停止再启动实例,弹性 IP 不会改变。如果您将实例替换为另一个实例,您只需将 EIP 重新分配给新实例即可。
-
启动应用程序负载均衡器 (ALB) 并将您的实例附加到它。 ALB 将负责将流量路由到实例,无论它具有什么 IP。实例甚至不必有公共 IP,内部 IP 就足够了。
-
考虑使用 Elastic Beanstalk。该服务将为您跨越 EC2 实例和负载均衡器。
【解决方案2】:
如果您更改了前端资产或 html 文件中的 IP 地址(您将拥有这些地址,因为它们是 S3 对象),那么该资产可能会为某些用户缓存。可以通过检查相关资产返回的headers 来观察缓存的长度。
关于未来的预防措施,请避免您无法控制的“硬编码”资产。最终,如果您使用 EC2,IP 可能会更改(您可以attach an elastic IP address 来防止这种情况发生),您可能希望在将来更改它,这意味着使用多个主机或者您使用另一个服务,这再次需要在您的代码。
相反,您应该为您的资产中包含的主机创建一个 DNS 主机名,因为该 DNS 主机名不太可能更改(除非您决定自己做)。创建 A 记录并将其分配给您的 EC2 实例 IP 后,您应该更新您的资产,此过程只需执行一次。
如果将来您决定更改目标,您只需更新 DNS 主机名以指向其他服务即可。这不需要对资产本身进行任何更改,这意味着一旦 DNS 缓存清除,它将针对您的新服务。