Prueba y depuración de funciones de Lambda@Edge - Amazon CloudFront

Prueba y depuración de funciones de Lambda@Edge

En este tema se incluye secciones que describen estrategias para probar y depurar las funciones de Lambda@Edge. Es importante probar el código de la función de Lambda@Edge de forma independiente, para asegurarse de que completa la tarea prevista, y realizar pruebas de integración, para asegurarse de que la funciona correctamente con CloudFront.

Durante las pruebas de integración o una vez implementada su función, es posible que deba depurar errores de CloudFront, como errores HTTP 5xx. Los errores pueden ser una respuesta no válida que devuelve la función de Lambda, errores de ejecución cuando se desencadena la función o errores debido a limitación controlada de ejecución por parte del servicio de Lambda. En las secciones de este tema se explican estrategias para determinar qué tipo de error es la causa del problema y, a continuación, se ofrecen pasos que puede seguir para corregir el problema.

nota

Al examinar las métricas o los archivos de registro de CloudWatch durante la solución de problemas, tenga en cuenta que se muestran o almacenan en la Región de AWS más cercana a la ubicación donde se ejecutó la función. Por lo tanto, si tiene un sitio web o una aplicación web con usuarios en el Reino Unido y tiene una función de Lambda asociada a su distribución, por ejemplo, debe cambiar la región para ver las métricas o los archivos de registro de CloudWatch para la Región de AWS de Londres. Para obtener más información, consulte Determinación de la región de Lambda@Edge.

Prueba de funciones de Lambda@Edge

Hay dos pasos para probar la función de Lambda: pruebas independientes y pruebas de integración.

Probar la funcionalidad independiente

Antes de agregar su función de Lambda a CloudFront, asegúrese de probar primero la funcionalidad mediante las capacidades de prueba de la consola de Lambda o mediante otros métodos. Para obtener más información sobre las pruebas en la consola de Lambda, consulte la sección Invocar la función Lambda y verificar los resultados, los registros y las métricas en Crear una función Lambda con la consola en la Guía para desarrolladores de AWS Lambda.

Probar la operación de la función en CloudFront

Es importante realizar pruebas de integración, donde la función está asociada a una distribución y se ejecuta en función de un evento de CloudFront. Asegúrese de que la función se activa para el evento adecuado y devuelve una respuesta que es válida y correcta para CloudFront. Por ejemplo, asegúrese de que la estructura del evento es correcta, que solo se incluyen encabezados válidos, etc.

Mientras realiza la iteración en las pruebas de integración con la función en la consola de Lambda, consulte los pasos que se indican en el tutorial de Lambda@Edge a medida que modifica el código o cambia el desencadenador de CloudFront que llama a su función. Por ejemplo, asegúrese de que está trabajando en una versión numerada de su función, tal y como se describe en este paso del tutorial: Paso 4: Agregue un desencadenador de CloudFront para ejecutar la función.

A medida que realiza cambios y los implementa, tenga en cuenta que pasarán varios minutos hasta que su función actualizada y los desencadenadores de CloudFront se repliquen en todas las regiones. Esto suele hacerse en unos minutos, pero puede tardar hasta 15 minutos.

Para comprobar si la replicación ha terminado, vaya a la consola de CloudFront y consulte la distribución.

Comprobación de la finalización de la implementación de la replicación
  1. Abra la consola de CloudFront en https://console.aws.amazon.com/cloudfront/v4/home.

  2. Elija el nombre de la distribución.

  3. Compruebe que el estado de la distribución cambia de En curso a Implementada, lo que significa que la función se ha replicado. A continuación, siga los pasos de la sección siguiente para verificar el funcionamiento de la función.

Tenga en cuenta que las pruebas en la consola solo validan la lógica de la función, pero no aplican cuotas (antes denominadas límites) de servicio específicas de Lambda@Edge.

Identificación de errores de funciones de Lambda@Edge en CloudFront

