Lambda関数をAPI Gatewayで公開する(シンプル版)
先日、JavaでLambdaを作るエントリを書きましたが、今回、API Gatewayを使って、Lambdaで実装した処理をWebサービスとして公開したいと思います。
API GatewayはRESTfulなAPIを簡単に作れます。 RESTfulなので、まずはリソースを定義して、そのリソースに対するGET、POST、PUT、DELETEなどのメソッドを提供します。 後はどのバックエンドに接続するのかが、基本的な手順です。
手順はこちらをベースに進めます。
Lambda関数の作成
バックエンドはLambda関数を使います。 こちらで公開されているNode.jsのサンプルを、そのまま使って作成しておきました。
APIの作成
リソースの定義
最初にリソースを定義します。
- リソース名: 任意の名前です。ここでは
proxy
としています - リソースパス:
/proxy/{itemId}
など個別のパターンを設定できますが、ここではワイルドカードになる{proxy+}
を使います。これで、ルートのURL以下はなんでも受け取ります。
メソッドの定義
アクションで、メソッドの作成を選びます。
Lambda関数プロキシを選択します。 リージョンを選択して、Lambda関数名に何文字か入力すると、候補が表示されます。
ここまでの状態はこんな感じ。
APIのデプロイ
このままでは呼び出せないので、APIのデプロイを行います。
ステージというのが設定できて、ステージごとに認証やスロットリングの設定を変更することができます。 例えば、社内用のAPIと、取引先用のAPIなんかで分けることもできそうです。
APIの呼び出し
デプロイが完了すると、こんな感じのURLが割り当てられます。
このまま呼び出すと、
{"message":"Missing Authentication Token"}
エラーが返ってきます。 エラーメッセージの内容がわかりにくいのですが、上のURLはルートのもので、子リソース(ここではproxy)が定義されている場合には、そのまま呼び出すとこのエラーが返ってきます。
そこで、https://dummy.execute-api.ap-northeast-1.amazonaws.com/dev/proxy
のような子リソースを含むURLで呼び出すと、
欲しかった結果を得られます。