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 呼び出しを受け付け
- 作成した API を元に JavaScript、iOS、Android などのクライアント SDK を自動生成できる
- API バージョン管理が簡単にできるよ
- トラフィック管理をAWSにおまかせできる
- 認証とアクセス管理もAWSにおまかせできる
- モニタリングだってAWSにまかせとけ
API バージョン管理
トラフィック管理
- スロットリングによるトラフィック管理
- バックエンドの動作はトラフィックの激増にも耐えられる
- API 呼び出しに対する出力をキャッシュ
- バックエンドシステムへの不要な呼び出しを避ける
- API のパフォーマンスを向上
- エッジロケーションの世界的ネットワークを活用
認証とアクセス管理
IAMやAmazon CognitoなどのAWS の管理ツールやセキュリティツールを使用して、API に対するアクセス認証を実施できる。
IAMだけでは、せいぜいアプリケーション毎のアクセス制御くらいで、複雑なアクセス制御はできない(と思う)。
Cognitoを使用すると独自の認証機構を通したり、Facebookとかとの連携もできるみたい(未調査)。
モニタリング
料金
- 受信した API 呼び出しと、送出したデータ量に対してのみ料金が発生
- 無料利用枠 1年間無茶な使い方をしなければ無料
つまり何がいいの?
- サーバの用意や管理をしなくても Web アプリを公開できる
- トラフィックの増加だとか監視だとかいう運用部分は AWS におまかせできる
- リクエスト/レスポンス毎に課金なので24時間動作させるよりは安い
AWS の機能をフル活用すれば、サーバ構築や運用のための設定をせずにアプリづくりに専念できる!
それPaaSでいいんじゃない?
実際に使ってみた
API Gateway と Lambda と DynamoDB を連携させて、簡単な REST API を実際につくってみた感想。
おもしろかったところ
- ボタンぽちぽちで API をグローバルに公開できちゃった!
API を簡単に 作成 できるフレームワークはたくさんあるけど、API を簡単に 公開 できるというのが API Gateway のスゴいところ - さらにボタンぽちで SDK までつくってもらえちゃった!
- さらにボタンぽちで Cloud Watch でモニタリングできた!
不満だったところ
- デプロイめんどくさい
- ソース管理方法が悩ましい
これは、もう少しソース管理やらデプロイやらのあたりに成約と自動化が無いと、個人レベルでもアプリ開発は難しそうだ。。
めんどくさいなら自動化するか!
構成管理を解決しつつデプロイ自動化できるようなフレームワーク的なもの考えてみるか!
と思ったらすでに @r7kamura さんがかっこいいの作成中でした
- https://github.com/r7kamura/amazon-api-gateway-client
AWS API Gatewayの操作を node.js で扱うためのライブラリ - https://github.com/r7kamura/fluct
Lambda + API Gateway 構成のアプリを作成するためのスキャッフォールド的なもの
内部で上記ライブラリを使用してて、デプロイまで行ってくれる
デプロイしなくてもローカルでサーバたてて動作確認できるような仕組みも実験段階だけどある
まとめ
現状の API Gateway の機能では運用がちょっと難しそう。
だけども、東京リージョンに公開される頃には、機能改善とかみんなのプラクティスとかでもっと使い心地よいものになるのかなと思う。
API Gateway + Lambda + DynamoDB とか連携しちゃえばサーバ側はかける。
さらに、S3 にクライアントコードデプロイしちゃえば、サーバレスで Webアプリかけちゃう。
AWS のサービスを組み合わせてサーバレスな Web アプリを公開する未来はそう遠くないように思う。
そうなると、今よりもっと簡単でお安く Webアプリを世界に公開できるようになるので、個人や少人数のスタートアップにとってはアプリを世界に発信するチャンスも増やせてだいぶハッピーな話だ。
アプリそのものの機能とか発想とかデザインみたいな部分で勝負できるようにならなきゃいけないね。