【发布时间】:2019-06-09 21:37:19
【问题描述】:
我知道使用部署包的概念相对简单,但过去几个小时我一直在努力解决这个问题。我正在关注documentation from AWS on packaging up Lambda dependencies。我想编写一个简单的 Lambda 函数来根据某个事件更新 PostgreSQL 表中的条目。
我首先创建一个新目录来工作:
mkdir lambdas-deployment && cd lambdas-deployment
然后我创建一个新的虚拟环境并安装我的包:
virtualenv v-env
source v-env/bin/activate
pip3 install sqlalchemy boto3 psycopg2
我的 trigger-yaml-parse.py 函数(它实际上还没有使用 sqlalchemy 库,但我只是想成功导入它):
import logging
import json
import boto3
import sqlalchemy
def lambda_handler(event, context):
records = event['Records']
s3_records = filter(lambda record: record['eventSource'] == 'aws:s3', records)
object_created_records = filter(lambda record: record['eventName'].startswith('ObjectCreated'), s3_records)
for record in object_created_records:
key = record['s3']['object']['key']
print(key)
我一直按照 AWS 文档中的说明进行操作。
zip -r trigger-yaml-parse.zip $VIRTUAL_ENV/lib/python3.6/site-packages/
然后我添加我的功能代码:
zip -g trigger-yaml-parse.zip trigger-yaml-parse.py
我得到updating: trigger-yaml-parse.py (deflated 48%)的输出。
然后我将新的压缩部署上传到我的 S3 构建存储桶:
aws s3 cp trigger-yaml-parse.zip s3://lambda-build-bucket
但是,我的 Lambda 函数在执行时失败并出现以下错误:
START RequestId: 396c6c3c-3f5b-4df9-b7f1-057842a87eb3 Version: $LATEST
Unable to import module 'trigger-yaml-parse': No module named 'sqlalchemy'
我做错了什么?我一步一步地按照 AWS 的文档进行操作。
【问题讨论】:
标签: python amazon-web-services amazon-s3 sqlalchemy aws-lambda