我刚刚创建了第一个函数,从 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
的东西。我尝试了两种方法,但似乎都不起作用。我仍然收到该错误。
您可以将第三方库直接包含在您的 Lambda 函数 .zip 部署中。无需为这些创建 Lambda 层。我建议先尝试一下,因为创建图层可能会更复杂一些。将所有内容都放在一个 .zip 文件中,您可以打开 zip 文件并验证库是否位于相对于 Python 脚本的正确位置。
我想我有点困惑我是否应该压缩所有这些,或者只是名称中带有谷歌的东西。我尝试了两种方法,但似乎都不起作用。
你应该拉上里面所有东西的拉链。如果 pip 下载了所有其他库,因为您正在使用的 Google 库依赖于它们,那么它们也都需要成为您的 Lambda 函数的一部分。
我建议您查看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
我使用两种方法安装 Python 模块。
资源:
2 使用 Docker 镜像
资源:
要在 lambda 中使用任何第三方库,您可以使用 lambda 层。
使用以下命令安装依赖项
pip3 install <your_package> -t .
压缩包
zip -r your_pkg_layer.zip .
在
aws
中创建图层并上传 zip,然后将 layer
添加到您的 lambda
函数
您可以在medium中关注这个博客。
您可以使用 lambda 层在 lambda 中使用您需要的任何 python 包。
❯ python3 --version
Python 3.12.2
mkdir py_packages
cd py_packages
python3 -m venv venv
source venv/bin/activate
mkdir python
cd python
pip install requests -t .
rm -rf *dist-info
cd ..
zip -r requets-package.zip python
aws s3 cp requets-package.zip s3://s3-bucket-name/
现在您可以创建新的 lambda 层或新版本,并使用此 zip 文件 URL 或从本地系统上传。并附加到 lambda 来访问包。