我是 Amazon EC2/EBS 系统的新手。我正在尝试找出托管 Web 应用程序(php、ASP.NET 等)的“最佳实践”。在我看来,我有两个选择:
- 让实例保存我的网络文件——不需要担心附加卷等?
- 让 EBS 卷保存我的 Web 文件 - 轻松使用新代码进行更新,而无需为新更新重新创建 AMI?
其他人如何处理这个问题?
答案1
如果您的实例是“EBS 支持的”,那么您的根卷将是 EBS。从您的操作系统的角度来看,它看起来就像一个普通卷,但数据将持久保存到 EBS 存储中。您不需要做任何特殊的事情。如果您愿意,您可以附加第二个 EBS 卷来存储您的数据。一旦附加,它看起来就像任何其他卷一样。
如果您的实例是“实例存储”,那么您无法选择停止和重新启动实例。您只能终止它,如果您这样做(无论有意还是无意),对根卷的任何更新都将丢失,您需要重新安装并重新上传数据。
即使您使用 EBS 支持的 EC2 实例,我也建议您创建 AMI 映像,以防您需要创建新实例(如果您的原始实例发生故障或无法访问)。
我建议遵循 gold-ami-instance 模式:
- 创建一个“黄金”EC2 实例,将其视为您的“主副本”。所有更新都针对此实例进行,但您的访问者永远不会访问此实例,只有您可以通过 RDP、SSH 等访问。除更新外,请关闭此实例。
- 创建您的黄金实例的 AMI。
- 根据需要从 AMI 映像创建尽可能多的实例。将您的 Elastic IP 或 ELB 指向这些实例(而不是您的黄金实例)。这些实例应使用安全组阻止 RDP、SSH 访问。仅允许 http/https 通过。
- 当您需要更新您的网站时,启动您的黄金实例,更新该实例上的网站,创建一个新的 AMI,然后从新的 AMI 启动新实例并终止旧实例。