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 事件使其显而易见,因为目前根本没有任何内容可以指导用户。
我使用 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 事件使其显而易见,因为目前根本没有任何内容可以指导用户。