つかびーの技術日記

情報系修士卒のWeb系技術日記です。現在のフォーカス分野はアドテクです。

Amazon API Gatewayを使い倒す!詳細な機能の解説

   

こんにちは、@s_tsukaです。

先日ご紹介しましたAmazon API Gatewayの記事はいかがでしたでしょうか。

Lambda連携で学ぶAmazon API Gateway解説!

上記の記事ではAPI Gatewayの最低限の使い方について触れただけでした。今回の記事ではもう少しAmazon API Gatewayの世界に踏み込んで、より広範囲の機能に触れていきたいと思います。

キャッシュ設定

キャッシュの設定を行うには以下のようにステージごとに設定します。Saveボタンを押しても暫くはキャッシュ作成中状態なので、作成完了まで暫くお待ちください。そのうちステータスがAVAILABLEになります。

API_Gatewayキャッシュの設定を行うと追加料金が発生します。

詳細は以下を参照してください。

https://aws.amazon.com/jp/api-gateway/pricing/

今回は0.5GBサイズのキャッシュを用意したので0.020USD/hですね。個人用途だと結構高いです。

キャッシュなしではGET /prod/personsは約300msでしたが、キャッシュありだと約200-300msになりました。裏側ではDynamoDBアクセスの処理やLambdaの起動処理が走るのでその分高速化されていますね。

キャッシュのTTL

上記ではpersonの一覧取得を行いましたが、もしpersonが追加されたらどうなるのでしょうか。本来であればpersonが追加された時点でperson一覧のキャッシュを無効化したいところです。でないと新しく追加したpersonが取得できません。

残念ながらInvalidationはできないのでTTLによるInvalidationを待つ必要があります。

初期設定では全てのメソッドのTTLは300sに設定されています。これはPOSTにも設定されています。POSTはキャッシュしてほしく無いので0sに設定しておいてキャッシュを無効化しましょう。

CloudWatchによる監視

次はAPI Gatewayの挙動を確認するためにCloudWatchを有効にします。

API_Gateway

メトリクス画面はこのような感じです。

CloudWatch_Management_Console500系のエラー、キャッシュヒット・ミス、レイテンシーなどを見ることができます。

CloudWatch Logsの方は良くわかりませんでした。Lambdaのログは見れましたが、それで良いのかな?

API Gatewayの制限(Timeout 10秒の制限)

API Gatewayにはいくつかの制限があります。

http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/limits.html

この中でもタイムアウト10秒の制限はなかなか厳しいかと思います。バックエンドで重たい集計処理が走る・・・というようなケースの場合、用意に処理時間が10秒を超えます。その場合API Gatewayはタイムアウト用のレスポンスを返してしまいます。これを回避するにはバックエンドの処理を10秒未満にするしかありません。

セキュリティ

API Keyについては以下が参考になると思います。

Amazon API GatewayでAPIキー認証を設定する

認可についても一応できるようです。

http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/permissions.html

ただこれは試していないです。実際の認可はおそらくIAM userではなくて、自身のDBに持っているユーザ(あるいはそのユーザのRole)ごとに切り替えたいはずですので、あまり関係ないかな?

独自ドメインの設定

API_GatewayAPI Gatewayが発行したURLではなくて、自身が持つドメインを利用したい場合はこの画面を利用します。

まず前提としてAPI Gatewayは基本的にhttpsを利用します。httpでアクセスしても301 Moved PermanentlyとLocationヘッダでhttpsへ飛ばされてしまいます。

httpsを利用する場合、デフォルトではCloudFrontの証明書が利用されます。そのため、単純に独自ドメインを利用しとうとするとドメインと証明書が合わずにブラウザの警告が出てしまいます。そのため、独自ドメインを利用する場合は上記の画面で証明書の設定を行う必要があります。

以上です。まだまだ未知の領域が多いですが、今後もふかぼっていきます。

 - クラウドサービス