¿Cómo elimino un recurso personalizado basado en Lambda que está detenido en el estado DELETE_FAILED o DELETE_IN_PROGRESS en CloudFormation y no avanza?

5 minutos de lectura
0

Mi recurso personalizado basado en AWS Lambda está detenido en el estado DELETE_FAILED o DELETE_IN_PROGRESS en AWS CloudFormation y no avanza. Quiero eliminar mi recurso personalizado.

Resolución

Elija una de las siguientes soluciones según el estado de su recurso.

Eliminar un recurso personalizado que está detenido en el estado DELETE_FAILED y no avanza

Aparece un mensaje de error si intenta eliminar una pila con un recurso personalizado basado en Lambda que carece de la lógica necesaria para gestionar las solicitudes de eliminación. También puede ver el siguiente mensaje de error si el recurso personalizado contiene una lógica de eliminación incorrecta: "CloudFormation no recibió ninguna respuesta de su recurso personalizado. Compruebe los registros en busca del elemento requestId [652961ca-f24e-42e0-8f74-3f4846ba282d]. Si usa el módulo de Python cfn-response, es posible que necesite actualizar el código de la función de Lambda para que CloudFormation pueda adjuntar la versión actualizada."

El estado de la pila cambia a DELETE_FAILED y, a continuación, aparece el siguiente mensaje de error: "El recurso personalizado no se ha estabilizado en el tiempo previsto."

Para eliminar la pila, siga los pasos siguientes:

  1. Abra la consola de CloudFormation.
  2. Seleccione la pila que contiene el recurso personalizado que está detenido en estado DELETE_FAILED y no avanza.
  3. Seleccione Acciones y, a continuación, Eliminar pila.
  4. En la ventana emergente-que proporciona una lista de recursos para conservar, seleccione el recurso personal detenido en el estado DELETE_FAILED. A continuación, seleccione Eliminar.
  5. Seleccione Acciones y, a continuación, Eliminar pila.

El estado de la pila cambia a DELETE_COMPLETE.

Nota: Su recurso personalizado no es un recurso físico, por lo que no tendrá que limpiar su recurso personalizado tras la eliminación de la pila.

Eliminación de un recurso personalizado que está detenido en el estado DELETE_IN_PROGRESS

Cuando la pila elimina un recurso personalizado, se detiene en el estado DELETE_IN_PROGRESS y no avanza, es posible que la pila no tenga la lógica necesaria para administrar las solicitudes de eliminación. O bien, su pila podría incluir una lógica de eliminación incorrecta.

