AWS Lambda 函数 (Python) - 如何使用外部库?

AWS Lambda Function (Python) - How to use external libraries?

我正在尝试使用以下代码创建 Lambda 函数 (Python):

import json
import qrcode
from PIL import Image, ImageDraw
import boto3

def lambda_handler(event, context):
    
    input_data = "https://m.media-amazon.com/images/I/81xuW7h1tkL._AC_SL1500_.jpg"
    qr = qrcode.QRCode(
            version=1,
            box_size=10,
            border=5)
    qr.add_data(input_data)
    qr.make(fit=True)
    img = qr.make_image(fill='black', back_color='white')
    file_name = "qrcode001.png"
    img.save(file_name)
    string = "WhatAmIGoodFor"
    encoded_string = string.encode("utf-8")
    bucket_name = "mys3bucket"
    s3_path = "qrcode/" + file_name
    s3 = boto3.resource("s3")
    s3.Bucket(bucket_name).put_object(Key=s3_path, Body=encoded_string)

    
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

我将所有需要的模块安装在如下相同的文件夹中:

并通过 CLI 创建如下:

aws lambda create-function --function-name generate_ticket \
--zip-file fileb://Archive.zip --handler lambda_function.lambda_handler --runtime python3.9 \
--role arn:aws:iam::999999999:role/service-role/generate_ticket-role-hj1kcybi

如何在我的 Lambda 函数中正确使用外部库?

Python 模块不应位于文件夹中。它们应该与 lambda_function.py 处于同一级别,然后将它们压缩在一起。

如果你没有很多依赖项,这没关系,但是如果有更多的额外库,你的 lambda 函数冷启动会变慢,所以最好创建一个包含你的依赖项的 lambda 层并附加它层到 lambda 函数。层的配置,可以在official documentation

中查看详情