1. はじめに
IBM Cloud(旧Bluemix)のCloud Foundryで作ったアプリがたまにハングしてしまうので、Google Apps Scriptを使って定期的に再起動する仕組みを作ってみました。
(新しいライト・アカウントでは、Cloud Foundryアプリは10日間cfコマンドを発行しないと、自動的にスリープにされてしまうので、その対策としても使えると思います)
Croud FoundryにはREST APIがありますが、IFTTTのWebhooksから叩ける範囲では実現できなかったため、Google Apps Scriptを使ってみることにしました。Google Apps Scriptはあまり知名度がありませんが、実はJavascriptの関数をAPIとして公開することができるため、簡易サーバレス環境として使っています。
最終的な流れは、IFTTT(webhooks) ⇒ google Apps ⇒ CF APIとなります。Google Apps Scriptの部分はGitHubに公開しましたので、使ってみてください。
2. 導入
2.1 Google Apps Script
- https://script.google.com/ からスクリプト作成画面を起動し、任意のプロジェクト名を設定します。
- デフォルトのスクリプトの内容を全て削除し、GitHubのリポジトリからcf-restart.js の内容をコピペして保存します。スクリプトのファイル名は何でも大丈夫です。
- ファイル⇒プロジェクトのプロパティ⇒スクリプトのプロパティで下記の内容を設定します。CF_LOGIN_URL、CF_API_URLはIBM Cloudの場合を想定して記載しています。

- ファイル⇒版を管理で適当な説明を入れて「新しいバージョンを保存」を押します。
- 公開⇒ウェブアプリケーションを導入で、以下のオレンジ枠の部分を設定します。青で囲った部分が実行用URLになります(このURLを知っている人はアクセス可能になるので注意してください)。バージョンは初回は1になるはずです。

(公開の手順はハマるポイントなので、うまく行かなかった場合はググって調べてみてください)
2.2 IFTTT
2.1の最後のステップで取得した実行用URLに対して、IFTTTからPOSTリクエストを発行します。Request Bodyに以下の形式のJSONでCloud FoundryアプリケーションのGUIDを設定します。
{"guid": "99999999-9999-9999-9999-999999999999"}
IFTTTでは、以下のように設定します。この例では、日曜日の午前2時に再起動するようにしてみました。Web RequestはURL、Method、Content Type、Bodyを設定します。
3. その他
Google Apps Scriptに対してHTTPリクエストを行う場合、リダイレクトが発生するので、自分で直接呼び出す場合は注意が必要です。