Lambdaでバイナリデータを扱うWebAPIを開発する際の注意点

経緯

最近、とあるWebアプリケーションを開発していた際に、バイナリデータを返すWebAPIを実装する機会がありました。要件として、バックエンドのクラウドはAWSが指定されていた為、バイナリデータの生成処理はLambda関数で実装し、Amazon API Gatewayを使用してLambda関数をHTTPエンドポイントに設定する、という構成で開発を進めていました。

ローカル環境でテストを実施し、正しく動作することを確認。
続いてAWS上のテスト環境にデプロイし、正常系のテストを開始したところ問題発生

生成されたバイナリデータが何故か破損した状態で返されていました。

結論

調査の結果、Amazon API Gateway のHTTP API の処理には、以下の2つの制約があることが分かりました。

  • バイナリデータを返すLambda関数はレスポンスをbase64エンコードする必要がある ※API GatewayでLambdaプロキシ統合を設定している場合のみ
  • API Gatewayのペイロードサイズに上限がある

テスト環境にてバイナリデータが破損していた理由は、上記のbase64エンコード処理を実装していないためでした。base64エンコード処理を実装したところ、バイナリデータ破損の問題は解消したのですが…そうすんなりとはいきません。今度は、ペイロードサイズの上限に引っかかるケースが発生しました。

AWSサポートにペイロードの上限引き上げについて相談しましたが、変更は不可とのこと。開発中のWebAPIはAWSの示すペイロード上限を超えるサイズを扱える必要があったため、やむを得ず、Lambda関数によるWebAPIの実装は諦め、EC2インスタンス上にWebAPIを構築する構成に切り替えました。

Amazon API Gateway + Lambdaの構成でWebAPIの開発を検討される方は、これらの点について注意が必要です。

補足:WebAPIのバイナリ対応に必要な操作

Amazon API Gateway + Lambdaの構成でバイナリデータを扱うには、実はLambda関数側の修正だけでなく、API Gateway側の設定も変更してやる必要があります。これを忘れるとバイナリデータを扱えないので要注意。
参考:Amazon API Gateway デベロッパーガイド – API Gateway コンソールを使用したバイナリサポートの有効化

コメントを残す

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

CAPTCHA