Una vez que haya verificado que la lógica de la función funciona correctamente, es posible que sigan apareciendo errores HTTP 5xx cuando la función se ejecuta en CloudFront. Los errores HTTP 5xx se pueden devolver por diversas razones, que puede incluir errores de las funciones de Lambda u otros problemas en CloudFront.

  • Si utiliza las funciones de Lambda@Edge, puede utilizar gráficos en la consola de CloudFront para ayudar a localizar lo que está provocando el error y, a continuación, trabajar para solucionarlo. Por ejemplo, puede ver si los errores HTTP 5xx están provocados por CloudFront o funciones de Lambda y, a continuación, en el caso de funciones específicas, puede ver los archivos de registro relacionados para investigar el problema.

  • Para solucionar los errores HTTP en general en CloudFront, consulte los pasos de solución de problemas en el siguiente tema: Solucionar respuestas de error del origen.

Causa de los errores de función de Lambda@Edge en CloudFront

Existen varias razones por las que una función de Lambda puede provocar un error HTTP 5xx y los pasos de solución de problemas que lleve a cabo dependerán del tipo de error. Los errores pueden clasificarse como los siguientes:

Un error de ejecución de la función de Lambda

Un error de ejecución se produce cuando CloudFront no obtiene ninguna respuesta de Lambda porque hay excepciones no controladas en la función o hay un error en el código. Por ejemplo, si el código incluye callback(Error). Para obtener más información, consulte Errores de funciones de Lambda en la Guía para desarrolladores de AWS Lambda.

Se devuelve a CloudFront una respuesta de función de Lambda no válida

Después de ejecutar la función, CloudFront recibe una respuesta de Lambda. Se devuelve un error si la estructura de objetos de la respuesta no se ajusta a la Estructura de eventos de Lambda@Edge o si la respuesta contiene encabezados no válidos u otros campos no válidos.

La ejecución en CloudFront se limita debido a las cuotas de servicio de Lambda (anteriormente conocidas como límites)

El servicio de Lambda limita las ejecuciones en cada región y devuelve un error si se supera la cuota.

Cómo determinar el tipo de error

Para ayudarle a decidir dónde centrarse a medida que depura y trabaja para resolver errores que devuelve CloudFront, es útil identificar por qué CloudFront devuelve un error HTTP. Para empezar, puede usar los gráficos proporcionados en la sección Monitoring (Monitoreo) de la consola de CloudFront en la AWS Management Console. Para empezar, puede usar los gráficos proporcionada en la sección Monitoring (Monitoreo) de la consola de CloudFront, consulte Monitoreo de métricas de CloudFront con Amazon CloudWatch.

Los siguientes gráficos pueden resultar especialmente útiles cuando desea realizar un seguimiento de los errores devueltos por orígenes o por una función de Lambda y para acotar el tipo de problema cuando se trata de un error de una función de Lambda.

Gráfico de índices de error

Uno de los gráficos que puede ver en la pestaña Overview (Descripción general) de cada una de las distribuciones es un gráfico de Error rates (Índices de error). Este gráfico muestra la tasa de errores como porcentaje de las solicitudes totales próximas a su distribución. El gráfico se muestra la tasa de error total, errores 4xx totales, errores 5xx totales y errores 5xx totales de funciones Lambda. En función del tipo de error y del volumen, puede seguir los pasos para investigar y solucionar la causa.

Gráfico de índices de error para una distribución de CloudFront
  • Si ve errores de Lambda, puede seguir investigando mirando los tipos de error específicos que devuelve la función. La pestaña Lambda@Edge errors (Errores de Lambda@Edge) incluye gráficos que clasifican los errores de función por tipo para ayudar a identificar el problema para una función específica.

  • Si ve errores de CloudFront, puede solucionar el problema y trabajar para corregir los errores de origen o cambiar la configuración de CloudFront. Para obtener más información, consulte Solucionar respuestas de error del origen.

Gráficos de respuestas de función no válida y errores de ejecución

La pestaña Lambda@Edge errors (Errores de Lambda@Edge) incluye gráficos que clasifican los errores de Lambda@Edge de una distribución específica, por tipo. Por ejemplo, un gráfico muestra todos los errores de ejecución por Región de AWS.

Para facilitar la resolución de problemas, puede buscar problemas específicos abriendo y examinando los archivos de registro de funciones específicas por región.

Visualización de los archivos de registro de una función específica por región
  1. En la pestaña Errores de Lambda@Edge, en Funciones de Lambda@Edge asociadas, elija el nombre de la función y, a continuación, Ver métricas.

  2. A continuación, en la página con el nombre de la función, en la esquina superior derecha, seleccione Ver registros de funciones y, a continuación, elija una región.

    Por ejemplo, si ve problemas en el gráfico Errores de la región Oeste de EE. UU. (Oregón), elija esa región en la lista desplegable. Se abrirá la consola de Amazon CloudWatch.

  3. En la consola de CloudWatch de esa región, en Flujos de registro, seleccione un flujo de registro para ver los eventos de la función.

Además, lea las siguientes secciones de este capítulo para obtener más recomendaciones acerca de la solución de problemas y la corrección de errores.

Gráfico de limitaciones

La pestaña Lambda@Edge errors (Errores de Lambda@Edge) incluye además un gráfico Throttles (Limitaciones). A veces, el servicio de Lambda limita las invocaciones de la función por región, si se alcanza la cuota (antes denominada límite) de simultaneidad regional. Si aparece un error limit exceeded (límite superado), su función ha alcanzado una cuota que el servicio Lambda impone a las ejecuciones en una región. Para obtener más información, incluido cómo solicitar un aumento de la cuota, consulte Cuotas de Lambda@Edge.

Gráfico de limitación para la ejecución de la función Lambda@Edge.

Para ver un ejemplo sobre cómo utilizar esta información en la solución de problemas de errores HTTP, consulte Cuatro pasos para depurar la entrega de contenido en AWS.

Solución de problemas de respuestas no válidas de funciones de Lambda@Edge (errores de validación)

Si identifica que el problema es un error de validación de Lambda, significa que su función de Lambda devuelve una respuesta no válida a CloudFront. Siga las indicaciones de esta sección para realizar los pasos que permiten revisar la función y asegurarse de que su respuesta se ajusta a los requisitos de CloudFront.

CloudFront valida la respuesta de una función de Lambda de dos maneras:

  • La respuesta de Lambda debe ajustarse a la estructura de objetos necesaria. Estos son algunos ejemplos de estructura de objetos incorrecta: JSON que no se puede analizar, campos obligatorios que faltan y un objeto no válido en la respuesta. Para obtener más información, consulte Estructura de eventos de Lambda@Edge.

  • La respuesta solo debe incluir valores de objetos válidos. Se producirá un error si la respuesta incluye un objeto válido pero tiene valores que no se admiten. Por ejemplo: añadir o actualizar encabezados que están en la lista negra o son de solo lectura (consulte Restricciones en funciones de borde en el tema Requisitos y restricciones en funciones Lambda), superar el tamaño máximo del cuerpo (consulte Restricciones en el tamaño de la respuesta generada en el tema Errores de respuesta de Lambda@Edge) y caracteres o valores no válidos (consulte Estructura de eventos de Lambda@Edge).

Cuando Lambda devuelve una respuesta no válida a CloudFront, los mensajes de error se escriben en los archivos de registro que CloudFront envía a CloudWatch en la región donde se ejecutó la función de Lambda. El comportamiento predeterminado es enviar los archivos de registro a CloudWatch cuando hay una respuesta no válida. Sin embargo, si asoció una función de Lambda con CloudFront antes de que se lanzara la funcionalidad, es posible que no esté habilitada para la función. Para obtener más información, consulte Determinación de si su cuenta inserta registros en CloudWatch más adelante en este tema.

