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
preguntada hace un año390 visualizaciones
2 Respuestas
0

Woof, any feedback is welcome

willis
respondido hace 5 meses
0

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

willis
respondido hace 16 días

No has iniciado sesión. Iniciar sesión para publicar una respuesta.

Una buena respuesta responde claramente a la pregunta, proporciona comentarios constructivos y fomenta el crecimiento profesional en la persona que hace la pregunta.

Pautas para responder preguntas