如何将Python库添加到AWS Lambda?

问题描述 投票:0回答:5

我刚刚创建了第一个函数,从 Google Sheets 中的 Excel 工作表中获取数据。我收到一个错误:

"errorMessage": "Unable to import module 'lambda_function': No module named 'googleapiclient'"

所以我在谷歌上搜索了如何上传Python模块(https://www.youtube.com/watch?v=HBt8MXHcaPI),它说要在VSCode之类的东西中创建一个虚拟环境,pip安装我需要的库,然后压缩它们并将它们作为一个层添加到 Lambda。

我这样做了两次。 (看起来好像正在安装一大堆库,所以我查找了如何删除所有库(

pip freeze | xargs pip uninstall -y
)并再次尝试)。所以这是起点和完成之后
pip install google-api-python-client

我想我有点困惑我是否应该将所有这些都压缩起来,或者只是名称中带有

google
的东西。我尝试了两种方法,但似乎都不起作用。我仍然收到该错误。

python amazon-web-services aws-lambda google-api
5个回答
2
投票

您可以将第三方库直接包含在您的 Lambda 函数 .zip 部署中。无需为这些创建 Lambda 层。我建议先尝试一下,因为创建图层可能会更复杂一些。将所有内容都放在一个 .zip 文件中,您可以打开 zip 文件并验证库是否位于相对于 Python 脚本的正确位置。

我想我有点困惑我是否应该压缩所有这些,或者只是名称中带有谷歌的东西。我尝试了两种方法,但似乎都不起作用。

你应该拉上里面所有东西的拉链。如果 pip 下载了所有其他库,因为您正在使用的 Google 库依赖于它们,那么它们也都需要成为您的 Lambda 函数的一部分。


1
投票

我建议您查看AWS SAM

AWS SAM 是 CloudFormation 的扩展,可简化无服务器应用程序的开发。

要使用 AWS 无服务器应用程序模型 (SAM) 部署 AWS Lambda 函数,您需要执行以下步骤:

  • 创建 SAM 模板:这是一个 YAML 文件,定义您要部署的 AWS 资源,包括 Lambda 函数及其依赖项。

  • 打包函数:将函数代码和所有依赖项打包到 .zip 文件中。 (为此,您需要一个requirements.txt 文件,其中包含您的代码所需的所有依赖项)

  • 部署函数:使用 AWS CLI 命令部署将 SAM 模板和函数代码部署到 AWS。该命令将创建或更新 CloudFormation 堆栈,从而创建或更新指定的 AWS 资源。

SAM 模板示例:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
  MyFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: main.handler
      Runtime: python3.8
      CodeUri: .
      Description: "This is my SAM function"
      MemorySize: 128
      Timeout: 3

AWS CLI 命令示例:

sam build --debug --template-file template.yaml
sam package --s3-bucket your_s3_bucket --s3-prefix sam-deployments \
                  --output-template-file packaged-template.yaml
sam deploy -t packaged-template.yaml --stack-name your_stack_name \
          --region your_aws_region --capabilities CAPABILITY_IAM 

使用 AWS 无服务器应用程序模型 (SAM) 的 Lambda 项目的常见文件夹结构如下所示:

my-lambda-project/
├── main.py # Lambda function code
├── template.yaml # SAM template
├── requirements.txt # Python dependencies

0
投票

我使用两种方法安装 Python 模块。

1 使用 AWS Lambda 层

资源:

2 使用 Docker 镜像

  • 创建 Docker 镜像并将其上传到 Amazon ECR
  • 使用容器(Docker 映像)创建 Lambda 函数

资源:


0
投票

要在 lambda 中使用任何第三方库,您可以使用 lambda 层。

使用以下命令安装依赖项

pip3 install <your_package> -t .

压缩包

zip -r your_pkg_layer.zip .

aws
中创建图层并上传 zip,然后将
layer
添加到您的
lambda
函数

您可以在medium中关注这个博客。


0
投票

您可以使用 lambda 层在 lambda 中使用您需要的任何 python 包。

  1. 已安装所需版本的Python
❯ python3 --version
Python 3.12.2
  1. 为包创建一个文件夹并将 cd 放入其中
mkdir py_packages
cd py_packages
  1. 创建虚拟环境
python3 -m venv venv
source venv/bin/activate
  1. 创建一个python文件夹。这是包含所有文件的文件夹。
mkdir python
cd python
  1. 安装请求包。您可以安装您选择的任何软件包。
pip install requests -t . 
  1. 让我们节省空间并从文件夹中删除扩展名为“.dis-info”的对象。不需要它们。
rm -rf *dist-info
  1. 压缩文件夹以上传到 aws lambda 层
cd ..
zip -r requets-package.zip python
  1. 如果是小包,上传到S3可以直接通过lambda层控制台上传
aws s3 cp requets-package.zip s3://s3-bucket-name/

现在您可以创建新的 lambda 层或新版本,并使用此 zip 文件 URL 或从本地系统上传。并附加到 lambda 来访问包。

© www.soinside.com 2019 - 2024. All rights reserved.