View a markdown version of this page

Desafíos a la hora de probar aplicaciones sin servidor - AWS Guía prescriptiva

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Desafíos a la hora de probar aplicaciones sin servidor

Al utilizar emuladores y llamadas simuladas para probar la aplicación sin servidor en el escritorio local, es posible que se produzcan incoherencias en las pruebas a medida que el código avanza de un entorno a otro en la canalización. CI/CD Es posible que las pruebas unitarias que cree en su escritorio para validar la lógica empresarial de la aplicación no incluyan o representen con precisión aspectos críticos de los servicios en la nube. Las pruebas completas no se pueden realizar localmente de forma aislada. Requieren verificar los permisos y las configuraciones de varios servicios.

En las siguientes secciones, se describen los desafíos que puede experimentar al implementar una estrategia de pruebas en la nube. En las siguientes secciones se describen los desafíos a los que se enfrentan los clientes cuando intentan implementar una estrategia de pruebas en la nube y nuestra guía sobre las mejores prácticas para lograr una cobertura de pruebas eficaz.

Ejemplo: una función Lambda que crea un bucket de Amazon S3

Si la lógica de una función Lambda depende de la creación de un bucket de Amazon S3, una prueba completa debería confirmar que Amazon S3 se ha llamado correctamente y que el bucket se ha creado correctamente. En una configuración de prueba simulada, puede simular una respuesta correcta y, potencialmente, agregar un caso de prueba para gestionar una respuesta de error. En un escenario de pruebas de emulación, es posible que se llame a la CreateBucket API, pero la identidad que realiza la llamada no se originará en el servicio Lambda que asume una función y, en su lugar, se utilizará una autenticación de marcador de posición; esta suele ser su función o identidad de usuario más permisiva.

Lo más probable es que las configuraciones de simulación y emulación analizadas anteriormente sirvan para probar qué hará la función de Lambda si llama de forma correcta (o sin éxito) a Amazon S3. Sin embargo, esas pruebas no podrán determinar si la función Lambda es capaz de crear correctamente el bucket, dada la configuración de la función. Es probable que esta configuración esté representada por una infraestructura como código (IaC) para productos y servicios como Terraform o AWS CloudFormation AWS SAM HashiCorp Terraform. Un posible problema es que el rol asignado a la función no tenga una política adjunta que permita la s3:CreateBucket acción y, por lo tanto, la función siempre fallará cuando se despliegue en un entorno de nube.

Ejemplo: una función Lambda que procesa mensajes de Amazon SQS

Si una cola de Amazon Simple Queue Service (Amazon SQS) es el origen de una función de Lambda, una prueba completa debería comprobar que la función de Lambda se invoca correctamente cuando se coloca un mensaje en una cola. Las pruebas de emulación y las pruebas simuladas generalmente se configuran para ejecutar el código de la función Lambda directamente y para simular la integración de Amazon SQS pasando una carga útil de eventos JSON (o un objeto deserializado) como entrada del controlador de funciones.

Las pruebas locales que simulan la integración de Amazon SQS probarán lo que hará la función Lambda cuando Amazon SQS la llame con una carga útil determinada, pero no garantizarán que Amazon SQS invoque correctamente la función Lambda cuando se despliegue en un entorno de nube.

Algunos ejemplos de problemas de configuración que pueden surgir con Amazon SQS y Lambda son los siguientes:

  • El tiempo de espera de visibilidad de Amazon SQS es demasiado bajo, lo que provoca varias invocaciones cuando solo se tiene prevista una.

  • La función de ejecución de la función Lambda no permite leer los mensajes de la cola (mediante sqs:ReceiveMessagesqs:DeleteMessage, o). sqs:GetQueueAttributes

  • El evento de ejemplo que se pasa a la función de Lambda supera la cuota de tamaño de los mensajes de Amazon SQS. Por lo tanto, la prueba no es válida porque Amazon SQS nunca podrá enviar un mensaje de ese tamaño.

Como se muestra en estos ejemplos, es probable que las pruebas que cubren la lógica empresarial, pero no las configuraciones entre los servicios en la nube, arrojen resultados poco fiables.