我可以在AWS ASG上重新使用EBS卷吗?

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

更新从评论复制

为了澄清我原来的问题,我不想同时将EBS卷附加到两个EC2实例。 相反,当一个EC2实例终止时,我想用以前的EBS卷启动一个新的EC2实例,而不是创build一个全新的EBS卷

没有。

自动调节组启动多个EC2实例。 每个EBS卷只能连接到一个EC2实例。 所以你不应该这样做,这可能是不可能的。 如果你有多个卷和多个实例,你可能会实现一些复杂的逻辑来使它工作,但是你不应该 – 简单的架构往往是最好的。

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

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

更新

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

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

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

海事组织,你可以尝试这样做(我做了类似的东西,但与弹性networking接口)。 这需要了解AWS CloudFormation服务或AWS CLI的相关知识:

  1. 创build一个EBS卷
  2. 创build一个最小/最大大小的裸AutoScaling group设置为1.这将确保唯一的实例,当它变得不健康将被一个新的健康的一个取代。
  3. 将卷从AutoScaling LaunchConfiguration资源的UserData部分附加到实例。
  4. 现在,当实例被终止时,音量如何? AutoScaling组推出一个新的。 卷将保持连接/使用,直到旧的终止。 然后,音量将再次可用,并可以附加到新的实例。
  5. 附加/重新附加音量更多的是计时这样的行动。 您可以盲目地假设UserData将在卷再次可用后执行(实例是否会“快速”终止?)。 或者,您可以执行一些状态检查,如描述卷元数据,检查其状态以及何时不使用它重新附加它。

Linux bash shell中的一个简单例子:

 INST_ID='i-xyzxyzxyz' VOL_ID='vol-xyzxyzxyz' VOL_STATUS='' until [ "x$VOLUME_STATUS" == "xattached" ]; 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 
  1. 如果您希望更具弹性,可以尝试使用AutoScaling生命周期挂钩 。 在实例进入InService状态之前,您可以附加该卷。 它将保持这种状态,直到你告诉组继续(否则它默认有1小时的超时)。 这是用于向外扩展的事件,或者是一个新实例启动的时候。 当它被终止或缩放时,它也可以等待一个信号。 您将分离音量并发出信号继续终止。
  2. 所有AWS CLI命令都假定您的实例已附加了适当的IAM实例configuration文件,该configuration文件允许附加/分解EBS卷或描述它们。