我可以通过 AWS ASG 重复使用 EBS 卷吗?

ste*_*iss 13 cloud amazon-ec2 amazon-ebs amazon-web-services

我想创建一个 ASG,以便我可以将现有的 EBS 卷(因为我在这些卷上有持久数据)重用于通过 ASG 实例化的新 EC2 实例。这可能吗?

从评论中复制的更新

为了澄清我最初的问题,我没有尝试将 EBS 卷同时附加到两个 EC2 实例。相反,当一个 EC2 实例终止时,我想使用以前的 EBS 卷启动一个新的 EC2 实例,而不是创建一个全新的 EBS 卷

dsm*_*k80 12

IMO,您可以尝试这样做(我做了类似的事情,但使用弹性网络接口)。这假设您了解 AWSCloudFormation服务或AWS CLI

  1. 创建 EBS 卷
  2. 创建一个AutoScaling group最小/最大大小设置为 1的裸机。这将确保唯一一个不健康的实例将被一个新的健康的实例替换。
  3. UserDataAutoScalingLaunchConfiguration资源的部分将卷附加到实例。
  4. 现在,当实例终止时卷会发生什么?AutoScaling 小组推出了一个新的。该卷将保持连接/使用状态,直到旧的卷被终止。然后,该卷将再次可用,并且可以附加到新实例。
  5. 附加/重新附加卷更多的是关于计时此类操作。您可以盲目地假设UserData将在卷再次可用后执行(实例会“快速”终止吗?)。或者您可以进行一些状态检查,例如描述卷元数据、检查其状态以及在未使用时重新附加它。

Linux bash shell 中的一个快速示例:

INST_ID='i-xyzxyzxyz' 
VOL_ID='vol-xyzxyzxyz'
VOL_STATUS=''
until [[ $VOL_STATUS == '"available"' ]]; do
    VOL_STATUS=$(aws ec2 describe-volumes --volume-ids $VOL_ID --query 'Volumes[0].State')
    sleep 5
done

aws ec2 attach-volume --volume-id $VOL_ID --instance-id $INST_ID --device /dev/sdh
Run Code Online (Sandbox Code Playgroud)
  1. 如果您希望它更具弹性,您可以尝试使用AutoScaling 生命周期钩子。在实例进入InService状态之前,您可以附加卷。它将保持此状态,直到您告诉该组继续(否则默认情况下它会超时 1 小时)。这是用于横向扩展事件或启动新实例时。当它终止或缩小时,它也可以等待信号。您将分离卷并发出信号以继续终止它。
  2. 所有AWS CLI命令都假定您的实例已附加适当的 IAM 实例配置文件,该配置文件允许附加/分离 EBS 卷或描述它们。


Tim*_*Tim 6

不。

自动扩展组启动多个 EC2 实例。每个 EBS 卷只能附加到单个 EC2 实例。因此你不应该这样做,这可能是不可能的。如果您有多个卷和多个实例,您可能可以实现一些复杂的逻辑来使其工作,但您不应该 - 简单的架构往往是最好的。

您可以做的是运行一个 EC2 实例,通过 ASG 访问的 NFS 共享数据,或者您可以使用AWS Elastic File System,但要注意延迟相对较高。

如果您扩展您的需求和用例,您可能会得到更多有用的答案。

更新

根据附加要求,这可能是可能的。这不是标准要求,所以我认为没有任何明确的支持。

我可能会考虑编写某种启动脚本,将卷与 EC2 实例相关联,然后安装它。这里有一个可能有用的答案。使用 SNS 和 Lambda 进行某种设置可能是可能的,但是 EC2 实例可能仍然需要运行某些东西来映射卷。

其他人可能会给你更多的信息,我从来没有做过这样的事情。

  • 为了澄清我最初的问题,我并没有尝试同时将 EBS 卷附加到两个 EC2 实例。相反,当一个 EC2 实例终止时,我想使用之前的 EBS 卷启动一个新的 EC2 实例,而不是创建一个全新的 EBS 卷 (2认同)