AWS SAM模板的本地工作流程是什么?在zip文件中包含带有python依赖项的图层

时间:2020-07-19 16:19:41

标签: aws-lambda aws-sam-cli aws-lambda-layers

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

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

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

template.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 , 程序包succeeds and return back template yaml with layer ContentUri:s3:// / 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

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

0 个答案:

没有答案