AWS SNSからのリクエストを検証するaws-js-sns-message-validatorをPromise化する

AWS SNSからのリクエストを検証するaws-js-sns-message-validatorをPromise化する

SNSのメッセージの署名検証を行うモジュールがAWS側で用意されているようです。以下URLになります。

GitHub - aws/aws-js-sns-message-validator
Contribute to aws/aws-js-sns-message-validator development by creating an account on GitHub.

インストールします。

npm i sns-validator

Promise化する

このsns-validatorはコールバックスタイルなのでutil.promisifyでpromise化します。

sns-validatorのindex.jsファイルを見ればわかりますが、bindメソッドでthisを固定化する必要があります。

const MessageValidator = require('sns-validator')
const { promisify } = require('util')
const aws = require('aws-sdk')
const sns = new aws.SNS({
  apiVersion: '2010-03-31',
  region: 'ap-northeast-1'
})

exports.handler = async (event) => {
  const message = JSON.parse(event.body) // 署名の検証
  const validator = new MessageValidator()
  const validateMassage = await promisify(validator.validate.bind(validator))(message) // bind(インスタンス変数)とする必要がある
  const response = {
    statusCode: 200,
    body: JSON.stringify('Hello from Lambda!'),
  }
return response
}

12行目で.bind(インスタンス変数)として、promisifyでプロミス化できます。

コメント

タイトルとURLをコピーしました