es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Ejecutando pruebas (pytest) en CI (gitlab-ci kubernetes runner) para AWS Lambda con Layer utilizando ‘sam local invoke’

La razón por la que estoy tratando de ejecutar sam local invoke como parte de mi pipeline de CI es porque quiero ejecutar algunas pruebas unitarias e integradas para una función lambda que usa una capa. La capa está administrada en un proyecto diferente y, por lo tanto, su código y bibliotecas no están disponibles directamente en mi proyecto de función lambda.

Con algo de inspiración de esta publicación, conseguí que las pruebas unitarias e integradas funcionaran localmente utilizando sam local invoke que utiliza ‘samtemplate_tests.yaml’, que llama a app_tests.py para ejecutar las pruebas unitarias e integradas definidas en la carpeta .tests/.

samtemplate_tests.yaml

Resources:
MyFunctionTests:
Type: AWS::Serverless::Function
Properties:
CodeUri: src/
Handler: app_tests.lambda_handler
Layers:
– arn:aws:lambda:us-east-1:<account#>:layer:MyLayer:1

app_tests.py

import pytest
def lambda_handler(event, _):
res = pytest.main([“-x”, “./tests”])
return res

Este truco funciona bien localmente y no me importa tener que mantener dos archivos adicionales (samtemplate_tests.yml, app_tests.py) en mi proyecto de lambda para solucionar la dependencia de la capa.

Sin embargo, hacer que esta solución funcione a través de CI significaría que necesito mejorar mi infraestructura de CI para admitir ‘docker in docker’. Para CI, estoy usando Gitlab CI con runners de Kubernetes, que utilizan una imagen de construcción debian:buster instalada con los pre-requisitos necesarios. No estoy muy familiarizado con dind y otras características avanzadas de Docker, así que estaba preguntando si alguien podría proporcionar dirección sobre los enfoques que podría explorar.

TL;DR: ¿Hay alguna forma de ejecutar sam local invoke como parte de CI?

actualización: Acabo de encontrar esta solicitud de función abierta en aws-sam-cli, lo cual definitivamente ayudaría.</account#>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en tecnología de la información especializado en kubernetes, pytest, gitlab-ci, aws-sam y aws-lambda-layers, la razón por la cual me gustaría ejecutar “sam local invoke” como parte de mi pipeline de integración continua (CI) es para realizar pruebas unitarias e integradas en una lambda que utiliza una capa. La capa está gestionada en un proyecto diferente y su código y bibliotecas no están disponibles directamente en mi proyecto de función lambda.

    Para solucionar esto, puedo crear dos archivos adicionales, “samtemplate_tests.yml” y “app_tests.py”, en mi proyecto de lambda, lo cual funciona bien localmente. Sin embargo, para que esta solución funcione a través de CI, necesitaría mejorar mi infraestructura de CI para admitir “docker dentro de docker” (docker in docker). Para CI, estoy utilizando Gitlab CI con corredores de kubernetes, los cuales utilizan una imagen de construcción “debian:buster” instalada con los pre-requisitos necesarios.

    Para ejecutar “sam local invoke” como parte de CI, podría explorar los siguientes enfoques:

    1. Mejorar mi infraestructura de CI para admitir “docker dentro de docker”, lo cual puede ejecutar “sam local invoke”.
    2. Esperar la implementación de una característica solicitada en aws-sam-cli, que facilitaría la ejecución de “sam local invoke” en CI.

    En conclusión, ejecutar “sam local invoke” como parte de CI ayuda a probar una lambda con una capa, aunque la capa se gestione por separado.

Comments are closed.