【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を作るところをかなりざっくりと省略してしまいましたが、雰囲気だけでも掴んでいただければ幸いです。

コメントする

メールアドレスが公開されることはありません。