Amazon API Gateway を使って AWS 以外のサービスの API をラップする

API Gateway
145件のシェア(ちょっぴり話題の記事)

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

Amazon API Gateway!!!!

AWS Summit 2015 NewYork で発表&ローンチされた新サービス「API Gateway」。社内でも社長を筆頭に愉しみながら触れています。

Amazon Lambda と連係させることで、Lambda Function を HTTP 形式の API にできるところに注目が集まっていますが、API Gateway ではそれだけではなく、外部の HTTP プロキシの API の呼び出し各 AWS サービスの API の呼び出しも可能です。API Gateway はいろいろな可能性に満ちあふれています。

ということで今回は HTTP プロキシの API との連係機能を使って、OpenWeatherMap のラッパー的な API を作成してみたいと思います。

API の作成

それでは、API を作成していきましょう。まずはじめに「Get Started」をクリックします。

api-gateway01

API name を適当に決めます。Description は任意項目なので入力しなくても構いません。終わったら「Create API」をクリックしましょう。

api-gateway02

Resource の作成

次に Resource を作成します。「Create Resource」をクリックします。

api-gateway03

Resource NameWeather としました。Resource Name を入力すると Resource Path も自動的に入力されます。気に入らない場合は変更できます。終わったら「Create Resource」をクリックします。

api-gateway04

Method の作成

次は Method を作成です。今回は GET の Method を作成してみましょう。「Create Method」をクリックすると、左側の Resource の weather にドロップダウンが表示されます。その中から GET を選んでチェックマークをクリックします。

api-gateway05

出来上がったら GET をクリックします。すると Method の設定画面が表示されます。ここは、GET の Method が呼び出されたら、何を行うか 設定する画面です。

Integration type は実際に行うアクションの設定です。Lambda Function の呼び出し、HTTP リクエスト、各種 AWS サービスの API 呼び出しから選択できます。今回は HTTP Proxy を設定しました。HTTP Proxy を選択した場合は、HTTP methodEndpoint URL を設定する必要があります。今回は OpenWeatherMap の天気の情報を取得する API を設定しています。終わったら「Save」をクリックします。

api-gateway06

保存が終わると、次のような画面が表示されると思います。この画面は Method Execution と呼び、Method 全体の設定を一覧できるとともに各種設定画面に遷移できる画面です。下図には、画面の構成の説明を入れてみました。

api-gateway18

リクエストパラメータの設定

次にリクエストパラメータを設定します。

今回は OpenWeatherMap の API を間接的に叩く形になっていますが、OpenWeatherMap は ?q=London といったように q のリクエストパラメータを付与することで、指定した地域の天気情報が取得できるようになっています。API Gateway では 作成した API のリクエストパラメータを定義して、Integration 先のリクエストパラメータに変換することができます。

Method 作成後、下図のような画面が表示されていると思います。この中の「Method Request」をクリックします。

api-gateway07

この中の URL Query String Parameters を開き Add query string をクリックします。すると名前が入力できるようになるので、実際のリクエストパラメータにしたい名前を入力します。今回は location としました。入力したら右端にあるチェックマークをクリックします。

api-gateway08

次に先ほどの Method Execution 画面に戻り、今度は Integration Request を開きます。

api-gateway09

Integration Request 画面は、Method が受け取った値を Integration 先のリクエストに変換する設定を行う画面です。先ほど定義した locationq に変換します。

URL Query String Parameters を開き、Add query string をクリックします。入力欄が出てくるので、NameqMapped frommethod.request.querystring.location を入力します。

api-gateway10

チェックマークをクリックして完了です。

API のテスト

それではテストしてみましょう。Method Execution 画面に戻り、TEST を開きます。

api-gateway11

Query Stringslocation が表示されています。Tokyo と入力して「TEST」をクリックします。

api-gateway12

東京の天気情報が取得できました!

api-gateway13

デプロイ

最後にデプロイまで行ってみましょう。Method Execution 画面に戻り、「Deploy API」をクリックします。

api-gateway14

デプロイ先の設定を行います。Deployment StageNew Stage を選択し Stage nameprod とします。Stage name は URL の一部になります。Stage descriptionDeployment description は任意項目です。終わったら「Deploy」をクリックします。

api-gateway15

青枠の Invoke URL に書かれている URL が、作成した API のエンドポイントです。

api-gateway16

ここに /weather?location=Tokyo を付け足してリクエストすると、東京の天気が取得できます!

api-gateway17

まとめ

今回は単純なラッパーを作成してみました。この機能を使うと、リクエストパラメータの名前を変更したり、リクエストパラメータをリクエストヘッダーに変換したり、GET を POST にしてみたり、HTTP ステータスを別なステータスに変換したり、レガシーな API をいい感じに修正したりといったような、既存の API をいろいろとカスタマイズできます。

API Gateway に寄せることで、アプリケーションで使用するさまざまな API をひとつの形式に統一できる点が、最大のメリットだと思います。

Developers.IO では、今後も API Gateway に関する記事をどしどし掲載する予定です。お楽しみに!

参考

AWS Cloud Roadshow 2017 福岡