在 EC2 实例上保留文件更改,而无需每次都创建新的 AMI/启动配置

在 EC2 实例上保留文件更改,而无需每次都创建新的 AMI/启动配置

我对 AWS 还很陌生,但我有一个非常小的 Amazon Linux EC2 实例,用于简单、偶尔的 PHP 进程,因此我没有使用 CodeDeploy、负载均衡器等。我的老板想不时使用 WinSCP 上传一些 PHP 代码。

我想知道在实例终止或重新启动的情况下持久保存这些 PHP 更改的最佳方法是什么。目前我看到的唯一方法是更新文件,然后创建一个新的 AMI,然后使用此新映像创建一个新的启动配置并将其应用于 Auto Scaling 组。这似乎需要做很多工作才能使 EBS 卷上的文件保持最新。

我遗漏了什么吗?也许可以使用 EBS 卷和快照做些什么?

谢谢您的任何建议。

答案1

为了让 EBS 卷上的文件保持最新,这似乎需要做很多工作

这是一项繁重的工作。但问题不在于工作量。问题在于您要求的不仅仅是保持 EBS 卷上的文件为最新。您要求将 EC2 实例上的更新保留到其他 EC2 实例上。

EBS 卷就像您本地计算机中的硬盘。AWS 在后台进行一些工作以确保数据被复制,但这一切都在单个 EBS 卷的范围内。

终止 EC2 实例并删除卷就像我到你家用大锤砸碎你的电脑一样。你指望你的数据在没有先采取任何措施保护数据的情况下奇迹般地复制到你的新电脑上吗?当然不是。

如果删除了 EBS 卷,数据就消失了。AWS 不会神奇地将数据复制到其他地方。这取决于你,如果你需要它超出 EBS 卷的生命周期。这是关键的一点:并非每个人都需要数据在 EBS 卷的生命周期之外持续存在。

当您关闭 EBS 卷的“终止时删除”标志时,这仅意味着当 EC2 实例终止时,不会删除 EBS 卷。发生这种情况时,该 EBS 卷将在您的 AWS 帐户中处于未使用状态。

未附加的 EBS 卷可以附加到另一个 EC2 实例,以便您可以使用它,但同样,这不是魔术般为您完成的。您需要自己动手。

AWS:

  1. 确保您的数据在可能的情况下得到尽可能的保护,并且
  2. 为您提供进一步的工具。

知道 #1 在哪里停止以及在哪里需要用 #2 来接管。

所以是的,将文件保存在 EBS 卷上取决于 AWS。但是,这也不是你想要的。你想要更多。

如果您希望在 EC2 实例终止后数据仍然保留,那么您需要做更多的事情。您需要做的是创建 AMI 映像并更新 Auto Scaling 组的启动配置。

答案2

如果您在实例中使用 EBS 卷,则所做的更改会在重启后保留,除非您删除 EBS 卷。但是,较旧的实例类型使用临时实例存储,每次终止实例时都会清除该存储 - 这是您的问题吗?

如果你希望将数据分散到集群或自动扩展组中,那么 EFS 是最好的选择https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEFS.html

答案3

您不必担心实例重新启动。确保实例的关机行为被设定为停止并不是终止

接下来,我建议使用版本控制系统(例如 Git 或 SVN)来维护代码更改。如果出于某种原因,这些不是一个选项,那么下一个最合适的解决方案是将代码修改存储在外部,例如 S3 或类似的服务中,然后配置用户数据在您的 EC2 实例上从 S3 存储桶下载最新代码。您可以访问用户数据启动 EC2 实例时,配置实例详细信息页面。您必须展开高级详细信息在底部。

看:https://stackoverflow.com/questions/39280251/ec2-user-data-to-fetch-s3-object

看:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html#instancedata-dynamic-data-retrieval

答案4

如果只是小改动,我建议使用 beanstalk,如果你不想构建一个系统的话。将代码存储在源代码控制中,并使用 Amazon 的 EB Beanstalk 部署工具将文件压缩到 S3。然后,部署到你的实例。如果你的实例出现故障,它将被标记为重新配置,然后你就可以部署应用程序了。在这种情况下,你可以使用选项来配置 ELB。

相关内容