Python 3.x 为pymysql导入AWS lambda层

Python 3.x 为pymysql导入AWS lambda层,python-3.x,amazon-web-services,aws-lambda,pymysql,aws-lambda-layers,Python 3.x,Amazon Web Services,Aws Lambda,Pymysql,Aws Lambda Layers,我需要部署一个lambda函数,用python包pymysql执行一个进程,我的python版本是3.6,为此,我将使用lambda层来避免带来整个代码。为了实现这一点,我必须遵循以下步骤: 在本地计算机中创建python virtualenv 安装pakcage pymysql 创建一个单独的文件夹,在其中移动安装在虚拟环境中的pymysql包cp-r/myvirtualenv/lib/python3.6/site-packages/pymysql~/home/user/packagelam

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

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

  • 在路径
    ~/home/user/packagelambda/
    中,将此软件包压缩到一个zip文件中,作为AWS lambda layer
    zip-r rdsconnection.zip*

  • 将此zipfile作为新层上载到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函数中的secon脚本默认称为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!')
    }
最后,我将在设计器上选择“我的层”选项,并附加以前构建的新层。完成此过程后,我仍然会不断收到错误
无法导入模块'lambda_function':每次执行后都没有名为'pymysql'
的模块

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

  • 只包括python下载的包
    pymysql
  • 包安装后包括两个文件夹
    pymysql
    pymysql-0.9.3.dist info
  • 我在构建层时提供了Python3.6和Python3.8的运行时兼容性

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

    ,您的意思是我必须遵循在我的层中上载的zip文件中的结构?示例:rdsconnection.zip包含结构python/pymysql?是。根文件夹应该是
    python
    ,在该文件夹下,您可以添加类似
    python/pymysql
    的库,让我试试这个sr