我是 lambda 和 SAM 的新手 - 所以如果我搞砸了任何简单的事情,请不要大喊:D。
总结:我无法sam build构建 中指定的层template.yaml,它只构建 lambda 函数。
背景:我正在尝试在 python3.7 中构建一个使用 skimage ( scikit-image) 模块的 lambda 函数。为此,我正在尝试使用 SAM 来构建和部署这一切。 ...这是有效的
我正在尝试将 scikit-image 模块部署为一个层(并且还使用 SAM 构建),而不是将其包含在 lambda 函数方向中 ......这不起作用
首先,我只是扩展了标准的 SAMHello World应用程序。
我通过简单地将 skimage 添加到requirements.txt,然后使用sam build -u,然后从构建的包目录中手动删除 numpy/scipy 依赖项(我已经包含了 AWS scipy/numpy 层)来使 skimage 工作。
(我在标准的 hello world 应用程序中添加了 import numpy、scipy.ndimage 和 skimage.draw,并为每个应用程序包含了一些测试函数调用)
要求.txt:
requests
scikit-image
Run Code Online (Sandbox Code Playgroud)
之后,一切正常(在本地和/或 AWS 上运行)。
但是,我现在想将 skimage 模块移出我的应用程序并移到一个新的自定义层中(我想将 skimage 放在一个层中以重新用于一些功能)
为了进行设置,我创建了一个依赖项目录并将 …
我想要提高 Lambda 开发效率。我期望的最终状态是将我的开发过程分为 2 个不同的构建:
我很高兴利用serverless framework与 Lambda 的集成,但我仍然无法弄清楚如何获取 gradle 而不是构建 FatJar,从而拥有一个包含所有依赖项的文件夹/jar,以及我的应用程序代码之一。
我在这里尝试过这个教程,它的功能如下:
task buildZip(type: Zip) {
baseName = "aws-java-github-webhook-gitstats"
from compileJava
from processResources
// into('lib') {
// from configurations.runtime
// }
}
task buildLayer(type: Copy) {
into "$buildDir/layer/java/lib"
from configurations.runtime
}
Run Code Online (Sandbox Code Playgroud)
但我认为该spring-dependency插件搞乱了这种方法(我正在使用spring-boot)。有谁有一个很好的配置设置来做到这一点,我可以利用吗?
我\xe2\x80\x99m 使用 aws amplify,并使用 lambda 层和打字稿。\n因为我的项目很大,所以我简化了文件夹结构来解释我的问题
\n\n在根级别上,我有 amplify 文件夹,其中包含每个 lambda 函数和每个 lambda 层的文件夹内部。
\n同样在根级别,我引入了一个“amplifyTypescript”文件夹,其中还包含每个 lambda 的文件夹和每个 lamda 层的打字稿源。
\ntsconfig.json 看起来像这样。
\n{\n"compilerOptions": {\n "module": "commonjs",\n "target": "es6",\n "outDir": "../../amplify/backend/function/lambdaFunction1",\n "rootDir": ".",\n "sourceMap": true,\n "strict": false,\n "experimentalDecorators": true,\n "baseUrl": ".",\n "resolveJsonModule": true,\n "paths": {\n "/opt/lambdaLayer/database/index": ["../lambdaLayer/database/index"]\n }\n},\n"exclude": [\n "../lambdaLayer/",\n "lambdaLayer/database/index.ts",\n "**/lambdaLayer**",\n "../lambdaLayer/database/index",\n "/opt/lambdaLayer/database/index"\n]\nRun Code Online (Sandbox Code Playgroud)\n}
\n在 lambdaFunction1 中,我有以下导入语句。\nimport { fConnect } from \'/opt/lambdaLayer/database/index\';
\n首先出现的问题是,路径 /opt/... 显然在我的笔记本电脑上不存在。\n因此我在 tsconfig 中引入了路径映射(见上文)。
\n然后我收到错误,../lambdaLayer/database/index 位于 lambdaFunction1 的“rootDir”之外。\n这是正确的,但它是 lambdaLayer。最后我想在转译过程中忽略这一点......
\n …我正在尝试在 AWS lambda 中创建一个 simple-salesforce (Python 库)层,并尝试从我的 python 代码中使用它(导入它)。我有 Windows 机器。
尽管我读到编译窗口可能会出现问题,所以我从 Windows 商店安装了 ubuntu1804,然后继续为 lambda 层创建 zip。(zip是为python文件夹创建的,结构为“python/lib/python3.6/site-packages/......”)
我正在使用Python 3.6。我针对这个问题浏览了几篇文章,但可以找到任何解决方案。该视频帮助我成功地在 AWS 中为 Pandas 和请求创建了一个层,并对我使用的 pip 命令进行了细微调整
sudo python3 -m pip install simple-salesforce -t build/python/lib/python3.6/site-packages
Run Code Online (Sandbox Code Playgroud)
我在 Simple salesforce 中使用的流程完全相同,但出现以下错误:
无法导入模块“lambda_function”:/lib64/libc.so.6:找不到版本“GLIBC_2.18”(/opt/python/lib/python3.6/site-packages/cryptography/hazmat/bindings/_rust 需要.abi3.so)
编辑:--我尝试使用 .whl 的另一种方法,虽然这没有给出上述错误,但给出错误为“找不到请求模块”,当我添加请求模块层时,它给出错误 authlib not found。(如果我评论 salesforce 相关的内容,请求层工作正常。甚至尝试上传为简单层,我遇到了相同的 authlib 问题)
编辑:我使用的 Lambda 代码如下
the code I am using is basic code which doesnt have any logic with empty imports
import json
import pandas as pd
import requests as …Run Code Online (Sandbox Code Playgroud) 作为 AWS CodeBuild 操作中 AWS CodePipeline 的一部分,我将使用无服务器框架创建的资源部署到“UAT”(用户验收测试)阶段。该管道在其自己的工具AWS帐户中运行,首先将跨帐户部署到单独的“UAT”帐户中,然后将跨帐户部署到单独的“生产”帐户中。
首次部署到“UAT”成功完成,而后续部署到“生产”失败并出现错误...
Serverless Error ----------------------------------------
An error occurred: <some name>LambdaFunction - Resource handler returned message: "Code uncompressed size is greater than max allowed size of 272629760. (Service: Lambda, Status Code: 400, Request ID: <some request id>, Extended Request ID: null)" (RequestToken: <some request token>, HandlerErrorCode: InvalidRequest).
Get Support --------------------------------------------
Docs: docs.serverless.com
Bugs: github.com/serverless/serverless/issues
Issues: forum.serverless.com
Your Environment Information ---------------------------
Operating System: linux
Node Version: 14.17.2
Framework Version: 2.68.0 (local)
Plugin Version: 5.5.1
SDK Version: …Run Code Online (Sandbox Code Playgroud) aws-cloudformation aws-lambda aws-codepipeline serverless-framework aws-lambda-layers
我有一个 monorepo,在自己的文件夹中包含一些函数。我想创建一个具有实用功能的公共层,我可以require/import在本地使用它,也可以在部署到云后使用它。我想添加一个layers/目录来执行此操作,文件夹结构如下所示:
A
|- node_modules/
|- package.json
|- index.js
B
|- node_modules/
|- package.json
|- index.js
layers
|- nodejs
|- node_modules
|- package.json
|- util.js
Run Code Online (Sandbox Code Playgroud)
我没有设置上面的文件夹结构,并且可以接受它的更改。
目前,我只有A和 以及B它们自己的独立依赖层(使用 编排terraform),并且它们在本地工作和部署都很好。
引入通用实用程序层后,问题是我可以在本地要求/导入,但在云中就不一样了(/opt/nodejs/*),但如果我将其更改为在云上工作,它将无法工作本地。
我没有使用该serverless框架。
我有一个问题,我的 Lambda 函数找不到模块rpds。我试图通过一个层导入它,它带有jsonschema。
Jsonschema 可以导入并且可以工作,但 rpds 不行。我按照我应该的方式遵循了我的层中的文件夹结构,但它似乎从未读取的唯一模块是 rpds
{
"errorMessage": "Unable to import module 'lambda_function': No module named 'rpds.rpds'",
"errorType": "Runtime.ImportModuleError",
"requestId": "440ad04f-6a04-4650-a4d5-44f06b65e2dc",
"stackTrace": []
}
Run Code Online (Sandbox Code Playgroud)
我尝试了两件事。我尝试使用 zip 将整个项目导入到 lambda 中,并尝试导入一个层。我发现该层在识别 jsonschema 但不能识别rpds.
因此,我为脚本创建了一个 lambda 函数,该函数本质上允许用户将查询传递给 Amazon bedrock 上的 amazon titan LLM。这是我的部署包中 main.py 文件的内容。
from langchain.llms.bedrock import Bedrock
import boto3
from langchain.retrievers import AmazonKendraRetriever
from langchain.chains import RetrievalQA
from langchain.prompts import PromptTemplate
import json
from botocore.exceptions import ClientError
def get_secret():
secret_name = "kendraRagApp"
# Create a Secrets Manager client
session = boto3.session.Session()
client = session.client(
service_name='secretsmanager',
)
try:
get_secret_value_response = client.get_secret_value(
SecretId=secret_name
)
except ClientError as e:
raise e
# Decrypts secret using the associated KMS key.
secret = get_secret_value_response['SecretString']
return secret
def …Run Code Online (Sandbox Code Playgroud) amazon-ec2 aws-lambda aws-lambda-layers aws-iam-authenticator aws-iam-policy
我正在尝试在AWS CloudFormation中创建AWS Lambda层,但发生错误:
层转换失败:某些目录没有执行权限;(服务:AWSLambdaInternal;状态代码:400;错误代码:InvalidParameterValueException;请求ID:eff63297-bf71-4578-a665-c493a9fbdb40)
CloudFormation模板中的Lambda层定义:
LambdaLayerTest:
Type: 'AWS::Lambda::LayerVersion'
Properties:
CompatibleRuntimes:
- nodejs8.10
Content:
S3Bucket: cf-us-west-2-test
S3Key: LambdaLayerTest.zip
Description: Lambda Layer Test
LayerName: lambdalayertest
Run Code Online (Sandbox Code Playgroud)
LambdaLayerTest.zip是一个名为“ nodejs”的文件夹,其中包含node_modules文件夹,package.json文件和yarn.lock文件。
package.json:
{
"name": "mylayertest",
"version": "1.0.0",
"main": "index.js",
"license": "ISC",
"dependencies": {
"aws-sdk": "2.307.0"
}
Run Code Online (Sandbox Code Playgroud) 我的无服务器应用程序中有多个功能。其中两个用于 REST 端点,一个是 SQS 处理程序。他们都使用相同的库。因此,我想将它们移至 Lambda Layer 并跨函数共享以减小大小。
我正在使用 Serverless Framework 2.46、TypeScript 4.3 和 NodeJS 14。我有以下项目结构:
/
- layers/
- nodejs/
- node_modules/
- package.json
- src/
- handlers/ - here are my handlers
- etc...
Run Code Online (Sandbox Code Playgroud)
我已将 TypeScript 配置为从图层文件夹导入库,如下所示import middy from '/opt/nodejs/@middy/core';。这是我的 tsconfig
{
"compilerOptions": {
"preserveConstEnums": true,
"strictNullChecks": true,
"sourceMap": true,
"allowJs": false,
"target": "ES2020",
"module": "CommonJS",
"outDir": ".build",
"moduleResolution": "node",
"esModuleInterop": true,
"resolveJsonModule": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"lib": [
"ES6",
"ES2019",
"ES2020"
],
"baseUrl": ".", …Run Code Online (Sandbox Code Playgroud) node.js typescript aws-lambda serverless-framework aws-lambda-layers
aws-lambda ×8
typescript ×2
amazon-ec2 ×1
aws-amplify ×1
gradle ×1
node.js ×1
python ×1
python-3.6 ×1
serverless ×1
spring-boot ×1