LoginSignup
0
2

More than 3 years have passed since last update.

APIGateway+Lambda+ServerlessFramework(言語:Python&Golang)の色々。offlineモードとかバイナリアップロードとか

Last updated at Posted at 2020-01-19

はじめに

APIGateway+Lambdaを使って、RESTfullなAPIによるPDF生成APIをデプロイメントする時に色々とハマったので、その時の備忘録を記事にしました。

基本はServerlessFrameworkを使ったデプロイメントの自動化を目指して作業をしていった内容をまとめています。

APIGatewayでメディアタイプの追加

まず、APIGatewayのバイナリレスポンス対応がどういうフローになるかを説明しておきます。

  • 【リクエスト】
    ブラウザ → (jsonリクエスト) → APIGateway → Lambda

  • 【レスポンス】
    Lambda → (ファイルを文字列:Base64変換) → APIGateway → (文字列をデコード:Base64変換) → ブラウザ

上記のようにLambdaからはBase64変換されたバイナリデータの文字列が返却される事が期待されています。Lambdaで返却する時の処理として、ここがまずポイントになります。

APIGatewayのバイナリサポート周辺

APIGatewayでPDFファイルを直接返す場合、APIGatewayでバイナリサポートを有効にする必要がある。

バイナリサポートは、GUIのAWS Consoleで言うと
API_Gateway.png

まず、ここにメディアタイプを追加する必要がある。
これをServerlessFrameworkのPluginで対応させる場合は以下のPluginを使って対応可能。

ちなみに、すごく紛らわしいがserverless-apigwy-binaryというPluginもある。これは後ほど説明するが、この↑バイナリメディアタイプを設定するものではないので、要注意。

統合リクエストの設定(英語名:Integration)

結構ハマった所。通常のServerlessFrameworkで生成されるテンプレートを使ってデプロイすると、統合リクエストは「Lambdaプロキシ統合の使用」にチェックが入った状態でデプロイされます。

API_Gateway_1.png

ここを外すと、「統合レスポンス(英語名:IntegrationResponse)」が変更できるようになります。この時、統合リクエストのマッピングテンプレートは、マッピングテンプレートをどう使えば良いか習熟している場合は普通にそこを設定すれば良いのだろうけど、良くわからない場合は「テンプレートが定義されていない場合(推奨)」を選択しておきつつ、設定されてるマッピングテンプレートを全て削除しておくのが良いと思います。

参考リンク

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2