😸
AWSLambdaPowertoolsを使ってバリデーションしてみる
LambdaにAWSLambdaPowertoolsを追加する
Lambdaにレイヤーを追加する。
AWSレイヤーのAWSLambdaPowertoolsPythonV2を設定する。
バリデーションコードを書く
Powertoolsをimportする
from aws_lambda_powertools.utilities.validation import validate
from aws_lambda_powertools.utilities.validation.exceptions import SchemaValidationError
バリデーションをスキーマで定義する
BODY_SCHEMA = {
"required": ["name", "id", "data"],
"properties": {
"name": {
"type": "string",
"minLength": 5,
"maxLength": 10,
},
"id": {
"type": "integer",
"minLength": 1
},
"data": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"properties": {
"version": {"type": "integer"},
"model": {"type": "string"}
}
}
}
},
}
処理部分
def lambda_handler(event, context):
try:
validate(event=event, schema=BODY_SCHEMA)
return "success"
except SchemaValidationError as e:
return str(e)
テストイベントからLambdaを実行する
・正常
パラメータ
{
"name": "test01",
"id": 1,
"data": [{"version": 1, "model": "A001"}]
}
結果
success
・文字数エラー
パラメータ
{
"name": "test",
"id": 1,
"data": [{"version": 1, "model": "A001"}]
}
結果
"Failed schema validation. Error: data.name must be longer than or equal to 5 characters, Path: ['data', 'name'], Data: test"
・型エラー
パラメータ
{
"name": 123456,
"id": 1,
"data": [{"version": 1, "model": "A001"}]
}
結果
"Failed schema validation. Error: data.name must be string, Path: ['data', 'name'], Data: 123456"
・必須エラー
パラメータ
{
"id": 1,
"data": [{"version": 1, "model": "A001"}]
}
結果
"Failed schema validation. Error: data must contain ['name', 'id', 'data'] properties, Path: ['data'], Data: {'id': 1, 'data': [{'version': 1, 'model': 'A001'}]}"
・配列エラー
パラメータ
{
"name": "test01",
"id": 1,
"data": []
}
結果
"Failed schema validation. Error: data.data must contain at least 1 items, Path: ['data', 'data'], Data: []"
感想
色々なライブラリをlayerに追加して使ってみるのも楽しそうだなと思った。
バリデーションツールもたくさんあるので、試していきたい。
Discussion