在 Python 3.8 中更新 Lambda 函数 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

在 Python 3.8 中更新 Lambda 函数

本教程将指导您完成安装 Python 库、创建部署程序包以及使用 Amazon Command Line Interface (Amazon CLI) 在 Python 3.8 中更新 Lambda 函数的过程。

以下步骤假设您已创建 Lambda 函数,并正在更新用作部署程序包的 .zip 文件。如果您尚未创建函数,请参阅 教程:在 Python 3.8 中创建 Lambda 函数

先决条件

Amazon CLI 是一种开源工具,让您能够在命令行 Shell 中使用命令与 Amazon 服务进行交互。要完成本节中的步骤,您必须满足以下条件:

更新没有运行时依赖项的函数

依赖项可以是函数代码的 Lambda 运行时环境中未包含的任何程序包、模块或其他程序集依赖项。有关更多信息,请参阅 什么是运行时依赖项?

有关更多信息,请参阅 什么是运行时依赖项?

以下步骤介绍了如何创建仅包含函数代码的部署程序包以及如何使用 Amazon CLI 将其上传到 Lambda。

更新没有运行时依赖项的 Python 函数

  1. 将函数代码文件添加到部署程序包的根目录中。

    ~/my-function$ zip my-deployment-package.zip lambda_function.py
  2. 使用 fileb:// 前缀将二进制 .zip 文件上传到 Lambda 并更新函数代码。

    ~/my-function$ aws lambda update-function-code --function-name MyLambdaFunction --zip-file fileb://my-deployment-package.zip { "FunctionName": "mylambdafunction", "FunctionArn": "arn:aws-cn:lambda:us-west-2:123456789012:function:mylambdafunction", "Runtime": "python3.8", "Role": "arn:aws-cn:iam::123456789012:role/lambda-role", "Handler": "lambda_function.lambda_handler", "CodeSize": 815, "CodeSha256": "GcZ05oeHoJi61VpQj7vCLPs8DwCXmX5sE/fE2IHsizc=", "Version": "$LATEST", "RevisionId": "d1e983e3-ca8e-434b-8dc1-7add83d72ebd", ... }

本步骤中的 Lambda 函数使用 lambda_function.lambda_handler 的函数处理程序。有关函数处理程序命名约定的更多信息,请参阅 Python 中的 Amazon Lambda 函数处理程序 中的命名

更新具有运行时依赖项的函数

依赖项可以是函数代码的 Lambda 运行时环境中未包含的任何程序包、模块或其他程序集依赖项。有关更多信息,请参阅 什么是运行时依赖项?

有关更多信息,请参阅 什么是运行时依赖项?

以下步骤介绍如何安装请求库、创建部署程序包以及使用 Amazon CLI 将其上传到 Lambda。这些步骤假定您没有使用虚拟环境。 它还假设您的函数代码使用 Python 3.8 和 python3.8 Lambda 运行时

注意

如果要创建层中使用的部署包,请参阅在层中包括库依赖项

更新有依赖项的 Python 函数

  1. 使用 pip--target 选项在 package 目录中安装库。

    ~/my-function$ pip install --target ./package requests
    注意

    为了防止在 基于 Debian 的系统(如 Ubuntu)上发生 distutils 错误,您可能需要传递 --system 选项。

  2. 导航到 package 目录。

    cd package
  3. 使用已安装库在根目录下创建部署程序包。

    ~/my-function$ zip -r ../my-deployment-package.zip .

    最后一个命令将部署程序包保存到 my-function 目录的根目录中。

  4. 导航回 my-function 目录。

    cd ..
  5. 将函数代码文件添加到部署程序包的根目录中。

    ~/my-function$ zip -g my-deployment-package.zip lambda_function.py

    完成此步骤后,目录结构应如下:

    my-deployment-package.zip$ │ lambda_function.py │ __pycache__ │ certifi/ │ certifi-2020.6.20.dist-info/ │ chardet/ │ chardet-3.0.4.dist-info/ ...
  6. 使用带有 fileb:// 前缀的 update-function-code 命令将二进制 .zip 文件上传到 Lambda 并更新函数代码。

    ~/my-function$ aws lambda update-function-code --function-name MyLambdaFunction --zip-file fileb://my-deployment-package.zip { "FunctionName": "mylambdafunction", "FunctionArn": "arn:aws-cn:lambda:us-west-2:123456789012:function:mylambdafunction", "Runtime": "python3.8", "Role": "arn:aws-cn:iam::123456789012:role/lambda-role", "Handler": "lambda_function.lambda_handler", "CodeSize": 2269409, "CodeSha256": "GcZ05oeHoJi61VpQj7vCLPs8DwCXmX5sE/fE2IHsizc=", "Version": "$LATEST", "RevisionId": "a9c05ffd-8ad6-4d22-b6cd-d34a00c1702c", ... }

