AWS CloudFormation 不遵守隐式依赖关系

AWS CloudFormation not honouring implicit dependencies

我使用 CloudFormation 创建了一个带有附加 EBS 卷的 EC2 实例。虽然创建工作正常,但删除总是失败,因为 CloudFormation 尝试在 EC2 实例之前删除 EBS 卷,因此可以预见会发生错误。

Volume vol-xxxxxx is currently attached to i-xxxxxx

在模板中,没有显式依赖,但我的理解是依赖也可以是隐式的。从下面的代码片段可以看出,为EC2实例指定的VolumeId!Ref SasEbsVolume,因此隐含依赖关系,应该在删除EBS卷之前删除EC2实例。

Resources:
  SasEbsVolume:
    Type: AWS::EC2::Volume
    DeletionPolicy: Snapshot
    Properties:
      ...

  SasInstance:
    Type: AWS::EC2::Instance
    Properties:
      ...
      Volumes:
        - Device: /dev/xvdd
          VolumeId: !Ref SasEbsVolume

那么我对 CloudFormation 中的依赖项如何工作的理解不正确,在这种情况下我可以声明一个显式依赖项,还是 CloudFormation 没有做它应该做的事情?

此处的问题是 EC2 实例终止保护。

  SasInstance:
    Type: AWS::EC2::Instance
    Properties:
      ...
      DisableApiTermination: true
      ...

移除终止保护后,CloudFormation 模板删除成功。

希望 AWS 在发生此问题时通过 CloudFormation 事件使其显而易见,因为目前根本没有任何内容可以指导用户。