本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 psycopg2 库导入 AWS Lambda 到以与你的 Postgre 数据库进行交互 SQL
由 Louis Hourcade 创作 () AWS
摘要
Psycopg 是一款适用psycopg2
库来编写与 Postgre SQL 数据库交互的 Python 应用程序。
在 Amazon Web Services (AWS) 上,开发人员还使用AWS Lambda为应用程序或后端服务运行代码。Lambda 是一种无服务器、事件驱动的计算服务,无需预置或管理服务器即可运行代码。
默认情况下,当您创建使用 Python 运行时(版本 3.9、3.8 或 3.7)的新函数时,Lambda 运行时环境是根据提供的 L ambda 基础映像pandas
或psycopg2
。要使用库,您需要将其捆绑到自定义包中并将其附加到 Lambda。
有多种方法可以捆绑和附加库,包括以下几种:
此模式演示了前两个选项。
使用.zip 部署包,将pandas
库添加到您的 Lambda 函数相对简单。在您的 Linux 计算机上创建一个文件夹,将 Lambda 脚本与pandas
库和库的依赖项一起添加到该文件夹,压缩该文件夹,然后将其作为 Lambda 函数的源代码提供。
尽管使用.zip 部署包是一种常见的做法,但这种方法不适用于该psycopg2
库。此模式首先显示您使用.zip 部署包将psycopg2
库添加到 Lambda 函数时遇到的错误。然后,该模式显示了如何从 Dockerfile 部署 Lambda 以及如何编辑 Lambda 映像以使库正常运行。psycopg2
有关该模式部署的三种资源的信息,请参阅 “其他信息” 部分。
先决条件和限制
先决条件
AWS 账户 具有足够权限部署此模式所用 AWS 资源的活跃用户
AWS Cloud Development Kit (AWS CDK) 通过运行全局安装
npm install -g aws-cdk
一个 Git 客户端
Python
Docker
限制
有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性,请参阅AWS 服务 按地区划分
。有关特定终端节点,请参阅服务终端节点和配额页面,然后选择服务的链接。
产品版本
AWSLambda 运行时版本:Python 3.8(该模式可以适用于其他 Python 版本。)
Psycopg2 版本 2.9.3
熊猫版 1.5.2
架构
解决方案概述
为了说明在 Lambda 中使用该psycopg2
库时可能面临的挑战,该模式部署了两个 Lambda 函数:
一个使用.zip 文件创建的 Python 3.8 运行时的 Lambda 函数。使用 pip 将
psycopg2
和pandas
库安装到此.zip 部署包中。一个使用 Python 3.8 运行时的 Lambda 函数,该函数是从 DockerFile 创建的。Dockerfile 会将
psycopg2
和pandas
库安装到 Lambda 容器镜像中。
第一个 Lambda 函数将pandas
库及其依赖项安装在.zip 文件中,Lambda 可以使用该库。
第二个 Lambda 函数演示,通过为 Lambda 函数构建容器镜像,您可以在 Lambda 中运行和pandas
库psycopg2
。
工具
AWS 服务
AWS Cloud Development Kit (AWS CDK)是一个软件开发框架,可帮助您在代码中定义和配置AWS云基础架构。
AWS Lambda 是一项计算服务,可帮助您运行代码,无需预置或管理服务器。它仅在需要时运行您的代码,并且能自动扩缩,因此您只需为使用的计算时间付费。
其他工具
代码存储库
此模式的代码可在上的 import-psycopg2--存储库
最佳实践
此模式为您提供了一个使用 AWS CDK 从 Dockerfile 创建 Lambda 函数的工作示例。如果您在应用程序中重复使用此代码,请确保部署的资源满足所有安全要求。使用诸如 Checkov
操作说明
任务 | 描述 | 所需技能 |
---|---|---|
克隆存储库。 | 要在本地计算机上克隆 GitHub 存储库,请运行以下命令:
| 将军 AWS |
配置您的部署。 | 使用有关您的 AWS 账户以下信息的
| 将军 AWS |
任务 | 描述 | 所需技能 |
---|---|---|
引导你的 AWS 账户. | 如果您尚未引导AWS环境,请使用您的账户 AWS 凭据运行以下命令: AWS
| 将军 AWS |
部署代码。 | 要部署 AWS CDK 应用程序,请运行以下命令:
| 将军 AWS |
任务 | 描述 | 所需技能 |
---|---|---|
测试根据.zip 文件创建的 Lambda 函数。 | 要测试通过.zip 文件创建的 Lambda 函数,请执行以下操作:
由于 Lambda 在默认镜像中找不到所需的 Postgre SQL 库,因此它无法使用该库。 | 将军 AWS |
测试从 Dockerfile 创建的 Lambda 函数。 | 要在 Lambda 函数中使用该 要测试从 Dockerfile 创建的 Lambda 函数,请执行以下操作:
以下代码显示了 AWS CDK 模板创建的 Dockerfile:
Dockerfile 采用提供的 Python 3.8 运行时的 Lamb AWS da 镜像并安装 p ostgresql-devel | 将军 AWS |
相关资源
其他信息
在这种模式中, AWS CDK 模板提供了一个包含三种资源的 AWS 堆栈:
Lambda 函数的 AWS Identity and Access Management (IAM) 角色。
一个带有 Python 3.8 运行时的 Lambda 函数。该函数是从部署包中
Constructs/lambda/lambda_deploy.zip
部署的。一个带有 Python 3.8 运行时的 Lambda 函数。该函数是从文件夹下的 Dockerfile 部署的
Constructs
两个 Lambda 函数的脚本都会检查pandas
和psycopg2
库是否成功导入:
import pandas print("pandas successfully imported") import psycopg2 print("psycopg2 successfully imported") def handler(event, context): """Function that checks whether psycopg2 and pandas are successfully imported or not""" return {"Status": "psycopg2 and pandas successfully imported"}
lambda_deploy.zip
部署包是使用 Constructs/lambda/build.sh
bash 脚本构建的。此脚本创建文件夹、复制 Lambda 脚本、安装pandas
和psycopg2
库并生成.zip 文件。要自己生成.zip 文件,请运行此 bash 脚本并重新部署堆栈。 AWS CDK
Dockerfile 以为带有 Python 3.8 运行时的 Lambda AWS 提供的基础映像开头。Dockerfile 会在默认映像之上安装pandas
和psycopg2
库。
此模式显示了一种在 Lambda 中使用psycopg2
库的方法,即从 Dockerfile 创建函数并向 Lambda 映像添加所需的依赖项。有关实现此目的的其他方法,请参阅 GitHub awslambda-ps