The behaviour of CloudFormation DependsOn is inconsistent given the same template

0

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.

inconsistent

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

consistent

willis
已提问 1 年前390 查看次数
2 回答
0

Woof, any feedback is welcome

willis
已回答 5 个月前
0

I am still alive and curious about this! Give me a shout if you are willing to accept this challenge. 🍺

willis
已回答 16 天前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则