AWS 自动将 EBS 卷附加到 Elastic Beanstalk 后面的 EC2 实例

Posted

技术标签:

【中文标题】AWS 自动将 EBS 卷附加到 Elastic Beanstalk 后面的 EC2 实例【英文标题】:AWS Automatic Attach EBS Volume to EC2 Instances behind an Elastic Beanstalk 【发布时间】:2014-08-03 01:49:53 【问题描述】:

我面临一个与架构相关的问题:

我在 ElasticBeanstalk 中创建了一个新环境并将我的应用程序推送到那里。到目前为止一切都很好。我已将其设置为auto scale up/down

我的应用程序依赖于文件系统存储(它创建文件,然后将它们提供给用户)。我正在使用 EBS 卷(5gb 大)来创建文件,然后将它们推送到 S3 并从 EBS 中删除它们。我使用 EBS 的原因是因为 EC2 实例中的 ephemeral filesystem

当 AWS 扩展新实例时,没有附加 EBS 卷,因为 EBS 一次可以附加到一个实例。

当它缩小时,它会关闭附加了 EBS 卷的实例,这完全搞砸了。

我已向/etc/fstab 添加了一个special line,它将自动将EBS 卷挂载到/data,但这仅适用于我将文件添加到/etc/fstab 的实例。我想这里的解决方案是使用该特殊行创建一个自定义的AMI image。但同样,EBS 一次不能附加到多个实例,所以这似乎是一条死胡同。

我在想什么?什么是可能的解决方案或正确的方法?

出于某种原因,我认为使用 S3 不是正确的做法。

【问题讨论】:

每个实例必须有一个 EBS 卷。不知道如何在 EB 中做到这一点。在 EC2 上,您只需将 AMI 更改为从已安装的 EBS 卷开始并更新自动缩放配置以使用此 AMI。 【参考方案1】:

S3 是一个很好的方法:您的应用程序创建文件,上传到 S3,从本地文件系统中删除文件,然后将访问文件的 URL 交给客户端。完全合理。为什么你不能为此使用临时存储。实例存储支持的实例有额外的可用存储空间,默认挂载到/mnt。为什么应用程序不能在那里创建文件?如果文件不需要在实例启动/停止/重启之间持久化,那么就没有充分的理由使用 EBS(我想除非您希望自动缩放实例的启动时间更快)。

【讨论】:

文件创建大约需要 30 分钟。它从数据库中检索近一百万行并生成 XML 文件(需要时间)。我担心在文件生成过程中如果发生故障,应用程序将不得不重新开始并使用户等待更长时间。文件创建是分部分完成的(即一次 1000 行)。 使用基于 S3 的文件系统怎么样? Here is a comparison of a few options. 对不起,我不知道这有什么帮助。是否可以使用 AWS 工具来做到这一点? 我建议您可以将 S3 存储桶挂载到您的实例上并将文件写入那里。如果一个实例失败,或者如果一个新实例由于自动缩放而上线,它们都将有权访问存储桶。您必须确保实例不会同时访问同一个文件。这样,您根本不必写入本地文件系统。 这很有趣。由于我正在处理大文件,但是在创建它们时,我必须重新上传整个文件。这既不高效也不便宜。您将如何将其挂载到文件系统?使用他们的 SDK 通过 AWS API 将文件发送到 S3 存储桶有什么区别?

以上是关于AWS 自动将 EBS 卷附加到 Elastic Beanstalk 后面的 EC2 实例的主要内容,如果未能解决你的问题,请参考以下文章

将 EBS 卷附加到 AutoScalingGroup

sh 使用AWS控制台创建EBS卷并将其附加到EC2实例

如何使用 docker-compose.yml 和 ecs-cli 将 EBS 卷附加到我的容器

aws相关知识

将多个 ebs 卷附加到每个 ec2 实例

将内容从旧 EBS 卷复制到 AWS 中的新 Nitro 系统 EBS 的最佳方式(最简单/最快)?