Reproducible Repository: https://github.com/Willis0826/cdk-cr-dependency-issue
I expect two CloudFormation stacks with the same CloudFormation template should always have the same behaviour. However, I notice there is a case CloudFormation will ignore the DependsOn attribute while performing stack deletion.
The case is, we create EIP and NLB via CDK first, then we create a custom resource with the DependsOn attribute via CDK. After the creation was completed, we will get the CloudFormation template as follows:
{
"Resources": {
"loadbalancer": {
...
"Properties": {
"SubnetMappings": [
{
"AllocationId": {
"Fn::GetAtt": [
"eipA",
"AllocationId"
]
}
...
}
...
}
}
"DependsOn": [
"customresourceA",
...
]
}
"eipA": {
...
}
"customresourceA": {
...
"Properties": {
"ElasticIp": {
"Ref": "eipA"
}
}
}
...
}
}
Based on this template, I assume the dependency is as follows:
loadbalancer
depends on eipA
and customresourceA
customresourceA
depends on eipA
The desired order of stack creation should be:
eipA
-> customresourceA
-> loadbalancer
The desired order of stack deletion should be:
loadbalancer
-> customresourceA
-> eipA
However, when I performed stack deletion, CloudFormation deleted loadbalancer
and customresourceA
at the same time. It seems like CloudFormation ignored the DependsOn
field of loadbalancer
resource.

But, if I create EIP, NLB and custom resource at once, the CloudFormation can perform deletion in the correct order.

CloudFormation experts are needed 🙋♂️
does anyone fancy looking into this mystery?
If the question is unclear, please let me know. Here is a reproducible repository: https://github.com/Willis0826/cdk-cr-dependency-issue
Any advice would be appreciated!
@AWS @AWS_Support