将 EBS 卷附加到 AutoScalingGroup

Posted

技术标签:

【中文标题】将 EBS 卷附加到 AutoScalingGroup【英文标题】:Attach EBS volume to AutoScalingGroup 【发布时间】:2020-07-08 23:01:27 【问题描述】:

我需要设置一个 EC2 实例并通过 CloudFormation 附加一个现有的 EBS 卷。

目前有一个用于 EC2 实例的 AutoScalingGroup,其中包含 minsize=1maxsize=1。我无法 的 LaunchConfiguration。原因是我找不到类似于 AWS::EC2::VolumeAttachment 的选项。

问题:

当前设置最小值和最大值 1 是否有意义?目标是在失败时自动重新创建 VM。有没有更好的方法? 我可以使用 CloudFormation 将 EBS 卷附加到具有当前 AutoScaling 设置的实例吗?

【问题讨论】:

您指的是要附加的新(空)Amazon EBS 卷,还是指您希望添加的附加 EBS 卷重新附加到启动的新实例? 引用已存在的附加 EBS 卷。所以我正在为 LaunchConfiguration 寻找 AWS::EC2::VolumeAttachment。 可能相关:Amazon EBS Multi-Attach now available on Provisioned IOPS io1 volumes 【参考方案1】:

您说“我无法将 EBS 卷附加到 LaunchConfiguration”,但没有说明原因。所以我不确定您是说您无法让 EC2 实例预置和挂载 EBS 卷,还是您说您已经尝试为 AutoScalingGroup 创建 LaunchConfiguration 并且它不起作用。我假设是前者,但如果是后者,请提供错误消息或一些调试日志,以便我们对其进行故障排除,因为这是实现目标的方法。此外,您应该知道,如果可能,最好使用LaunchTemplate 而不是 LaunchConfiguration。

您需要为指定 BlockDeviceMapping 的 LaunchTemplate 创建 CloudFormation 条目。您将在其中reference EBS 卷的 ARN。您大概也是使用 CloudFormation 创建的。

【讨论】:

如果您向发帖人提问,请将其添加为评论,而不是放在您的答案中。答案应该是独立的。干杯! 谢谢,我不知道 LaunchTemplates。会调查的。我无法附加 EBS 卷的原因是我没有找到类似于 AWS::EC2::VolumeAttachment 的启动配置选项,因此得出的结论是,LauchConfiguration 可能是设计的一部分用于服务器的虚拟机通常不应该都访问同一个 EBS 卷。【参考方案2】:

您似乎希望将现有的 Amazon EBS 卷附加到由 Auto Scaling 启动的 Amazon EC2 实例。

使用 Auto Scaling 并设置最小值/最大值为 1 是一种常见做法。这可确保即使实例发生故障或可用区发生故障,实例也能正常运行。

但是,我认为您不会找到附加现有 Amazon EBS 卷的 Auto Scaling 或 CloudFormation 选项。 Auto Scaling 组用于启动大量相同的实例以进行水平扩展。他们将拥有自己的 EBS 卷,但不会“共享”EBS 卷。

您可以使用在启动实例时运行的用户数据脚本,而不是尝试通过 Auto Scaling / CloudFormation 配置附加它。它可以使用 AWS CLI 将卷附加到自身。该脚本需要通过元数据检索实例的 InstanceId,然后将其传递给附件调用。

【讨论】:

这很难做到吗?按标签/名称/ID查找现有的EBS卷并在启动时挂载它? 这需要先调用describe-volumes,然后再调用attach-volume。这可以通过在启动时运行的用户数据脚本来完成。 谢谢,是的,我已经成功了。非常适合我的单节点 ECS 集群用例【参考方案3】:

我没有找到启动配置的卷附件选项,所以关于你的第二个问题,我认为使用 userdata 会容易得多。

在用户数据中,您可以使用以下命令提取instanceid

$instanceId = Invoke-WebRequest -Uri http://169.254.169.254/latest/meta-data/instance-id 

然后您可以使用 AWS CLI 命令附加 EBS 卷。示例:

aws ec2 attach-volume --volume-id vol-1234567890abcdef0 --instance-id i-01474ef662b89480 --device /dev/sdf

关于调试日志,您可以随时设置用户数据执行日志或将命令输出重定向到文件以获取调试信息。

【讨论】:

以上是关于将 EBS 卷附加到 AutoScalingGroup的主要内容,如果未能解决你的问题,请参考以下文章

将相同的 EBS 快照附加到每个 EMR 卷?

Amazon EMR:将 EBS 卷附加到实例时如何确保使用该卷

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

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

如何从备份中排除附加到 EC2 实例的某些 EBS 卷?

如何将 EBS 卷与 ECS 容器一起使用