嗨,我有我的 AWS Lambda,我想给它添加一个层。我希望能够只测试 lambda 的单一方法。然而,他们中的许多人使用层逻辑,因此在我看来并不容易。这样做的最佳方法是什么?
一种方法是打包层,主机在某处并将其用作依赖项。在那种情况下,为什么还要费心使用图层?
我的另一个想法是使用 sam-cli 在本地部署 lambda。我知道如何使用它来测试整个 lambda 逻辑,但我看不到如何单独对方法进行单元测试;/你有什么经验?韩国
编辑。我的解决方案
添加 pytest
将所有测试放在
test
目录中添加调用测试的测试 lambda 处理程序
import pytest
def lambda_handler(event, _):
res = pytest.main(['-x', './tests'])
return res
- 添加指向先前创建的 lambda 处理程序的 template.yml
Resources:
MyFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: src/
Handler: test.lambda_handler
Runtime: python3.6
Events:
MyInfo:
Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
Properties:
Path: /my-service/test
Method: get
Environment:
Variables:
ELASTICSEARCH_DOC_TYPE: "article"
ELASTICSEARCH_INDEX: "artilces"
ELASTICSEARCH_HOST: "elastic"
ELASTICSEARCH_PORT: "9200"
ELASTICSEARCH_URL: "http://my_elastic.com:9200"
Layers:
- arn:aws:lambda:eu-west-1:XXXXXXXXXXXXX:layer:lambda_layer:37
- 跑
sam local invoke --no-event