Aws lambda AWS SAM模板的本地工作流是什么?这些模板在zip文件中包含具有python依赖关系的层
当我的SAM模板文件在本地zip文件中包含具有依赖项的层时,我在本地调用lambda时遇到问题。调用成功,但函数引发错误,指出缺少依赖项 在阅读有关AWS::Serverless::LayerVersion的文档时,它注意到如果Aws lambda AWS SAM模板的本地工作流是什么?这些模板在zip文件中包含具有python依赖关系的层,aws-lambda,aws-sam-cli,aws-lambda-layers,Aws Lambda,Aws Sam Cli,Aws Lambda Layers,当我的SAM模板文件在本地zip文件中包含具有依赖项的层时,我在本地调用lambda时遇到问题。调用成功,但函数引发错误,指出缺少依赖项 在阅读有关AWS::Serverless::LayerVersion的文档时,它注意到如果ContentUri是本地zip文件,我应该首先运行sam包。这将正确变换图层。我应该在sam构建之前运行sam包,还是相反? 这似乎有点奇怪,因为sam包需要一个S3 bucket,这会破坏本地构建/调用工作流 以下是我正在运行的步骤(和模板文件) 模板yaml AWS
ContentUri
是本地zip文件,我应该首先运行sam包
。这将正确变换图层。我应该在sam构建
之前运行sam包
,还是相反?
这似乎有点奇怪,因为sam包
需要一个S3 bucket,这会破坏本地构建/调用工作流
以下是我正在运行的步骤(和模板文件)
模板yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
Simple SAM Template
Globals:
Function:
Timeout: 10
Resources:
SimpleLambda:
Type: AWS::Serverless::Function
Properties:
Handler: simple_app.simple_test
Runtime: python3.7
CodeUri: .
Layers:
- !Ref DepsLibs
DepsLibs:
Type: AWS::Serverless::LayerVersion
Properties:
LayerName: DepsLibsPackage
ContentUri: ./layers/deps.zip
CompatibleRuntimes:
- python3.7
simple_app.py(my_service
包压缩在/layers/deps.zip
)
运行以下命令时无法执行我的函数:
sam build--template sam\u template.yaml--use container
sam local invoke SimpleLambda--template sam\u template.yaml--skip pull image
错误:[Error]Runtime.ImportModuleError:无法导入模块“简单应用”:没有名为“我的服务”的模块。
-->依赖项不存在sam包--s3 bucket--template sam_template.yaml(或者在sam build之前),则package成功并返回带有层的模板yaml
ContentUri:s3://28d65cb9855cad7b8b41de3558c17baa`
我尝试将模板中的ContentUri:./layers/deps.zip
替换为ContentUri:s3:///28d65cb9855cad7b8b41de3558c17baa
,但这样会打印一条消息:Lambda函数“DepsLibs”为CodeUri指定了不受支持的s3位置。改为使用默认值“.”
具有上述图层的模板的本地工作流是什么
import json
import logging
from my_service.client.my_service_client import MyServiceClient
def simple_test(event, context):
try:
MyServiceClient.create_plan(request=None)
except Exception as err:
logging.getLogger().info('Something happened: {err}'.format(err=err))
response = {
"statusCode": 200 ,
"body": json.dumps(event)
}
return response