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
gefragt vor einem Jahr390 Aufrufe
2 Antworten
0

Woof, any feedback is welcome

willis
beantwortet vor 5 Monaten
0

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

willis
beantwortet vor 16 Tagen

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen