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.
Temas
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 Invocar una función de 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
Abra la consola de CloudFront en https://console.aws.amazon.com/cloudfront/v4/home
. -
Elija el nombre de la distribución.
-
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: Solución de problemas de códigos de estado de respuesta a errores en CloudFront.
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).
- 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. Para obtener más información, consulte Cuotas de Lambda@Edge.
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 Supervisión 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.
-
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 Solución de problemas de códigos de estado de respuesta a errores en CloudFront.
-
- 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
-
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.
-
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.
-
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.
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/
, donde DistributionId
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 Supervisión 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 la cuenta en IAM: debe tener el rol de IAM
AWSServiceRoleForCloudFrontLogger
en la cuenta. Para obtener más información acerca de este rol, consulte Roles vinculados a servicios para Lambda@Edge.