こんにちは、AWS Lambda があり、それにレイヤーを追加したいと考えていました。ラムダの単一のメソッドをテストできるようにしたいと思います。ただし、それらの多くはレイヤーロジックを使用しているため、簡単ではないようです。これを行うための最良のアプローチは何ですか?
1つのアプローチは、レイヤーをパッケージ化することです。ホストはどこかにあり、それを依存関係として使用します。その場合、わざわざレイヤーを使用するのはなぜですか?
私が考えているもう 1 つのアイデアは、sam-cli を使用してラムダをローカルにデプロイすることです。ラムダロジック全体をテストするためにそれを使用する方法は知っていますが、メソッドを個別に単体テストする方法はわかりません;/あなたの経験は何ですか? 韓国語
編集。私の解決策
パイテストを追加
すべてのテストを
test
ディレクトリに配置するテストを呼び出すテスト ラムダ ハンドラを追加する
import pytest
def lambda_handler(event, _):
res = pytest.main(['-x', './tests'])
return res
- 以前に作成したラムダ ハンドラーを指す 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