我正在尝试创建EBS卷并将其附加到我的EC2实例。该实例具有自己的Auto Scaling组和启动配置。我希望这样,如果此实例变得不正常并终止,则EBS卷应自动附加到由Auto Scaling Group旋转的新实例。挂载命令位于启动配置中,因此这不是问题。
这是我的代码:
Influxdbdata1Asg:
Type: 'AWS::AutoScaling::AutoScalingGroup'
Properties:
TargetGroupARNs:
- !Ref xxxx
VPCZoneIdentifier:
- !GetAtt 'NetworkInfo.PrivateSubnet1Id'
LaunchConfigurationName: !Ref yyyy
MinSize: 1
MaxSize: 1
DesiredCapacity: 1
Data1:
Type: AWS::EC2::Volume
DeletionPolicy: Retain
Properties:
Size: !Ref 'DataEbsVolumeSize'
AvailabilityZone: !GetAtt 'NetworkInfo.PrivateSubnet1Id'
Tags:
- Key: Name
Value: !Join
- '-'
- - !Ref 'AWS::StackName'
- data1
Attachdata1:
Type: AWS::EC2::VolumeAttachment
Properties:
InstanceId: !Ref ????
VolumeId: !Ref Data1
Device: /dev/xvdb
对于这个问题,您特别想使用Lifecycle Hooks,它在实例终止或启动时触发。
为此,您的生命周期挂钩将通知您的SNS通知,该通知随后将调用Lambda函数。在确认生命周期操作完成之前,此Lambda函数将执行更改。
有一篇关于此here的博客文章。
您的问题提到CloudFormation,但是这仍然涉及生命周期挂钩来触发操作。您将需要一个具有AWS::EC2::VolumeAttachment资源的CloudFormation堆栈。 Lambda将需要更新堆栈中的“ InstanceId”属性以执行此更改。