首页 > 解决方案 > 如何使用 Boto3 指定 Lambda 函数应在 S3 中查找依赖项的位置

问题描述

我想使用 Boto3 将脚本上传到 S3,创建一个指定 S3 密钥的 Lambda 函数来运行脚本。为了加快这个过程,我还会在 S3 中预先存储一些 Python 依赖项,我如何指定 lambda 函数应该在哪里查找这些依赖项?另外,如何使用 Boto3 在执行函数后从 S3 中删除脚本?

我的代码将如下所示:

import zipfile
archive = zipfile.ZipFile('function.zip', 'w')
zip.write('index.js', 'path/on/disk/index.js')
.......

client.put_object(Body=archive, Bucket='bucket-name', Key='function.zip')

lambda_Client = boto3.client('lambda', aws_access_key_id=accessKey,
                       aws_secret_access_key=secretKey,region_name=region)
response = lambda_Client.create_function(
            Code={
                'S3Bucket': 'bucket-name',
                'S3Key': 'function.zip', #how can i create or fetch this S3Key
            },
            Description='Process image objects from Amazon S3.',
            FunctionName='function_name',
            Handler='index.handler',
            Publish=True,
            Role='arn:aws:iam::123456789012:role/lambda-role',
            Runtime='nodejs12.x',
        )

标签: python-3.xamazon-web-servicesamazon-s3aws-lambdaboto3

解决方案


我假设“依赖项”是指第三方 Python 包。

Lambda 不会为您的 Python Lambda 函数获取依赖项。当您最初创建Lambda 函数或随后更新Lambda 函数时,您需要打包依赖项。

要删除 Lambda 函数,请使用delete_function。要从 S3 中删除脚本或其他脚本,请使用delete_object

如果通过“依赖项”,您只是指您存储在 S3 中的资产,例如 JSON 文件或其他,则使用 boto3 的 S3 功能(例如get_object)来检索它们。


推荐阅读