Pasos seguidos para crear
4.Crear capa en AWS (digamos que el nombre es elastic )
elasticA continuación se muestra el código
import json from elasticsearch import Elasticsearch, RequestsHttpConnection def lambda_handler(event, context): # TODO implement return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') } Todavía recibí "errorMessage": "Unable to import module 'lambda_function': No module named 'elasticsearch'",
Si me lo permite, me gustaría recomendar una técnica alternativa que nunca me ha fallado. La técnica incluye la herramienta docker descrita en el reciente blog de AWS :
Por lo tanto, para esta pregunta, lo verifiqué usando elasticsearch de la siguiente manera:
Cree una carpeta vacía, por ejemplo, mylayer .
Vaya a la carpeta y cree el archivo requirements.txt con el contenido de
elasticsearch docker run -v "$PWD":/var/task "lambci/lambda:build-python3.8" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.8/site-packages/; exit" zip -r elastic.zip python > /dev/null Cree una capa lambda basada en elastic.zip en la consola de AWS. No olvide especificar los tiempos de Compatible runtimes con python3.8 .
Pruebe la capa en lambda usando la siguiente función lambda:
import json from elasticsearch import Elasticsearch, RequestsHttpConnection def lambda_handler(event, context): # TODO implement print(dir(Elasticsearch)) return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') }La función se ejecuta correctamente:
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'bulk', 'clear_scroll', 'close', 'count', 'create', 'delete', 'delete_by_query', 'delete_by_query_rethrottle', 'delete_script', 'exists', 'exists_source', 'explain', 'field_caps', 'get', 'get_script', 'get_script_context', 'get_script_languages', 'get_source', 'index', 'info', 'mget', 'msearch', 'msearch_template', 'mtermvectors', 'ping', 'put_script', 'rank_eval', 'reindex', 'reindex_rethrottle', 'render_search_template', 'scripts_painless_execute', 'scroll', 'search', 'search_shards', 'search_template', 'termvectors', 'update', 'update_by_query', 'update_by_query_rethrottle']Como @Marcin ya menciona una opción, se requiere que Docker esté instalado en la máquina de destino. Si desea omitir la ventana acoplable, puede usar el siguiente script para crear y publicar una capa en AWS.
Todo lo que necesita
./creater_layer.sh <package_name> <layer_name> ./creater_layer.sh elasticsearch my-layer guión creater_layer.sh
path="app" package="${1}" layername="${2}" mkdir -p $path pip3 install "${package}" --target "${path}/python/lib/python3.8/site-packages/" cd $path && zip -r ../lambdalayer.zip . aws lambda publish-layer-version --layer-name "${layername}" --description "My layer" --license-info "MIT" --zip-file "fileb://../lambdalayer.zip" --compatible-runtimes python3.8