Para forzar la eliminación de la pila, debe enviar manualmente una señal SUCCESS. La señal requiere los valores ResponseURL y RequestId que están incluidos en el evento que se envía desde CloudFormation a Lambda.

  1. En su plantilla de CloudFormation, identifique el nombre de la función de Lambda a la que su recurso personalizado está enviando solicitudes. Puede encontrar el nombre de la función en la propiedad ServiceToken del recurso AWS::CloudFormation::CustomResource o del recurso Custom::String.

    Por ejemplo:

    MyCustomResource:
      Type: "Custom::PingTester"
      Properties:
        ServiceToken:
          !Sub |
            arn:aws:lambda:us-east-1:111122223333:function:awsexamplelambdafunction
  2. Abra la consola de Lambda.

  3. En el panel de navegación, seleccione Funciones y, a continuación, elija la función que ha identificado en el paso 1. Por ejemplo, awsexamplelambdafunction es el nombre de la función en el código de ejemplo anterior.

  4. Compruebe que la función de Lambda registre los detalles del evento en el grupo de registro de Amazon CloudWatch denominado /aws/lambda/function_name.
    Ejemplo de lógica:

    exports.handler = function(event, context) {    console.log("REQUEST RECEIVED:\n" + JSON.stringify(event));
    ...
    }

    Nota: Si su función de Lambda no incluye la lógica para imprimir el evento en los registros de CloudWatch, no podrá obtener los valores ResponseURL y RequestId. Debe tener esos valores para enviar una señal manual. Espere aproximadamente una hora para que la pila de CloudFormation agote el tiempo de espera y pase al estado DELETE_FAILED. A continuación, complete los pasos de la sección Eliminar un recurso personalizado que está detenido en estado DELETE_FAILED y no avanza para eliminar su pila.

  5. Elija la pestaña Supervisión y, a continuación, seleccione Ver registros en CloudWatch.

  6. En la consola de Amazon CloudWatch, seleccione el registro más reciente.

    Nota: Puede ver los registros de CloudWatch únicamente si su función tiene acceso a los Registros de Amazon CloudWatch para la secuencia de registro.

  7. En el registro más reciente, identifique el evento en el que el valor RequestType está configurado como Delete, y luego copie los valores de RequestId, ResponseURL, StackId, LogicalResourceId y PhysicalResourceId. Por ejemplo:

    Received event: {
      "RequestType": "Delete",
      "ServiceToken": "arn:aws:lambda:us-east-1:111122223333:function:awsexamplelambdafunction",
      "ResponseURL": "https://cloudformation-custom-resource-response-useast1.s3.us-east-1.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-east-1%3A111122223333%3Astack/awsexamplecloudformation/33ad60e0-5f25-11e9-a734-0aa6b80efab2%7CMyCustomResource%7Ce2fc8f5c-0391-4a65-a645-7c695646739?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20170313T0212304Z&X-Amz-SignedHeaders=host&X-Amz-Expires=7200&X-Amz-Credential=QWERTYUIOLASDFGBHNZCV%2F20190415%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=dgvg36bh23mk44nj454bjb54689bg43r8v011uerehiubrjrug5689ghg94hb",
      "StackId": "arn:aws:cloudformation:us-east-1:111122223333:stack/awsexamplecloudformation/33ad60e0-5f25-11e9-a734-0aa6b80efab2",
      "RequestId": "e2fc8f5c-0391-4a65-a645-7c695646739",
      "LogicalResourceId": "MyCustomResource",
      "PhysicalResourceId": "test-MyCustomResource-1URTEVUHSKSKDFF",
      "ResourceType": "Custom::PingTester"
  8. Para enviar una señal de respuesta SUCCESS en el objeto de respuesta a la solicitud de eliminación, ejecute el siguiente comando en su interfaz de línea de comandos local. Asegúrese de incluir los valores que copió del paso 7.

    curl -H "Content-Type: ''" -X PUT -d "{\"Status\": \"SUCCESS\",\"PhysicalResourceId\": \"test-CloudWatchtrigger-1URTEVUHSKSKDFF\",\"StackId\": \"arn:aws:cloudformation:us-west-2:111122223333:stack/CRStack/5105e4b0-4a29-11ef-8c42-067744df1edb\",\"RequestId\": \"dca731ad-18ad-496c-8c77-459d904fd36b\",\"LogicalResourceId\": \"MyCustomResource\"}" "https://cloudformation-custom-resource-response-uswest2.s3-us-west-2.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-west-2%3A111122223333%3Astack/CRStack/5105e4b0-4a29-11ef-8c42-067744df1edb%7CCustomResource%7Cdca731ad-18ad-496c-8c77-459d904fd36b?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240725T020141Z&X-Amz-SignedHeaders=host&X-Amz-Expires=7200&X-Amz-Credential=AKIA54RCMT6SJPHCTM4H%2F20240725%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Signature=3b1567adb5ec9415526251a26bac3a6c861ac77aa090a3ada0a4a4d109a7273d"

El estado de sus recursos personalizados cambia a DELETE_COMPLETE en los eventos de la pila de CloudFormation.

Información relacionada

Creación de una lógica de aprovisionamiento personalizada con recursos personalizados

AWS::CloudFormation::CustomResource

¿Cuáles son algunas de las prácticas recomendadas para implementar recursos personalizados basados en AWS Lambda con AWS CloudFormation?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un mes