【AWS CDK】API Gatewayのリクエスト検証を実装する
AWS CDKにハマっているこの頃です。何もかもコードで管理できるのって本当に最高ですね。
この記事では、API Gatewayのリクエスト検証をAWS CDKで実装する方法を紹介します。
リクエスト検証とは?
API Gatewayにはリクエスト内容を検証する機能があります。例えば、必要なパラメータが足りないといった場合にAPI Gatewayでチェックしてエラーを返すことができます。これの何が良いかというと、API Gatewayの時点でエラーが返るので、不要なLambda呼び出しを防ぐことができます。
マネジメントコンソールでも設定することができますが、今回はこれをAWS CDKで実装していきます。
検証の実装
testFunctionというLambda関数と、testApiというAPI Gatewayを作成しているとします。
検証機能のコードは以下の通りです。
const postModel = new apigw.Model(this, 'post-validator', {
restApi: testApi,
contentType: 'application/json',
description: 'To validate the request body',
schema:{
type:JsonSchemaType.OBJECT,
required:[
'title'
]
}
})
const apiRoot = testApi.root.addResource('test');
apiRoot.addMethod('POST', new apigw.LambdaIntegration(testFunction), {
requestValidator: new apigw.RequestValidator(this, 'body-validator', {
restApi:api,
validateRequestBody:true,
}),
requestModels:{
'application/json': postModel,
},
});
いくつかポイントがあります。
ポイント1:検証モデルを作る
上記コードではpostModelという名前で、どういった検証を行うかというルールを定義しています。
ここでは、リクエストボディのJSONに「title」という項目がなければエラーとしています。
こちらで定義した内容は、スタックをデプロイした後にマネジメントコンソールで見ることができます。API Gatewayから該当のAPIのページを開き、「モデル」から該当のモデル名を選択すると確認できます。
ポイント2:作成したモデルをAPI Gatewayのメソッドに紐づける
上記コードではPOSTメソッドに対して検証のルールを適用しています。
まとめ
リクエスト検証機能を使うことで、Lambdaを起動することなく不正なリクエストを弾けるので良いですね!
LambdaやAPI Gatewayを作るところをかなりざっくりと省略してしまいましたが、雰囲気だけでも掴んでいただければ幸いです。