我想在我的AWS Lambda中导入jsonschema库,以执行请求验证。我希望通过Lambda Layers来实现,而不是将依赖项与我的应用程序捆绑在一起。我压缩了所有依赖项venv/lib/python3.6/site-packages/。我将其作为lambda层上传,publish-layer-version并aws lambda update-function-configuration分别使用和命令将其添加到aws lambda中。zip文件夹的名称为“ lambda-dep.zip”,所有文件都在其下面。但是,当我尝试在lambda_function中导入jsonschema时,看到以下错误-
from jsonschema import validate
Run Code Online (Sandbox Code Playgroud)
{
"errorMessage": "Unable to import module 'lambda_api': No module named 'jsonschema'",
"errorType": "Runtime.ImportModuleError"
}```
Am I missing any steps are is there a different mechanism to import anything within lambda layers?
Run Code Online (Sandbox Code Playgroud) python amazon-web-services python-3.x aws-lambda aws-lambda-layers
我使用以下命令创建了一个 AWS Lambda 层:
aws lambda publish-layer-version --layer-name TensorflowLambdaLayer --compatible-runtimes go1.x --zip-file fileb://tensorflowLayer.zip
Run Code Online (Sandbox Code Playgroud)
这是生成的 ARN:`arn:aws:lambda:us-east-1:757767972066:layer:TensorflowLambdaLayer:1
当我尝试通过 AWS SAM运行使用Tesnroflow库的Lambda 函数时,它卡在“挂载”步骤中:
2019-07-18 15:51:29 Mounting /tmp/tmpgz8cb80s as /var/task:ro,delegated inside runtime container
Run Code Online (Sandbox Code Playgroud)
一旦我终止它,Ctrl + C我会收到以下消息:
^C/var/task/bin/inference: error while loading shared libraries: libtensorflow.so: cannot open shared object file: No such file or directory
Makefile:82: recipe for target 'run-inference' failed
Run Code Online (Sandbox Code Playgroud)
这是我的template.yml 的关键部分:
Parameters:
LambdaTensorflowLayerArn:
Type: String
Default: 'arn:aws:lambda:us-east-1:757767972066:layer:TensorflowLambdaLayer:1'
LambdaFFMPEGLayerArn:
Type: String
Default: 'arn:aws:lambda:us-east-1:757767972066:layer:ffmpeg:1'
Inference:
Type: 'AWS::Serverless::Function'
Properties:
Handler: bin/inference
Runtime: …Run Code Online (Sandbox Code Playgroud) 我们在 Node.js (v10.x) 中有几个 AWS Lambdas,其中一些有一些“特定的大”依赖项,这些依赖项并未在所有这些依赖项之间共享。例如,我们有一个依赖firebase-adminNPM 包的“Authorizer”函数,这是唯一使用它的 Lambda。
为了简化维护,目前我们有一个包含所有依赖项的层。将依赖项拆分为多个层有什么好处吗?我的假设是更大的层会增加“冷启动”时间。但是,与层的大小相关的惩罚有多大?我在 AWS 文档中找不到关于此的任何参考。
类似的问题,但跨越不同的语言。如果我们的 Lambda 使用多种语言(例如 Node 和 Python),我是否可以有一个包含两种语言依赖项的 Lambda 层?我想这是一个更简单的选择,因为 Python 依赖项实际上永远不会被 Node.js 代码使用。但是,我想阅读一些 AWS 推荐的管理层的最佳实践。
我想使用pysftp库(Python 脚本)将文件上传到 EC2 实例。所以我创建了小的 Python 脚本,它使用下面的行来连接
pysftp.Connection(
host=Constants.MY_HOST_NAME,
username=Constants.MY_EC2_INSTANCE_USERNAME,
private_key="./mypemfilelocation.pem",
)
some code here .....
pysftp.put(file_to_be_upload, ec2_remote_file_path)
Run Code Online (Sandbox Code Playgroud)
此脚本将使用 .pem 文件将文件从我的本地 Windows 机器上传到 EC2 实例,并且它可以正常工作。
现在我想使用具有 API 网关功能的AWS lambda来执行此操作。
所以我已将 Python 脚本上传到 AWS lambda。现在我不确定如何在 AWS lambda 中使用 pysftp 库,所以我找到了在 AWS lambda 层中添加 pysftp 库层的解决方案。我做到了
pip3 安装 pysftp -t ./library_folder
我制作了上述文件夹的 zip 并添加到 AWS lambda 层中。
但是我仍然有很多错误,比如一个一个:-
没有名为“pysftp”的模块
没有名为“paramiko”的模块
未定义符号:PyInt_FromLong
无法从部分初始化的模块 'bcrypt' 导入名称 '_bcrypt'(很可能是由于循环导入)
找不到 cffi 模块
我只是淡出上述错误我没有找到合适的解决方案。如何在我的 AWS lambda 中无缝使用 pysftp 库?
python amazon-web-services pysftp aws-lambda aws-lambda-layers
我有一个 pip 包的需求文件。我将其安装在目标文件夹中并压缩内容并将其上传到 AWS lambda 层。
要求.txt
asgiref==3.2.3
certifi==2019.11.28
chardet==3.0.4
cloudevents==0.2.4
decorator==4.4.1
Django==3.0
idna==2.8
jaeger-client==4.2.0
jsonpath-ng==1.4.3
pbr==5.4.4
ply==3.11
pytz==2019.3
requests==2.22.0
six==1.13.0
sqlparse==0.3.0
urllib3==1.25.7
aws-xray-sdk
mysql-connector-python
gunicorn
Run Code Online (Sandbox Code Playgroud)
我使用的命令pip3 install -r requirements.txt -t python/其中 python 是目标目录。该图显示了 python 目录的内容。

