【问题标题】:import AWS lambda layer for pymysql为 pymysql 导入 AWS lambda 层
【发布时间】:2020-04-03 14:00:10
【问题描述】:

我需要部署一个 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 函数中的 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!')
    }

最后,我在设计器上的图层选项中添加了之前构建的新图层。完成此过程后,我仍然会在每次执行后继续收到错误 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 的运行时兼容性

【问题讨论】:

    标签: python-3.x amazon-web-services aws-lambda pymysql aws-lambda-layers


    【解决方案1】:

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

    【讨论】:

    • 你的意思是我必须遵循我层中上传的 zip 文件中的结构?示例:rdsconnection.zip 包含结构 python/pymysql ?
    • 是的。根文件夹应该是python,在它下面你可以添加像python/pymysql这样的库
    • 让我试试这个sr
    猜你喜欢
    • 1970-01-01
    • 2021-09-25
    • 2020-12-04
    • 2020-10-05
    • 1970-01-01
    • 2021-07-07
    • 2020-07-21
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多