¿Hay alguna forma de probar aws lambda en local? Sé que hay un paquete cuyo nombre es 'localstack' pero parece que no hay mucha gente que lo haya probado.
Puede ejecutar sus funciones Lambda de la misma manera que ejecutaría cualquier secuencia de comandos de Python, por ejemplo
if __name__ == "__main__": event = [] context = [] lambda_handler(event, context)Si usa entornos virtuales, esto ayuda a garantizar que tenga todas las dependencias necesarias instaladas para su función lambda junto con la versión correcta de python.
¿Hay algún servicio adicional que necesite que esté presente en 'localstack' que no tenga localmente?
He usado Python Lambda Local en pip, https://pypi.python.org/pypi/python-lambda-local
Espero que te ayude.
Creo que Moto , una biblioteca que permite que sus pruebas simulen fácilmente los servicios de AWS, podría ser muy útil.
Imagina que tienes el siguiente código python que quieres probar:
import boto3 class MyModel(object): def __init__(self, name, value): self.name = name self.value = value def save(self): s3 = boto3.client('s3', region_name='us-east-1') s3.put_object(Bucket='mybucket', Key=self.name, Body=self.value)Tómese un minuto para pensar cómo habría probado eso en el pasado.
Ahora mira cómo podrías probarlo con Moto:
import boto3 from moto import mock_s3 from mymodule import MyModel @mock_s3 def test_my_model_save(): conn = boto3.resource('s3', region_name='us-east-1') # We need to create the bucket since this is all in Moto's 'virtual' AWS account conn.create_bucket(Bucket='mybucket') model_instance = MyModel('steve', 'is awesome') model_instance.save() body = conn.Object('mybucket', 'steve').get()['Body'].read().decode("utf-8") assert body == b'is awesome'Con el decorador finalizando la prueba, todas las llamadas a s3 se simulan automáticamente. El simulacro mantiene el estado de los cubos y llaves.