¿Cuáles son algunas de las mejores prácticas para implementar recursos personalizados respaldados por Lambda con CloudFormation?

4 minutos de lectura
0

Quiero seguir las mejores prácticas al implementar recursos personalizados respaldados por AWS Lambda con AWS CloudFormation.

Resolución

Tenga en cuenta las siguientes prácticas recomendadas al implementar recursos personalizados respaldados por AWS Lambda con AWS CloudFormation.

Cree sus recursos personalizados para informar, registrar y gestionar los errores

Las excepciones pueden provocar que el código de la función se cierre sin enviar una respuesta. CloudFormation requiere una respuesta HTTPS para confirmar si la operación se ha realizado correctamente o ha fallado. Una excepción no notificada hace que CloudFormation espere hasta que se agote el tiempo de espera de la operación antes de iniciar una reversión de pila. Si la excepción vuelve a ocurrir durante la reversión, CloudFormation vuelve a esperar a que se agote el tiempo de espera antes de que finalice con un error de reversión. Durante este tiempo, su pila estará inutilizable.

Para evitar problemas de tiempo de espera, incluya lo siguiente en el código que cree para la función Lambda:

  • Lógica para gestionar las excepciones
  • La capacidad de registrar el error para los escenarios de solución de problemas
  • La capacidad de responder a CloudFormation con una respuesta HTTPS que confirme que una operación ha fallado
  • Una cola de mensajes fallidos que permite capturar y gestionar las ejecuciones incompletas
  • Un módulo cfn-response para enviar una respuesta a CloudFormation

Establezca períodos de tiempo de espera razonables e informe cuando estén a punto de superarse

Si una operación no se ejecuta dentro del período de tiempo de espera definido, la función genera una excepción y no se envía ninguna respuesta a CloudFormation.

Para evitar este problema, tenga en cuenta lo siguiente:

  • Establezca un valor de tiempo de espera para las funciones de Lambda lo suficientemente alto como para gestionar las variaciones en el tiempo de procesamiento y las condiciones de la red.
  • Configure un temporizador en su función para responder a CloudFormation con un error cuando una función esté a punto de agotarse. Un temporizador puede ayudar a evitar demoras en los recursos personalizados.

Construya en torno a la creación, actualización y eliminación de eventos

Dependiendo de la acción de apilamiento, CloudFormation envía a su función un evento de creación, actualización, o eliminación. Como cada evento se gestiona de forma diferente, asegúrese de que no haya ningún comportamiento no deseado cuando se reciba alguno de los tres tipos de eventos.

Para obtener más información, consulte Tipos de solicitudes de recursos personalizados.

Comprenda cómo CloudFormation identifica y reemplaza los recursos

Cuando una actualización inicia la sustitución de un recurso físico, CloudFormation compara el PhysicalResourceId que devuelve la función Lambda con el PhysicalResourceId anterior. Si los IDs son diferentes, CloudFormation asume que el recurso se ha reemplazado por un nuevo recurso físico.

Sin embargo, para permitir posibles retrocesos, el recurso antiguo no se elimina implícitamente. Cuando la actualización de la pila se complete correctamente, se enviará una solicitud de evento de Eliminación con el ID físico anterior como identificador. Si se produce un error en la actualización de la pila y se produce una reversión, se envía el nuevo ID físico en el evento Eliminación.

Utilice PhysicalResourceId para identificar de forma exclusiva los recursos, de modo que, cuando se reciba un evento de Eliminación, solo se eliminen los recursos correctos durante el reemplazo.

Diseñe sus funciones con idempotencia

Una función idempotente se puede repetir varias veces con las mismas entradas y el resultado es el mismo que si se hiciera solo una vez. La idempotencia garantiza que los reintentos, las actualizaciones y las anulaciones no generen recursos duplicados ni introduzcan errores.

Por ejemplo, CloudFormation invoca su función para crear un recurso, pero no recibe una respuesta que indique que el recurso se ha creado correctamente. CloudFormation podría volver a invocar la función y crear un segundo recurso. El primer recurso puede quedar huérfano.

Implemente sus controladores para gestionar correctamente las reversiones

Cuando se produce un error en una operación de pila, CloudFormation intenta retroceder y revertir todos los recursos a su estado anterior. Esto da como resultado diferentes comportamientos en función de si la actualización provocó un reemplazo de recursos.

Para asegurarse de que las reversiones se hayan completado correctamente, tenga en cuenta lo siguiente:

  • Evite eliminar de forma implícita los recursos antiguos hasta que se reciba un evento de eliminación.
  • Use accustom o el Custom Resource Helper en el sitio web de GitHub para ayudarle a seguir las mejores prácticas al usar recursos personalizados en CloudFormation.

Información relacionada

Recursos personalizados

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año