【发布时间】: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