【问题标题】:AWS SAM v1.51.0 not pulling Layers when building and running locallyAWS SAM v1.51.0 在本地构建和运行时不拉层
【发布时间】:2022-06-10 23:23:07
【问题描述】:

我有一个 SAM 模板,其中包含一个已存在的层的功能。但是,sam local start-api 命令并没有像documentation 中描述的那样下载和缓存层包。

在本例中,该层只有一个 requiremnet - aws-xray-sdk==2.4.3。但是,从生成的 .aws-sam 目录中可以看出,该层并未下载和缓存。

.aws-sam
|  build.toml
└─ build
    |  template.yaml
    └─ HealthFunction
       └─ app.py

在本地运行 API 并向 /health 函数发出请求表明模块导致错误。

foo@bar:~$ sam build
foo@bar:~$ sam local start-api
foo@bar:~$ curl http://127.0.0.1:3000/health
{"message":"Internal server error"}

日志显示发生错误是因为无法导入aws-xray-sdk

无法导入模块“app”:没有名为“aws_xray_sdk”的模块

所有这一切意味着我可以测试的唯一方法是部署到 AWS,这是不可取的,因为每次更改后都需要几分钟。

我希望这不是 SAM 的预期行为,并且我可以做一些事情。

SAM 模板

AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31

Globals:
  Function:
    Runtime: python3.8
    Handler: app.lambda_handler
    Timeout: 30

Resources:
  HealthFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: function/.
      Events:
        HealthEvent:
          Type: Api
          Properties:
            Path: /health
            Method: get
      Layers:
        - !Sub
          - arn:aws:lambda:us-east-1:402307313821:layer:xray-layer:9
      Tracing: Active

Lambda 函数

我实际上这个健康功能不仅仅是返回“OK”,但这个例子表明作为所需层的一部分的模块没有被拉出。

from aws_xray_sdk.core import patch

patch(['boto3'])

def lambda_handler(event, context):
    return {
        'statusCode': 200,
        'body': 'OK'
    }

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-lambda-layers


    【解决方案1】:

    您的模板似乎是正确的,除了图层部分应该采用这种格式,如here 中的示例:

    Resources:
      HealthFunction:
        Type: AWS::Serverless::Function
        Properties:
          CodeUri: function/.
          Events:
            HealthEvent:
              Type: Api
              Properties:
                Path: /health
                Method: get
          Layers:
            - arn:aws:lambda:us-east-1:402307313821:layer:xray-layer:9
          Tracing: Active
    

    您是否在 AWS 控制台 CloudFormation 中收到任何错误?这应该会给你更多关于你所缺少的细节。

    【讨论】:

      猜你喜欢
      • 2020-10-28
      • 1970-01-01
      • 2019-04-18
      • 2020-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-20
      相关资源
      最近更新 更多