Amazon web services Cloudformation—如果EC2实例是使用自动缩放组和启动配置创建的,如何引用该实例的实例id

Amazon web services Cloudformation—如果EC2实例是使用自动缩放组和启动配置创建的,如何引用该实例的实例id,amazon-web-services,amazon-ec2,amazon-cloudformation,Amazon Web Services,Amazon Ec2,Amazon Cloudformation,我正在尝试创建一个EBS卷并将其连接到我的EC2实例。该实例有自己的自动缩放组和启动配置。我希望这样,如果这个实例变得不健康并终止,EBS卷应该自动连接到自动缩放组启动的新实例。mount命令在启动配置中,因此这不是问题 这是我的密码: Influxdbdata1Asg: Type: 'AWS::AutoScaling::AutoScalingGroup' Properties: TargetGroupARNs: - !Ref xxxx VPCZoneIdentifier:

我正在尝试创建一个EBS卷并将其连接到我的EC2实例。该实例有自己的自动缩放组和启动配置。我希望这样,如果这个实例变得不健康并终止,EBS卷应该自动连接到自动缩放组启动的新实例。mount命令在启动配置中,因此这不是问题

这是我的密码:

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

对于这个问题,您特别希望在实例终止或启动时使用哪个触发器

为此,您的生命周期钩子将通知您的SNS通知,然后SNS通知将调用Lambda函数。此Lambda函数将在确认生命周期操作完成之前执行更改

有一篇关于这方面的博客文章


您的问题提到了CloudFormation,但是这仍然需要使用生命周期挂钩来触发操作。您需要一个带有资源的CloudFormation堆栈。Lambda需要更新堆栈中的“InstanceId”属性才能执行此更改。

很遗憾,您无法使用以下方法执行此操作:

Attachdata1:
 Type: AWS::EC2::VolumeAttachment
 Properties:
  InstanceId: !Ref ????
  VolumeId: !Ref Data1
  Device: /dev/xvdb
原因是ASG正在启动该实例,您将不会有它的想法

连接必须在CloudFormation之外完成,因为我们无法预先知道将来的实例id是什么。正如其他答案提到的生命周期挂钩

或者更好地使用独立于ASG的存储,例如EFS,它将在实例启动和终止之间自动保持,并可由多个实例装载