¿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?

4 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.

Descripción breve

Elija una de las siguientes soluciones:

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

Solución

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 cuando su recurso personalizado basado en Lambda carece de la lógica necesaria para gestionar las solicitudes de eliminación. También puede producirse un error si su recurso personalizado contiene una lógica de eliminación incorrecta. El mensaje de error es: "El recurso personalizado no se ha estabilizado en el tiempo previsto." El estado de la pila cambia a DELETE_FAILED.

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 derecursos 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 su pila cambiará 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.

Eliminar un recurso personalizado que está detenido en el estado DELETE_IN_PROGRESS

Si su pila se detiene en el estado DELETE_IN_PROGRESS mientras borra un recurso personalizado y no avanza, es posible que a su pila le falte la lógica para gestionar las peticiones 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, ambos incluidos en el evento que se envía desde CloudFormation a Lambda.

1.    Confirme que su función de Lambda registra los detalles del evento.

Si su función de Lambda no incluye la lógica para imprimir el evento en los registros, no podrá obtener los valores ResponseURL y RequestId. Estos valores son necesarios para enviar una señal manual. En este caso, deberá esperar 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.

Nota: Si ya tiene la siguiente lógica en su función de Lambda, vaya al paso 2.

Ejemplo de lógica:

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

2.    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

3.    Abra la consola de Lambda.

4.    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.

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 solo si su función tiene acceso a los Registros de Amazon CloudWatch para la secuencia de registros.

7.    En el último registro, identifique el evento en el que 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-east-1:111122223333:stack/awsexamplecloudformation/33ad60e0-5f25-11e9-a734-0aa6b80efab2
  ",
    "RequestId": "e2fc8f5c-0391-4a65-a645-7c695646739",
    "LogicalResourceId": "CloudWatchtrigger"
  }' '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
  '

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


Información relacionada

Recursos personalizados

ServiceToken

¿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 3 años