【新機能】Amazon API Gatewayの設定方法にcatch-allパス変数、ANYメソッド、Lambdaとの新しいプロキシ連携の3機能が追加。

2016.09.21

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、せーのです。今日はAPI Gatewayに追加された3つの新機能をご紹介します。 今回の新機能はいずれも「APIを簡単に、手早く作りたい」という方たち向けの機能となっております。3つもあるので実際にやってみながらご紹介することにします。

やってみた

まずはAPIをひとつ作ります。

API_GatewayNewFeatures1

次にリソースを一つ作ります。

API_GatewayNewFeatures2

ここからが一つ目の新機能となります。

Catch-allパス変数

まず一つ目は「Catch-allパス変数」です。これは本来個別に規定されているAPIのパスをまとめて設定してしまう、というざっくり時短な機能です。

API_GatewayNewFeatures3

このように{proxy+}というパスを設定するとそのリソースより深いパスは全てここでキャッチしてくれます。上の例でいうと/test/{proxy+}となるので/test/1でも/test/seinoでも/test/seino/updateでも全てここで処理してくれます。

ANYメソッド

API_GatewayNewFeatures4

上のCatch-allパス変数をセットすると自動的にANYメソッドが追加されます。これはその名の通り全てのメソッドの代わりにこのメソッドが反応するというものです。GET、POST、PUTなど普通はそれぞれメソッドを規定する必要があるのですが、ANYメソッドを設定しておけばそれでOK、となります。なんて簡単なんでしょう。

Catch-allパス変数のときだけではなく、普通のリソースに対してもANYメソッドは設定できます。ANYメソッドを設定すると他に設定されているメソッドはANYメソッドの処理に上書きされます。

新Lambda連携 & HTTP Proxy連携

最後はLambdaとの新しい連携機能です。といっても特別な設定が加わったわけではなくて、今までAPI GatewayとLambdaを連携させるにはmapping templateというものを書いて、入ってきたデータをどのようにLambdaに渡すか、という定義をしていたのですが、Lambda連携用のテンプレートが内蔵され、データはもちろんヘッダやクエリまで自動的にマッピングしてLambdaに渡してくれるようになりました。

BluePrintでAPI Gateway系のものは全てその実装に変わっているのですぐに使うことができます。

API_GatewayNewFeatures6

今回はドキュメントにあるProxy連携のコードをそのまま使ってみたいと思います。

API_GatewayNewFeatures5

これはnameというクエリを拾ってきてHello, [name]と返す、というものですね。

ちなみにもう一つのHTTP Proxyというのは、このAPIに来たリクエストをそのまま他のHTTPエンドポイントに向けて投げる、というものです。今回のアップデートではこのHTTP Proxyにもmappingや転送設定なしでそのままぶん投げる「HTTP Proxy連携」という機能が追加されました。

API_GatewayNewFeatures11

この真ん中のチェックボックス、これが新機能です。これをチェックすることでマッピングを書く必要がなくなります。 ちなみにこのHTTPエンドポイント先はEC2以外にもオンプレや既存のAPIエンドポイントにも使えます。使い勝手が広いですね。

最後にAPI GWに作ったLambdaを連携させます。

API_GatewayNewFeatures7

これでできあがりです。複雑な設定がなくなって簡単になりましたね。

API_GatewayNewFeatures8

ではテストしてみます。nameのクエリを入れて流してみます。

API_GatewayNewFeatures9

Hello, Tsuyoshiと返ってきているのが見えます。成功です。

API_GatewayNewFeatures10

まとめ

いかがでしたでしょうか。API Gatewayは便利なサービスである一方設定が難しい、という面がありましたが、今回のこのアップデートで誰でも簡単にAPIが作成出来るようになったと思います。是非お試しください。

参考リンク