serverless framework で 日本語のPOSTされたデータを文字化けせず受け取る

serverless framework を使い、AWS Lambda や API Gateway を用いたシステムで、multipart/form-data 形式のデータを受け取る場合、日本語データのとき、文字化けが発生する。

元々AWS Lambda は、input / output に text を扱うようになっているので、バイナリデータとして送信される multipart/form-data に、何も設定しないままでは対応できない。

serverless framework を使うときは、まず serverless-apigw-binary を追加。

$ npm i serverless-apigw-binary

serverless.ts や serverless.yml に以下の項目を追加する事で、lambdaに渡すときにbase64エンコードされ、lambda上でアクセスするときには自動でデコードされる。

  custom: {
    apigwBinary: {
      types: [
        'multipart/form-data',
      ]
    },
  }
  // ...
  plugins: [
    'serverless-apigw-binary',
    // ...
  ],