この記事は SAP Advent Calendar 2023 の12月9日分の記事として執筆しています。
CF環境で自前のアプリケーションを稼働させているような場合、アプリケーションの死活を検知し、アプリケーションがダウンしてしまった場合は可能な限り早く復旧する必要があります。
Alert Notification ServiceとAutomation Pilotという2つのサービスを利用すれば、自動復旧する仕組みを構築可能なのですが、日本語での構築記事が見当たらなかったため、この記事で紹介します。
全体のアーキテクチャはSAP JapanのYouTube動画が参考になります。
Automation PilotはBTPに関する様々なコマンドを発行できるサービスで、要はCF CLIやBTP CLIなど、これまではローカルPCにダウンロードしてローカルPCからコマンド実行していたような操作を、クラウド上で実現できるようにしたサービスです。
Automation Pilotで提供されるコマンドは多岐にわたりますが、例としてよく使うのが
などです。
今回はCFアプリケーションの起動をAutomation Pilotで実行します。
Alert Notification Serviceはシステム異常を外部通知するサービスです。
例えば、『app.crash』というイベントを検知したことをトリガーに外部通知してやることで、out of memoryなどでアプリが死んだ場合にメールで管理者に伝えたりすることができます。
そして、Alert Notification ServiceからはAutomation Pilotをwebhookで呼び出すことも可能であるため、app.crashの検知をトリガーとしてアプリケーションの起動コマンドを実行させることで、自動復旧が行えます。
下図赤枠で囲んだ範囲の実現方法をこの記事で紹介します。
(下図:SAP JapanのYouTube動画より引用)
各サービスのインスタンス作成、サブスクリプション作成手順については割愛します。
Automation Pilotでアプリケーションの起動コマンドを実行するための準備を進めていきます。
アプリケーションの起動を行うために、必要な情報を確認します。
上記の情報が必要であり、これらを予め環境変数的に定義してやることとします。
Automation Pilotの管理画面の左メニューからInputsを選択し、新規のInputsを作成します。
パラメータを追加していきます。
下記のパラメータを設定して下さい。Typeは全てstringです。
Name | Value | (メモ) |
identityProvider | sap.ids | BTPの標準ユーザ利用の場合。 IASを利用している場合はそちらに合わせて下さい |
region | (リージョン 例:cf-eu10-004) | サブアカウントのoverviewにあるAPI Endpoint参照 |
subAccount | (サブアカウントID) | サブアカウント名ではなくIDなので注意 |
resourceGroup | (スペースのID) | スペース名ではなくIDなので注意 |
resourceName | (アプリのID) | アプリ名ではなくIDなので注意 |
user | (BTPのログインユーザID) | |
password | (BTPのログインパスワード) |
上記のサブアカウントのIDやスペースのID、アプリのIDなどは、CFアプリケーションの管理画面のURLから確認することができます。
(下図赤枠参照)
これでCFアプリ起動をコマンドから実行する準備は整いました。
Alert Notificationから呼び出してもらうwebhook URLを確認します。
メニューのExecutionsからBuild Event Triggerボタンをクリック
今回はCFアプリの起動なので、コマンドはStartCfApp、Inputs Referencesは先ほど作成した変数を選択しておきます。
Event Trigger URLは後ほど利用するため、控えておきます。
Alert Notification Serviceから呼び出しができるようにするためのセキュリティ設定を実施します。
Alert Notificationから呼び出してもらう際のユーザを作成します。
Usernameは任意ですが、Alertとしました。
権限はAutomation Pilotのコマンド実行をしたいため、Executeを付与します。
パスワードが払い出されます。控えておきましょう。
Conditionは下図のように、eventType equals app.crashで作成して下さい。
Actionは下図のように、Automation Pilotを呼び出すタイプのアクションを作成します。
呼出し先のURLはステップ1の最後に確認したURLです。
ユーザ/パスワードはステップ2で作成したものを利用します。
このAlert Notificationを有効にすることで、CFアプリのクラッシュを検知した時に自動的にCFアプリの起動ができるようになり、運用の省力化が見込めます。
Automation PilotではCFアプリの起動以外にも様々なコマンドが実行できますので、是非お試しください。
※なお、Automation Pilotは日本リージョンでは使えません。日本リージョンにも対応してほしいです・・・。