本步骤中的 Lambda 函数使用 lambda_function.lambda_handler 的函数处理程序。有关函数处理程序命名约定的更多信息,请参阅 Python 中的 Amazon Lambda 函数处理程序 中的命名

使用虚拟环境

依赖项可以是函数代码的 Lambda 运行时环境中未包含的任何程序包、模块或其他程序集依赖项。有关更多信息,请参阅 什么是运行时依赖项?

有关更多信息,请参阅 什么是运行时依赖项?

以下步骤介绍如何安装请求库、创建部署程序包以及使用 Amazon CLI 将其上传到 Lambda。 它还假设您的函数代码使用 Python 3.8 和 python3.8 Lambda 运行时

注意

如果要创建层中使用的部署包,请参阅在层中包括库依赖项

使用虚拟环境更新 Python 函数

  1. 激活虚拟环境。例如:

    ~/my-function$ source myvenv/bin/activate
  2. 使用 pip 安装库。

    (myvenv) ~/my-function$ pip install requests
  3. 停用虚拟环境。

    (myvenv) ~/my-function$ deactivate
  4. 使用已安装库在根目录下创建部署程序包。

    ~/my-function$cd myvenv/lib/python3.8/site-packages zip -r ../../../../my-deployment-package.zip .

    最后一个命令将部署程序包保存到 my-function 目录的根目录中。

    提示

    库可能会显示在 site-packagesdist-packages 的第一个文件夹 liblib64 中。可以使用 pip show 命令来定位特定包。

  5. 将函数代码文件添加到部署程序包的根目录中。

    ~/my-function/myvenv/lib/python3.8/site-packages$ cd ../../../../ ~/my-function$ zip -g my-deployment-package.zip lambda_function.py

    完成此步骤后,目录结构应如下:

    my-deployment-package.zip$ │ lambda_function.py │ __pycache__ │ certifi/ │ certifi-2020.6.20.dist-info/ │ chardet/ │ chardet-3.0.4.dist-info/ ...
  6. 使用 fileb:// 前缀将二进制 .zip 文件上传到 Lambda 并更新函数代码。

    ~/my-function$ aws lambda update-function-code --function-name MyLambdaFunction --zip-file fileb://my-deployment-package.zip { "FunctionName": "mylambdafunction", "FunctionArn": "arn:aws-cn:lambda:us-west-2:123456789012:function:mylambdafunction", "Runtime": "python3.8", "Role": "arn:aws-cn:iam::123456789012:role/lambda-role", "Handler": "lambda_function.lambda_handler", "CodeSize": 5912988, "CodeSha256": "A2P0NUWq1J+LtSbkuP8tm9uNYqs1TAa3M76ptmZCw5g=", "Version": "$LATEST", "RevisionId": "5afdc7dc-2fcb-4ca8-8f24-947939ca707f", ... }

本步骤中的 Lambda 函数使用 lambda_function.lambda_handler 的函数处理程序。有关函数处理程序命名约定的更多信息,请参阅 Python 中的 Amazon Lambda 函数处理程序 中的命名