为 pymysql 导入 AWS lambda 层
import AWS lambda layer for pymysql
我需要部署一个 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 层上传 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'
。
我想强调的是,我尝试以两种方式执行构建图层的过程:
- 只包括python
pymysql
下载的包
- 包安装后包含两个文件夹
pymysql
和PyMySQL-0.9.3.dist-info
- 我在层构建时包括 Python 3.6 和最高 python 3.8 的运行时兼容性
创建目录python
将pymysql
及其依赖项复制到该目录中。压缩 python
目录并将其上传到图层。 zip 内的文件夹结构很重要。根目录应该是python
我需要部署一个 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 层上传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'
。
我想强调的是,我尝试以两种方式执行构建图层的过程:
- 只包括python
pymysql
下载的包
- 包安装后包含两个文件夹
pymysql
和PyMySQL-0.9.3.dist-info
- 我在层构建时包括 Python 3.6 和最高 python 3.8 的运行时兼容性
创建目录python
将pymysql
及其依赖项复制到该目录中。压缩 python
目录并将其上传到图层。 zip 内的文件夹结构很重要。根目录应该是python