1

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

在阅读有关 的文档时AWS::Serverless::LayerVersion,它指出如果ContentUri是本地 zip 文件,我应该首先运行sam package. 这将正确地转换图层。我应该在sam package之前运行sam build,还是改为运行?这似乎很奇怪,因为sam package需要一个 S3 存储桶,这会破坏本地构建/调用工作流程

这是我正在运行的步骤(和模板文件)

模板.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

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

运行以下命令时无法执行我的功能:

  1. sam build --template sam_template.yaml --use-container
  2. sam local invoke SimpleLambda --template sam_template.yaml --skip-pull-image 错误:[ERROR] Runtime.ImportModuleError: Unable to import module 'simple_app': No module named 'my_service'--> 依赖项不存在

如果我运行sam package --s3-bucket <my_bucket_name> --template sam_template.yaml instead (or before sam build , package succeeds and return back template yaml with layerContentUri: s3://<my_bucket_name>/28d65cb9855cad7b8b41de3558c17baa`

我尝试ContentUri: ./layers/deps.zip在我的模板中替换为ContentUri: s3://<my_bucket_name>/28d65cb9855cad7b8b41de3558c17baa,但会打印出如下消息:Lambda function 'DepsLibs' has specified S3 location for CodeUri which is unsupported. Using default value of '.' instead

具有上述图层的模板的本地工作流程是什么?

4

0 回答 0