之后,我压缩了该目录的内容并将其作为 aws lambda 上的层发布。我创建了一个虚拟 lambda 函数来检查该层是否正常工作。
import json
import django
def lambda_handler(event, context):
# TODO implement
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
Run Code Online (Sandbox Code Playgroud)
日志文件错误:
Response:
{
"errorMessage": "Unable to import module 'lambda_function'"
}
Request ID:
"66ce85e0-59f0-4e5c-98f9-6fa3e3eb17d0"
Function Logs:
START RequestId: …Run Code Online (Sandbox Code Playgroud) python django amazon-web-services aws-lambda aws-lambda-layers
我正在尝试创建一个利用 ImageMagick 将 PDF 转换为图像的 lambda。
为此,我可以上传 ImageMagick 的二进制文件。
这种方法失败了,因为 IM 似乎依赖于一些共享库。
有没有办法将 ImageMagick 作为一个层安装或将其与其依赖项一起打包?
或者也许一种不同的解决方案才是正确的。
现在,我已经验证我可以上传二进制文件作为 Lambda 包的一部分并调用它们。
我只是想在我的 Python 3.8 Lambda 中使用 PIL。
我正在尝试以下步骤:
cd /mydir
git clone https://github.com/hidekuma/lambda-layers-for-python-runtime.git
cd lambda-layers-for-python-runtime
mkdir dist
docker-compose up --build
Run Code Online (Sandbox Code Playgroud)
aws lambda publish-layer-version --layer-name ImageStorageDependencies
--description "A Python 3.8 runtime with PIL and boto3 installed." --license-info "MIT" --zip-file fileb://output.zip --compatible-runtimes python3.7 python3.8 --region us-east-2
Run Code Online (Sandbox Code Playgroud)
然后我在 Lamda 配置中选择我的层,但是当我运行此代码时:
import json
import boto3
import io
from PIL import Image
def lambda_handler(event, context):
#etc
Run Code Online (Sandbox Code Playgroud)
...我收到错误:
[ERROR] Runtime.ImportModuleError: Unable to import module 'lambda_function': cannot import name …Run Code Online (Sandbox Code Playgroud) 我的 AWS Lambda 层有一个类似这样的目录结构。
main > nodejs > node_modules
Run Code Online (Sandbox Code Playgroud)
我有一个test.js文件要在上传到 AWS 之前测试功能。是否可以将我的test.js文件放在Main文件夹而不是nodejs文件夹中,并且仍然让它拾取nodejs文件夹中的模块?
我这么问是因为您压缩了nodejs要上传到 AWS Lambda 层的文件夹,但我不想将我的test.js文件包含在存档中。
更新:下面的答案帮助我找到了解决方案。您只需在 require 中输入模块的完整路径即可。
require('./nodejs/node_modules/my_module');
Run Code Online (Sandbox Code Playgroud) 我正在使用无服务器框架以及 lambda 层和几个 lambdas 函数。我必须包含 aws-sdk 才能支持某些功能。
aws-sdk 的 lambda 层大小为 80MB,而 aws-sdk 单独占用 40MB。
我所知道的是 Lambda 函数默认包含 aws-sdk。但这是否也意味着 lambda 层?
笔记
amazon-web-services aws-lambda serverless-framework aws-lambda-layers
我需要部署一个 lambda 函数,使用 python 包 pymysql 执行一个过程,我的 python 版本是 3.6,为此,我将使用 lambda 层来避免带来我的整个代码。为了实现这一目标,我遵循以下步骤:
创建一个单独的文件夹,将安装在虚拟环境中的 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 …Run Code Online (Sandbox Code Playgroud) amazon-web-services python-3.x pymysql aws-lambda aws-lambda-layers
aws-lambda ×9
python ×4
python-3.x ×2
binary ×1
django ×1
go ×1
javascript ×1
node.js ×1
pymysql ×1
pysftp ×1