前回やった事
「外部サイトから直接kintone APIを実行したい」で、S3にホストしたHTMLからAPI Gatewayを経由してkintoneへのアクセスを実現してみた。
この時はconsole.log(console.table)に出力したが、テーブルで出力するとこんな感じになる。
kintoneとしての課題
この仕組みを使うと、99.999999999%の耐久性を持つS3上にkintoneのデータを簡単に外部公開できるのだけど、kintoneには1日あたり10,000 リクエスト/アプリという制限が存在するため、大量アクセスを避ける必要がある。
ちなみに、10,000 リクエストを超過しても、いきなりサービスが止まったりする事は無い。
APIリクエスト数を超過した場合、直ちに使えなくなりますか
APIキャッシュを使ってリクエスト数を減らす
API GatewayにはAPIキャッシュという便利機能があるので、kintoneのAPIリクエストを減らす事ができないか試してみた。
APIキャッシュの概要、設定手順については、クラメソさんのブログが分かりやすい。
APIキャッシュを使う前
kintoneは、アプリ管理画面でAPIリクエスト数を確認できるようになっている。
今回、テストで利用している販売実績アプリの場合、この時点のAPIリクエスト数は68である事が分かる。
(もちろん、S3上のHTMLをリロードするごとにリクエスト数は増えていく)
APIキャッシュを有効にする
APIキャッシュを有効にした状態。(AVAILABLEになるまで5分ぐらいかかった)
AWS側でもキャッシュの状況を確認したいため、Enable CloudWatch Metricsを有効にした。
アクセスしてみる
APIキャッシュが有効になった状態でアクセスした時の挙動は以下の通り。
- 初回アクセス時はキャッシュされていないため、リクエスト数は増える。(68→69)
- 2回目以降のアクセスはAPIキャッシュが効いているため、リクエスト数は変わらない。
- 試しにkintone側にレコードを追加して、アクセスしてもキャッシュが返されるため、追加したレコードは表示されない。
- TTLに設定された時間(デフォルト300秒)を過ぎるとキャッシュがクリアされ、次にアクセスした際に最新の情報が取得される。
CloudWatchを確認すると、CacheMissCountは1(同じリクエストURLしか使っていないため)、それ以外のアクセスはCecheHitCountとなっていた。
まとめ
- API Gatewayを使う事で、kintoneのAPIリクエストを減らす事はできる。
分からない点
- キャッシュがクリアされる条件はサイズ、TTLとなっているので、明示的にクリアしたい運用があった場合はどうするべき?(キャッシュ機能を一無的に無効にする?)