定期修改 AWS AMI

Posted

技术标签:

【中文标题】定期修改 AWS AMI【英文标题】:Modify AWS AMI periodically 【发布时间】:2019-11-05 16:30:55 【问题描述】:

我正在开发一个使用 node.js 作为服务器和 MongoDB 作为数据库的 Web 应用程序。我的服务器和 MongoDB 都托管在同一个 AWS EC2 实例中。

现在我正在着手为实例启动 AWS Auto Scaling。因此,如果实例以某种方式关闭,它将自动创建另一个新实例。因此,我正在拍摄我的 EC2 实例的映像并创建一个 AMI 并将其与 Auto Scaling 连接,这样当 Auto Scaling 创建一个新实例时,它会从 AMI 启动,因此将自动配置新实例。而且这个过程运行良好。

但现在的问题是,由于我的 MongoDB 在同一个 EC2 实例中,因此数据库每秒都在被修改。但是我之前手动创建了 AMI,所以每次 Auto Scaling 启动一个新实例并在那里添加 AMI 时,AMI 中没有更新的数据库,我丢失了一些数据。

我有一个解决方案,定期使用 AWS lamda 函数动态创建 AMI,但我还没有找到一种方法来附加动态创建的 AMI 以自动附加 Auto Scaling。

而且每次DB更改后修改AMI是不可行的,所以仍然有可能丢失一些数据。

那么谁能告诉我解决这个问题的最佳解决方案是什么?

【问题讨论】:

【参考方案1】:

通常的方法是将计算和数据分开

Auto Scaling 组中的 Amazon EC2 实例应处理请求,但不应在本地存储数据。

MongoDB 数据库应在 Auto Scaling 组之外维护,以便 Auto Scaling 组中的所有实例都可以访问它。即使您在 Auto Scaling 组中只有一个实例,正如您指出的那样,它也可能被另一个实例替换。然后,您可以将数据库备份与您的 worker 实例分开。

您也可以考虑使用与 MongoDB 兼容的Amazon DocumentDB。

【讨论】:

以上是关于定期修改 AWS AMI的主要内容,如果未能解决你的问题,请参考以下文章

如何将变量传递/连接到`aws_instance`资源中的`data.aws_ami`部分

AWS 自动扩展组 AMI

有啥方法可以编辑用于 AWS 中自动缩放的 AMI?

InvalidAMIID.NotFound,AWS 错误消息:AMI ID 'ami-c1aaabb5' 不存在

AWS账户之间的克隆/传输EC2实例(AMI)

AWS 如何让 ASG 始终使用最新的 AMI?