ぶるーすくりーん

ぽんこつプログラマ日記

AWS の API Gateway について調べてみた

Amazon API Gateway というサービスがちょっと前に発表されました。
このサービスを利用すると、Amazon lambda function から REST API が作成できるそうです。
つまり、Amazon lambda にロジックを書いて、DynamoDB や S3 でデータ永続化を行うことで、サーバレスなシステムを構築できてしまう!?

というわけで、Amazon API Gateway とは何者なのか、AWS の様々なサービスを組み合わせることでサーバ(EC2)レスなサービス提供は可能なのか、できたとして誰得なのかなどについて、自分なりに調べてみた結果をまとめます。

API Gateway とは

AWS Summit 2015 New York にて発表されたサービス。 2015/08/09 現在では、アメリカ西部(オレゴン)リージョンとアメリカ東部(バージニア)リージョン、EUリージョンの提供。

Amazon lambda functionやインターネットで公開されているアプリケーションを利用して、簡単に REST API の作成、配布、保守、監視、保護が行える。

特徴

製品紹介のページを見るとざっくり下みたいな特徴。

API バージョン管理

  • ステージというのを複数(現状では10個まで)作成できる
    • 手軽に検証用環境作成できる
  • API毎に独立してデプロイができる
    • APIを変更したい場合に影響範囲を小さくできる

トラフィック管理

  • ロットリングによるトラフィック管理
  • API 呼び出しに対する出力をキャッシュ
    • バックエンドシステムへの不要な呼び出しを避ける
    • API のパフォーマンスを向上
  • エッジロケーションの世界的ネットワークを活用
    • API リクエストとレスポンスを可能な限り低いレイテンシーでエンドユーザーに提供

認証とアクセス管理

IAMやAmazon CognitoなどのAWS の管理ツールやセキュリティツールを使用して、API に対するアクセス認証を実施できる。

IAMだけでは、せいぜいアプリケーション毎のアクセス制御くらいで、複雑なアクセス制御はできない(と思う)。
Cognitoを使用すると独自の認証機構を通したり、Facebookとかとの連携もできるみたい(未調査)。

モニタリング

  • CloudWatchによってサービスの呼び出しを視覚的にモニタリング
    • パフォーマンスのメトリックス
    • API 呼び出しについての情報
    • データのレイテンシー
    • エラー率

料金

  • 受信した API 呼び出しと、送出したデータ量に対してのみ料金が発生
  • 無料利用枠 1年間無茶な使い方をしなければ無料

つまり何がいいの?

  • サーバの用意や管理をしなくても Web アプリを公開できる
  • トラフィックの増加だとか監視だとかいう運用部分は AWS におまかせできる
  • リクエスト/レスポンス毎に課金なので24時間動作させるよりは安い

AWS の機能をフル活用すれば、サーバ構築や運用のための設定をせずにアプリづくりに専念できる!

それPaaSでいいんじゃない?

  • 手軽に複数の検証環境を手に入れられる
  • API毎に独立してデプロイできる
  • 安い

実際に使ってみた

API Gateway と Lambda と DynamoDB を連携させて、簡単な REST API を実際につくってみた感想。

おもしろかったところ

  • ボタンぽちぽちで API をグローバルに公開できちゃった!
    API を簡単に 作成 できるフレームワークはたくさんあるけど、API を簡単に 公開 できるというのが API Gateway のスゴいところ
  • さらにボタンぽちで SDK までつくってもらえちゃった!
  • さらにボタンぽちで Cloud Watch でモニタリングできた!

不満だったところ

  • デプロイめんどくさい
    • 1API - 1lambda なので、API毎にファンクション定義するのがめんどくさい
    • cli 使ったデプロイ方法ってどっかのってる??
  • ソース管理方法が悩ましい
    • モデルとかみたいに CRUD で再利用したいものとかあるのでリソース毎に 1ソース にまとめたい
      zip アップロード機能使えばまとめられるんだけど、実際のデプロイはAPI毎なので、API毎にバージョンが異なるみたいなことになる

これは、もう少しソース管理やらデプロイやらのあたりに成約と自動化が無いと、個人レベルでもアプリ開発は難しそうだ。。

めんどくさいなら自動化するか!

構成管理を解決しつつデプロイ自動化できるようなフレームワーク的なもの考えてみるか!
と思ったらすでに @r7kamura さんがかっこいいの作成中でした

まとめ

現状の API Gateway の機能では運用がちょっと難しそう。
だけども、東京リージョンに公開される頃には、機能改善とかみんなのプラクティスとかでもっと使い心地よいものになるのかなと思う。

API Gateway + Lambda + DynamoDB とか連携しちゃえばサーバ側はかける。
さらに、S3 にクライアントコードデプロイしちゃえば、サーバレスで Webアプリかけちゃう。

AWS のサービスを組み合わせてサーバレスな Web アプリを公開する未来はそう遠くないように思う。

そうなると、今よりもっと簡単でお安く Webアプリを世界に公開できるようになるので、個人や少人数のスタートアップにとってはアプリを世界に発信するチャンスも増やせてだいぶハッピーな話だ。
アプリそのものの機能とか発想とかデザインみたいな部分で勝負できるようにならなきゃいけないね。