LoginSignup
3
4

More than 5 years have passed since last update.

Cloud Foundryのサービスを定期的に再起動する

Last updated at Posted at 2017-11-12

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の場合を想定して記載しています。
    script_property.PNG

  • ファイル⇒版を管理で適当な説明を入れて「新しいバージョンを保存」を押します。

  • 公開⇒ウェブアプリケーションを導入で、以下のオレンジ枠の部分を設定します。青で囲った部分が実行用URLになります(このURLを知っている人はアクセス可能になるので注意してください)。バージョンは初回は1になるはずです。
    webapp.PNG

(公開の手順はハマるポイントなので、うまく行かなかった場合はググって調べてみてください)

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を設定します。

gas-ifttt.png

3. その他

Google Apps Scriptに対してHTTPリクエストを行う場合、リダイレクトが発生するので、自分で直接呼び出す場合は注意が必要です。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4