CloudFront envía los archivos de registro a la región correspondiente donde se ejecutó la función, al grupo de registros asociado a la distribución. Los grupos de registros tienen el siguiente formato: /aws/cloudfront/LambdaEdge/DistributionId, donde DistributionId es el ID de la distribución. Para determinar la región donde se encuentran los archivos de registro de CloudWatch, consulte Determinación de la región de Lambda@Edge más adelante en este tema.

Si el error es reproducible, puede crear una nueva solicitud que produzca el error y, a continuación, buscar el ID de solicitud en una respuesta fallida de CloudFront (encabezado X-Amz-Cf-Id) para encontrar un error en los archivos de registro. La entrada del archivo de registro incluye información que puede ayudarle a identificar por qué se devuelve el error, y también muestra el ID de solicitud de Lambda correspondiente para que pueda analizar la causa raíz en el contexto de una única solicitud.

Si se trata de un error intermitente, puede utilizar los registros de acceso de CloudFront para encontrar el ID de una solicitud que ha generado un error y, a continuación, buscar en los registros de CloudWatch los mensajes de error correspondientes. Para obtener más información, consulte la sección anterior, Determinación del tipo de error.

Solución de problemas de errores de ejecución de funciones de Lambda@Edge

Si se trata de un error de ejecución de Lambda, puede ser útil crear declaraciones de registros para las funciones de Lambda, escribir mensajes en los archivos de registro de CloudWatch que monitorean la ejecución de la función en CloudFront y determinar si funciona según lo previsto. A continuación, puede buscar esas instrucciones en los archivos de registro de CloudWatch para verificar que la función está funcionando.

nota

Aunque no haya cambiado la función de Lambda@Edge, las actualizaciones del entorno de ejecución de la función de Lambda podrían afectar a esa función y devolver un error de ejecución. Para obtener más información sobre cómo probar y migrar a una versión posterior, consulte Próximas actualizaciones del entorno de ejecución de AWS Lambda y AWS Lambda@Edge.

Determinación de la región de Lambda@Edge

Para ver las regiones donde la función Lambda@Edge recibe tráfico, consulte las métricas de la función en la consola de CloudFront en la AWS Management Console. Las métricas se muestran para cada región de AWS. En la misma página, puede elegir una región y ver los archivos de registro para dicha región a fin de poder investigar problemas. Debe revisar los archivos de registro de CloudWatch en la región correcta de AWS para ver los archivos de registro creados cuando CloudFront ejecutó su función de Lambda.

Para empezar, puede usar los gráficos proporcionada en la sección Monitoring (Monitoreo) de la consola de CloudFront, consulte Monitoreo de métricas de CloudFront con Amazon CloudWatch.

Determinación de si la cuenta inserta registros en CloudWatch

De forma predeterminada, CloudFront habilita el registro de respuestas de la función de Lambda no válidas y envía los archivos de registro a CloudWatch mediante uno de los Roles vinculados a servicios para Lambda@Edge. Si ha agregado funciones de Lambda@Edge a CloudFront antes de que se lanzara la característica de registro de respuestas de funciones de Lambda, el registro estará habilitado la próxima vez que actualice la configuración de Lambda@Edge, por ejemplo, agregando un desencadenador de CloudFront.

Haga lo siguiente para verificar que el envío de los archivos de registro a CloudWatch está habilitado para su cuenta:

  • Compruebe si los registros aparecen en CloudWatch. Asegúrese de mirar en la región donde se ejecutó la función de Lambda@Edge. Para obtener más información, consulte Determinación de la región de Lambda@Edge.

  • Determine si el rol vinculado al servicio relacionado existe en su cuenta en IAM. Para ello, abra la consola de IAM en https://console.aws.amazon.com/iam/, y, a continuación, elija Roles para ver la lista de roles vinculados a servicios de su cuenta. Busque el siguiente rol: AWSServiceRoleForCloudFrontLogger.