Aws lambda AWS SAM模板的本地工作流是什么?这些模板在zip文件中包含具有python依赖关系的层

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

当我的SAM模板文件在本地zip文件中包含具有依赖项的层时,我在本地调用lambda时遇到问题。调用成功,但函数引发错误,指出缺少依赖项

在阅读有关AWS::Serverless::LayerVersion的文档时,它注意到如果
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