そごうソフトウェア研究所

SOA、開発プロセス、ITアーキテクチャなどについて書いています。Twitterやってます@rsogo

Lambda関数をAPI Gatewayで公開する(シンプル版)

先日、JavaでLambdaを作るエントリを書きましたが、今回、API Gatewayを使って、Lambdaで実装した処理をWebサービスとして公開したいと思います。

API GatewayはRESTfulなAPIを簡単に作れます。 RESTfulなので、まずはリソースを定義して、そのリソースに対するGET、POST、PUT、DELETEなどのメソッドを提供します。 後はどのバックエンドに接続するのかが、基本的な手順です。

手順はこちらをベースに進めます。

docs.aws.amazon.com

Lambda関数の作成

バックエンドはLambda関数を使います。 こちらで公開されているNode.jsのサンプルを、そのまま使って作成しておきました。

docs.aws.amazon.com

APIの作成

f:id:begirama:20180513002008p:plain

リソースの定義

最初にリソースを定義します。

f:id:begirama:20180513002455p:plain

  • リソース名: 任意の名前です。ここではproxyとしています
  • リソースパス: /proxy/{itemId}など個別のパターンを設定できますが、ここではワイルドカードになる{proxy+}を使います。これで、ルートのURL以下はなんでも受け取ります。

メソッドの定義

f:id:begirama:20180513002542p:plain アクションで、メソッドの作成を選びます。

f:id:begirama:20180513002702p:plain Lambda関数プロキシを選択します。 リージョンを選択して、Lambda関数名に何文字か入力すると、候補が表示されます。

f:id:begirama:20180515072400p:plain ここまでの状態はこんな感じ。

APIのデプロイ

f:id:begirama:20180513003023p:plain このままでは呼び出せないので、APIのデプロイを行います。

f:id:begirama:20180513003052p:plain ステージというのが設定できて、ステージごとに認証やスロットリングの設定を変更することができます。 例えば、社内用のAPIと、取引先用のAPIなんかで分けることもできそうです。

f:id:begirama:20180513003200p:plain

APIの呼び出し

デプロイが完了すると、こんな感じのURLが割り当てられます。

f:id:begirama:20180515070649p:plain

このまま呼び出すと、

{"message":"Missing Authentication Token"}

エラーが返ってきます。 エラーメッセージの内容がわかりにくいのですが、上のURLはルートのもので、子リソース(ここではproxy)が定義されている場合には、そのまま呼び出すとこのエラーが返ってきます。

そこで、https://dummy.execute-api.ap-northeast-1.amazonaws.com/dev/proxyのような子リソースを含むURLで呼び出すと、 欲しかった結果を得られます。