在 Elastic Beanstalk EC2 上使用 EBS 卷的问题

Posted

技术标签:

【中文标题】在 Elastic Beanstalk EC2 上使用 EBS 卷的问题【英文标题】:Issues using EBS Volume on an Elastic Beanstalk EC2 【发布时间】:2020-10-23 22:38:11 【问题描述】:

我已将 EBS 卷安装到我的 Elastic Beanstalk EC2 上,以将其用作永久数据库。我知道 Elastic Beanstalk 会不时地将自己滚动到新环境,但问题是有时它会改变区域(例如从 eu-west-3a 到 eu-west-3c)导致我的 EBS 卷分离!

    如何防止我的 EC2 实例自行突然更改区域?或者,将其产卵限制在单个区域?每次发生这种情况时都使用快照迁移我的 EBS 卷是一件很烦人的事情。

    如何自动将我的 EBS 卷重新附加到我的 EC2 实例? .ebextensions 是答案吗?我真的无法弄清楚那个...... :(

提前谢谢你!

【问题讨论】:

【参考方案1】:
    如何防止我的 EC2 实例自行突然更改区域?

您可以使用 aws:autoscaling:asg 命名空间中的 Custom Availability Zones 选项将 Auto Scaling 组 (ASG) 限制为一个特定的可用区 (AZ)。这将确保当实例终止并开始替换时,它将被放置在同一个 AZ 中。请务必将可用区设置为与您的额外 EBS 卷相同的可用区。 缺点是您的应用程序将仅限于一个可用区,因此如果发生问题,您的应用程序将离线。

    如何自动将我的 EBS 卷重新附加到我的 EC2 实例? .ebextensions 是答案吗?

有几种方法可以做到这一点。 .ebextensions 就是其中之一。您必须提供一个脚本,将卷重新附加到实例并相应地挂载它。示例脚本可以在here找到。

另一种方法是使用Amazon EC2 Auto Scaling Lifecycle Hooks。设置完成后,当 ASG 启动新实例时,您可以使用 lambda 函数来附加卷。您还需要确保它已安装在实例上。因此,.ebextensions 可能更易于使用。

附言

它是Availability Zone,而不是Region

【讨论】:

感谢您的回答。当你说The drawback is that your application will be limited to only one AZ, thus if something happens with it, your application will be off-line时,你是说如果我将我的 ASG 限制在单个 AZ 中,当相应的 AWS 可用区本身出现故障时,我的应用服务器将无法找到新的 AZ 来运行它?跨度> @Yellocat 是的。 EBS 卷绑定到单个 AZ。因此,如果您想重复使用它,您需要将您的实例保留在同一个 AZ 中。因此,如果 AZ 出现故障,您的应用程序也会出现故障。或者,您可以使用 EFS 代替 EBS,EBS 没有这些限制,但成本更高。如果你的db是mysql或者类似的,yoc也用RDS来解决这些问题,不过这样也比较贵。

以上是关于在 Elastic Beanstalk EC2 上使用 EBS 卷的问题的主要内容,如果未能解决你的问题,请参考以下文章

Elastic Beanstalk EC2 实例在端口 5000 和端口 80 上响应 http 请求

在 Amazon Elastic Beanstalk(Apache、EC2)上安装 Mod_security

我无法在 Elastic Beanstalk ec2 实例上找到生产日志文件

Elastic Beanstalk 终止我的 EC2 实例

在 Elastic Beanstalk EC2 上使用 EBS 卷的问题

如何重新启动 httpd 以在 Elastic Beanstalk 中的 EC2 实例上启用 HTTPS?