gpt4 book ai didi

python-3.x - 为 pymysql 导入 AWS lambda 层

转载 作者:行者123 更新时间:2023-12-03 08:50:30 25 4
gpt4 key购买 nike

我需要部署一个 lambda 函数,使用 python 包 pymysql 执行一个过程,我的 python 版本是 3.6,为此,我将使用 lambda 层来避免带来我的整个代码。为了实现这一目标,我遵循以下步骤:

  • 在我的本地计算机中创建一个 python virtualenv
  • 安装 pymysql 包
  • 创建一个单独的文件夹,将安装在虚拟环境中的 pymysql 软件包移动到其中 cp -r/myvirtualenv/lib/python3.6/site-packages/pymysql ~/home/user/packagelambda/

  • 在路径~/home/user/packagelambda/中将此包压缩为zip文件,以作为AWS lambda层上传zip -r rdsconnection.zip *

  • 将此 zip 文件作为新层上传到 aws lambda 仪表板

完成上述过程后,我转到代码并创建两个脚本来模块化我的执行,第一个脚本名为 md_conenction.py ,如下所示:

import json
import boto3
import pymysql
import csv
from datetime import datetime


def json_param():
s3 = boto3.resource('s3')
bucketname= "bucket"
file= "file.json"
object= s3.Object(bucketname,file)
body = object.get()['Body'].read().decode('utf8')

param= json.loads(body)

return param["host"], param["user"], param["password"], param["database"]

def db_connection():

host,user,password,database = json_param()

dbconnection = pymysql.connect(host,user,password,database)
dbcursor = dbconnection.cursor()

return dbconnection, dbcursor

另外,lambda 函数中的第二个脚本默认称为 lambda_function.py,其内容如下:

import json
from md_connection import db_connection

def lambda_handler(event, context):

dbconnection, dbcursor = db_connection()
print(dbcursor)


return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}

最后,我选择了设计器上的图层选项,并附加了之前构建的新图层。完成此过程后,每次执行后我仍然会收到错误 Unable to import module 'lambda_function': No module named 'pymysql'

我想强调的是,我尝试以两种方式执行构建层的过程:

  1. 只包含python下载的包pymysql
  2. 包安装后包括两个文件夹pymysqlPyMySQL-0.9.3.dist-info
  3. 我在层构建时提供了 Python 3.6 和最高 Python 3.8 的运行时兼容性

最佳答案

创建目录pythonpymysql及其依赖项复制到该目录中。压缩 python 目录并将其上传到图层。 zip 内的文件夹结构很重要。根目录应该是python

关于python-3.x - 为 pymysql 导入 AWS lambda 层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59266275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com