如何在 lambda 函数中创建层

4 python amazon-web-services aws-lambda

创建步骤如下

  1. 创建虚拟环境并激活
  2. pip 安装elasticsearch
  3. 压缩 site-packages.zip 内的文件夹

4.在AWS中创建层(假设名称是elastic

  1. 在 lambda_handler 中添加以下代码并添加 Layerelastic

下面是代码

import json
from elasticsearch import Elasticsearch, RequestsHttpConnection
def lambda_handler(event, context):
    # TODO implement
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }
Run Code Online (Sandbox Code Playgroud)

我还是得到了 "errorMessage": "Unable to import module 'lambda_function': No module named 'elasticsearch'",

Mar*_*cin 6

如果可以的话,我想推荐一种从未让我失败过的替代技术。该技术包括最近的AWS 博客中描述的docker 工具

因此对于这个问题,我用如下方式进行了验证:elasticsearch

  1. 创建空文件夹,例如mylayer.

  2. 转到该文件夹​​并创建requirements.txt包含以下内容的文件

elasticsearch
Run Code Online (Sandbox Code Playgroud)
  1. 运行以下 docker 命令(可以根据需要调整 python 版本):
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"
Run Code Online (Sandbox Code Playgroud)
  1. 创建图层为 zip:
zip -r elastic.zip python > /dev/null
Run Code Online (Sandbox Code Playgroud)
  1. elastic.zip在AWS控制台中创建基于的lambda层。不要忘记指定Compatible runtimespython3.8.

  2. 使用以下 lambda 函数测试 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!')
    }
Run Code Online (Sandbox Code Playgroud)

该函数正确执行:

['__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']
Run Code Online (Sandbox Code Playgroud)