我尝试在 python/lib/python3.7/site-packages/{matplotlib here} 中压缩和构建 zip 但它说无法导入 matplotlib/ init_ .py中的 ft2font
有趣的是,我的包中没有其他具有该名称的文件。我尝试在不同的操作系统上安装 pip install 和 pip3 install 但没有成功
python matplotlib amazon-web-services aws-lambda aws-lambda-layers
我正在尝试从 lambda 层导入自定义依赖项,但不起作用。
环境:nodejs8.10
我有一个由以下目录结构组成的层:
mylayer.zip-
|-nodejs-
|-util.js
Run Code Online (Sandbox Code Playgroud)
这里,util.js 有以下代码:
module.exports = function SomeFunction() {
console.log('Told you This Doesn't work');
}
Run Code Online (Sandbox Code Playgroud)
在 myLambda.js 中,我尝试SomeFunction使用以下代码进行调用:
const someFunction = require('/opt/nodejs/util')
exports.handler = async (event) => {
someFunction();
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!'),
};
return response;
};
Run Code Online (Sandbox Code Playgroud)
但是,我收到此错误:
{
"errorMessage": "Cannot find module '/opt/nodejs/util'",
"errorType": "Error",
"stackTrace": [
"Function.Module._load (module.js:474:25)",
"Module.require (module.js:596:17)",
"require (internal/module.js:11:18)",
"Object.<anonymous> (/var/task/index.js:1:75)",
"Module._compile (module.js:652:30)",
"Object.Module._extensions..js (module.js:663:10)",
"Module.load (module.js:565:32)",
"tryModuleLoad (module.js:505:12)",
"Function.Module._load (module.js:497:3)" …Run Code Online (Sandbox Code Playgroud) amazon-web-services node.js ecmascript-6 aws-lambda aws-lambda-layers
我正在尝试使用 AWS CLI 实现一些自动化,
其中我能够使用 cli 命令更新我的 AWS Lambda 函数 -
aws lambda update-function-code --function-name --zip-file
Run Code Online (Sandbox Code Playgroud)
并使用命令向图层添加一个版本 -
aws lambda publish-layer-version --layer-name wor --compatible-runtimes nodejs8.10 --zip-file
Run Code Online (Sandbox Code Playgroud)
我想要实现的是,将特定层的最新版本链接到函数,
例如 -
aws lambda get-layer-version --layer-name some_name_here --version-number $LATEST
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?
我想从这个GitHub 存储库下载公共 arn 以获得更紧凑的 spacy版本。
"arn:aws:lambda:us-west-2:113088814899:layer:Klayers-python37-spacy:27"
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我有一个名为 的模块custom_module.py,其中包含我想在几个不同的 Lambda 中使用的函数和方法。代码如下所示:
def test():
return 'Custom module'
Run Code Online (Sandbox Code Playgroud)
我尝试通过压缩该文件并使用表单创建一个层来将其转换为 Lambda 层。一切似乎都运行良好,我将模块导入到 Lambda 中使用,如下所示:
import json
from custom_module import test
print('Loading function')
def lambda_handler(event, context):
return test()
Run Code Online (Sandbox Code Playgroud)
不幸的是,运行它会返回一个"Unable to import module 'lambda_function': No module named 'custom_module'"错误。我到底做错了什么?我还指定了正确的运行时和架构。
编辑
根据评论,我尝试了这个文件结构:
layer
|
+--- python
|
+--- custom_module
|
+--- __init__.py (contains the test() method)
Run Code Online (Sandbox Code Playgroud)
layer我将文件夹压缩layer.zip并上传。不幸的是仍然遇到同样的问题。
AWS Lambda 运行时:Python 3.7
连接到我的 Lambda 的 Lambda 层在解压缩时的容量接近 200MB。
我想知道这个大容量的Lambda Layer会不会影响Lambda机器的正常运行或冷启动。
我的目标是使用存储 python 依赖项的 python 3.7 运行时为 aws lambda 函数上传一个小层,但我似乎无法让它识别模块。
我创建了一个Makefile来生成 zip 文件
create-lambda-layer:
docker run -dit --name AL amazonlinux:latest
docker cp requirements.in AL:/root/requirements.in
docker exec -it AL bash -c "yum update -y \
&& yum install -y python3.7 zip \
&& python3 -m pip install --upgrade pip \
&& pip install wheel \
&& mkdir -p /root/lambda/ \
&& pip install -r /root/requirements.in -t /root/lambda/ \
&& cd /root/lambda/ \
&& zip -r python.zip ."
docker cp AL:/root/lambda/python.zip …Run Code Online (Sandbox Code Playgroud) 我有引用一个层的 lambda,该层由其他人维护,当发布新版本时,我必须更新我的 terraform 代码以将最新版本放入 arn(此处为 19)。
有没有办法在 terraform 脚本中获取最新版本并使用它?
module "lambda_function" {
source = "terraform-aws-modules/lambda/aws"
function_name = "my-lambda1"
description = "My awesome lambda function"
handler = "index.lambda_handler"
runtime = "python3.8"
source_path = "../src/lambda-function1"
tags = {
Name = "my-lambda1"
}
layers = [
"arn:aws:lambda:eu-central-1:587522145896:layer:my-layer-name:19"
]
}
Run Code Online (Sandbox Code Playgroud)
谢谢。
ps:这意味着该图层的 terraform 脚本不在我的脚本中,它是我无权访问的其他脚本。
我正在尝试创建一个新的 lambda 层以使用 psycopg2 导入 zip 文件,因为该库使我的部署包超过 3MB,而且我再也看不到 lambda 函数中的内联代码。
我使用 Python 3.7 为以下两种情况创建了 lambda 层:
我将他们新创建的层添加到我的 lambda 函数中。但是,在这两种情况下,我的 lambda_function 都会抛出如下错误:{ "errorMessage": "Unable to import module 'lambda_function': No module named 'psycopg2'", "errorType": "Runtime.ImportModuleError" }
该错误似乎是我的 zip 文件出了问题,无法识别。但是当它在我的部署包中运行良好时。
任何帮助或理由都会非常有用。谢谢!
aws-lambda ×9
python ×3
ecmascript-6 ×1
matplotlib ×1
node.js ×1
psycopg2 ×1
python-3.7 ×1
terraform ×1