Exastro OASE ServiceNow連携機能を使ってみた「①ワークフローの実行」

#はじめに

本記事では 2021年12月 にリリースされた OASE v1.5.0で追加・強化された以下機能を3つの記事に分けて見ていきます。
OASE v1.4.0ではService Nowとの連携が可能で、Service Nowのインシデントチケットの「オープン⇒クローズ」のステータス管理のみ対応していましたが
v1.5.0では以下のような機能が実装されたので、本記事では新機能①「ワークフローの実行」を見ていきます。
**①ワークフローの実行**
**②インシデント管理機能の強化**
**③承認フローに対応**

※新機能「②インシデント管理機能の強化」「③承認フローに対応」については、以下記事で紹介しています。
[Exastro OASE ServiceNow連携機能を使ってみた「②インシデント管理機能の強化」](https://qiita.com/ojima-n/private/0e56ea61988975fa1644)
[Exastro OASE ServiceNow連携機能を使ってみた「③承認フローに対応」](https://qiita.com/ojima-n/private/9f64dbd27891c645b8e8)

<details>
<summary>OASEとは</summary>
**OASE：Operation Autonomy Support Engine**
「システム運用の自律化・効率化・省力化を支援するためのOSS」である。
OASE は他のシステムと連携することで監視からアクションまでの一連の処理を実施します。
※[公式コミュニティサイト](https://exastro-suite.github.io/oase-docs/index_ja.html)より引用
</details>
<details>
<summary>Service Nowとは</summary>
Service Now は、提供されるアプリケーション、データ、ビジネスロジック、セキュリティーモデルなどが単一のクラウドプラットフォーム上で稼働するように実装されており、計画から運用、サービス管理など、さまざまな業務がエンドツーエンドで完結する業務プロセスの実現をコンセプトとしている。各機能は、ITIL をベースに設計されている。
※[Wikipedia](https://ja.wikipedia.org/wiki/ServiceNow)より引用
</details>
<details>
<summary>Exastro IT Automation(=ITA)とは</summary>
ITA：IT Automation
「システム設定をデジタル化して一元管理するためのオープンソースのフレームワーク」である。
[ITAコミュニティサイト](https://exastro-suite.github.io/it-automation-docs/index_ja.html)
[Exastro IT Automationをインストールしてみた（v1.8.0）](https://qiita.com/standsetx/items/53553a0f78edc3097812)
[Exastro IT Automation クイックスタート (ver1.8.0)](https://qiita.com/y-masaya3210/items/68920237c03e5d4f4776)
</details>


#システム構成と全体のシナリオ
全体のシステム構成図とシナリオは以下になります。
本記事では構成図の①部分の「ワークフローの実行」を見ていきます。


**シナリオ１：ワークフローの実行**
OASEからService Now上で作成したワークフローをキック(実行)し、メールが通知されることを実現します。


**シナリオ２：インシデント管理機能の強化**
Service Nowのインシデントのステータス「NEW(起票)」「IN_PROGRESS(対処中)」「RESOLVED(解決済み)」「CLOSED(クローズ)」をディシジョンテーブルファイルを使って、インシデント起票からクローズまで一元で管理し、Service Nowでチケットが起票されていること確認します。
「IN_PROGRESS(対処中)」と「RESOLVED(解決済み)」の間に対処としてOASEとITAを連携し対象のサーバに対して対処(httpdの再起動)を実施します。


**シナリオ３：承認フローの組み込み**
シナリオ２の設定では自動的に対処を実施してしまうので、対処の開始前に承認フローを組み込むことにより対処前に実施してよいか事前確認できるようにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/b700f450-3317-728e-87c1-7bdca84ef8e4.png)




#事前準備
OASE、Service Now、Exastro IT Automationの事前準備として、インストールや下準備を行っていきます。


###1.OASEのインストール
OASEのインストールを行います。
公式コミュニティサイト掲載の[オンラインインストールマニュアル](https://exastro-suite.github.io/oase-docs/asset/Learn_ja/OASE-online-install_ja.pdf)や
Qiita記事[「Exastro OASE を最速でインストールする」](https://qiita.com/wreath-vine/items/46b3838ce845bba9ae4e)をご参照ください。


###2.Service Now設定


**2-1.Service Now開発者インスタンスの取得(インスタンス作成)**
下記、Qiitaを参考にService Now開発者インスタンスの作成を行っていきます。
Service Nowは個人に無償で開発用インスタンスを提供しています。

Qiita記事[「ServiceNow開発者インスタンスの作成」](https://qiita.com/htshozawa/items/e23a39926b876ccb0a42)


**2-2.メール送付設定**
Service Nowの開発者向けインスタンスはデフォルトではメール送信が無効化されているので有効化にします。

Qiita記事[「ServiceNow初期設定 メール送信を有効化する」](https://qiita.com/Kisaragi13/items/d6147e4e196b4a5bbc0c)


###3.ITAの設定
Exastro IT Automationをインストールしていきます。

公式コミュニティサイト掲載の[オンラインインストールマニュアル](https://exastro-suite.github.io/it-automation-docs/asset/Learn_ja/ITA-online-install_ja.pdf)や
Qiita記事[「Exastro IT Automationをインストールしてみた（v1.8.0）」](https://qiita.com/standsetx/items/53553a0f78edc3097812)をご参照ください。






#シナリオ１：ワークフローの実行
それでは、まずは新機能の1つ目「ワークフローの実行」を見ていきましょう。
本シナリオではシンプルにOASEからService Nowのワークフローを実行します。
シナリオとしましては、Service Now上でメール通知のワークフローを作成し、OASからワークフローをキック(実行)することでメールが受信されることを実現します。


###1.Service Nowの設定
Service Nowにてワークフローとワークフロースケジュールを作成していきます。



**1-1.ワークフローエディターへの移動**
Service Nowインスタンスのページを開き、画面左上のアプリケーションナビゲータから「ワークフローエディター」を検索し、「Workflow」下の「ワークフローエディター」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/b1cae3f0-3d1a-dd6b-85ae-97a6f5c0c3de.png)


**1-2.ワークフローの新規作成**
「ワークフローエディター」の画面右上にある「新規ワークフロー」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/9aecfe17-9a09-85e6-d79d-ea79237bcc76.png)

**1-3.ワークフローの名前設定**
「新規ワークフロー」の画面上で「名前」と「テーブル」を入力し、「送信」をクリックすると、フロー作成画面が表示されます。
　
今回は以下のように入力しました。

|名前|テーブル|
|:---|:---|
|通知ワークフロー|Apache Web サーバー [cmdb_ci_apache_web_server]|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/e298047d-de71-fba0-4633-312ca33251e8.png)

**1-4.ワークフローの設定**
メールを送信できるように通知タスクを追加する。
画面右の「コア」タブより「通知」をドラッグ&ドロップし、ワークフローの内容を入力後、画面右上の「送信」ボタンを押下する。
今回は下表のように入力しました。

|名前|宛先|件名|メッセージ|
|:---|:---|:---|:---|
|通知タスク|xxx@xx.co.jp(任意の通知先メールアドレス)|OASE-SN 連携|テスト用になります。|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/650cbc6d-d29c-0dd5-bd67-34aa491d44c0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/d8e24e3e-e65b-f11e-f701-2a9500539bc5.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/a7d4ed0e-74cb-9e19-9ca2-c5d8ddd6f76d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/9609a735-fe66-6b41-d4ef-1ec05849550f.png)

**1-5.作成したワークフローの検証**
通知フローが作成できたら「検証」ボタンを押下し、「Warn」「Critical」のメッセージが出力されないことを確認する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/ea038e99-32d0-5ca3-7c09-fc525baf228f.png)

**1-6.ワークフローの公開**
左上のメニューから「公開」を押下し、ワークフローを公開する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/71b7f5f0-5971-a6e3-6017-ecbec01af1bf.png)


**ワークフローの作成が完了したので、次にワークフロースケジュールを作成していきます。**

**1-7.ワークフロースケジュールへの移動**
Service Nowインスタンスのページを開き、画面左上のアプリケーションナビゲータから「ワークフロースケジュール」を検索し、「Workflow」下の「ワークフロースケジュール」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/26b36f59-ae53-2fd8-9f01-8cfa65fa8bdb.png)

**1-8.ワークフロースケジュールの新規作成**
「ワークフロースケジュール」の画面左上にある「新規」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/de1e170e-eda7-88f7-6c31-3c427de2aacf.png)

**1-9.ワークフロースケジュールの設定**
ワークフロースケジュールの内容を入力し、画面右上の「送信」ボタンを押下する。
今回は下表のように入力しました。

|名前|ワークフロー|実行|
|:---|:---|:---|
|通知ワークフロー|通知ワークフロー|オンデマンド|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/12e2a971-d372-91fe-34bb-b32aa8e5a056.png)

**1-10.ワークフロースケジュールの sys_id 取得**
次作業のOASEの設定「2-4.ルールテーブルを編集する」でワークフロースケジュールの sys_idを使用するので、控えておきます。
作成したワークフロースケジュールを右クリックし「sys_idのコピー」を選択すると 「クリップボードにコピーしました」と表示されますので取得したsys_idをテキストに控えておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/559d8d87-e7fe-8761-eb52-b223003dc85d.png)













###2.OASEの設定

**2-1.アクション設定**

「アクション」の設定を行います。
これはイベント発生時に自動で起こす行動を定義するものです。

アクションの種類には「ITA Driver ver1」と「mail Driver ver1」と「ServiceNow Driver」があり、アクションの種類ごとの説明は以下になります。


**ITA Driver**：ExastroITAと連携してシステムに必要な処置を行うよう自動化設定ができます。
**mail Driver**：事前に設定したメールアドレスへ通知メールを自動送信する機能を持ちます。
**Servicenow Driver**：Service Nowと連携することで、ワークフローのキックやインシデントのステータス管理ができます。

---
**【使用メニュー】 「システム」グループ　/ 「アクション設定」メニュー**

画面右上から「アクション先の追加」を押下後に、アクション先から「ServiceNow Driver ver1」を選択し、フォームに必要情報を入力し、「保存」ボタンを押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/225e1e2b-ab00-11ba-2a9b-f178aca37594.png)


今回は下表のように入力しました。

|項目名|入力値(例)|
|:---|:---|
|名前|action_servicenow|
|プロトコル|https|
|ホスト/IP|devxxxxx.service-now.com|
|ポート|443|
|ユーザ名|admin|
|パスワード|xxxxxxxx|
|プロキシ|http://proxy.example.com:xxxx|

---
**2-2.トークンの設定**

次作業のOASEサーバに「リクエスト」を送信する際に、イベントの疑似的な情報を渡す際に使用する認証情報としてトークンを払い出します。

---

**【使用メニュー】 「ルール」グループ　/ 「トークン払い出し」メニュー**

画面右上の「新規トークン払い出し」を押下すると「新規トークン払い出し」画面に移ります。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/f95e8d09-950d-64b4-0e13-c58a31fd854d.png)

今回は下表のように入力しました。

|項目名|入力値(例)|
|:---|:---|
|トークン名|servicenow_token|
|有効期限|-|

<font color="Red">※【注意】
権限設定欄にて、自身のユーザが所属するグループで「権限あり」にチェックを入れる必要があり、チェックがない場合はGUIから参照や操作ができなくなるようです。</font>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/dde5bd25-042a-4a03-a8f3-7e190a3935b5.png)


**2-3.ディシジョンテーブルにルールを登録**
ディシジョンテーブル(さまざまな条件（入力）に対して，どのようにソフトウェアが動作（出力）するのかを決定する表)にルールを登録していきます。

---
**【使用メニュー】 「ルール」グループ　/ 「ディシジョンテーブル」メニュー**

画面上部の「新規追加」を押下し、設定画面に入力していき「保存」をクリックします。
ディシジョンテーブルの保存後、ルール定義を作成するためのディシジョンテーブルファイルをダウンロードします。


今回は下表のように設定しました。

■基本情報・権限

|項目名|入力値|
|:---|:---|
|ディジションテーブル名|workflow_test|
|概要|(空欄)|
|権限の設定|システム管理者|


■条件式

|条件名|条件式|
|:---|:---|
|IDと等しい|等しい(数値)|


■未知事象通知

|項目名|選択|
|:---|:---|
|未知事象通知|ServiceNowと連携する|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/5f7f3c01-21b9-bdfc-0b7b-e20246b8c2d6.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/4d717bcc-ed30-ec0c-9566-8056dc804594.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/c3b02b80-9f16-1f8d-c733-ddfb7333b2e0.png)


**2-4.ルールテーブルを編集する**

ダウンロードしたディシジョンテーブルファイルを編集していきます。
項目は色で「コメント部」「条件部」「アクション部」「アクション条件部」にカテゴリ分けされているようで、各カテゴリの説明については[公式ドキュメント](https://exastro-suite.github.io/oase-docs/documents_ja.html)をご確認ください。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/c77c1fe6-5f56-db33-975c-5aa2bafbb798.png)


---
本シナリオでは新機能「ワークフローの実行」を実現したいということで、ルールは1つだけ定義します。

今回は下表のように入力しました。
※アクションパラメータ情報の「WORKFLOW_ID」は前作業でメモしておいたワークフロースケジュールのsys_idを入力ください。

|ルール説明|IDと等しい(等しい(数値))|ルール名（必須）|発生事象（必須）|
|:---|:---|:---|:---|
|test|1|ワークフロー実行|X|

|対処概要（必須）|アクション種別|アクションパラメータ情報|
|:---|:---|:---|
|ServiceNowのワークフローの実行|ServiceNow(ver1)|SERVICENOW_NAME=action_servicenow,WORKFLOW_ID=xxxxxxxxxx|

|承認メールパラメータ情報|リトライ間隔（必須）|リトライ回数（必須）|抑止間隔（必須）|抑止回数（必須）|
|:---|:---|:---|:---|:---|
|X|1|1|1|1|

|条件回数（必須）|条件期間（秒）（必須）|大グループ（必須）|優先順位（必須）|
|:---|:---|:---|:---|
|X|X|X|X|

|小グループ（必須）|優先順位（必須）|
|:---|:---|
|X|X|



**2-5.ディシジョンテーブルファイルのアップロード**
前作業で作成したディシジョンテーブルファイルのアップロードします。

---
**【使用メニュー】「ルール」グループ / 「ルール」メニュー**

「ファイルを選択」ボタンよりファイルを選択し、その後［アップロード］ボタンをクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/e3e6a808-6305-4e6c-109b-778e18924319.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/f9bfbe1c-4801-f2ec-5754-cc16d13547d2.png)


**2-6.テストリクエストとルールの本番環境へ移行**
ディシジョンテーブルをアップロードし、設定したルールがステージング適用ルールに表示されましたので、ステージング環境で設定したルールが正確に動作するか確認し、問題なければプロダクション環境に移行します。

---
**【使用メニュー】 「ルール」グループ / 「ルール」メニュー**

画面上部から「テストリクエスト」を押下後、テストリクエストの各タブの設定を入力していき、「実行」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/29411f04-743d-3e85-0b29-d73a565fdc57.png)

今回は下表のように入力しました。

|【ディシジョンテーブルタブ】ディシジョンテーブル名選択|【設定タブ】IDと等しい|
|:---|:---|
|workflow_test|1|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/efbaf505-a0fc-61d5-d92d-9a88c0b2d1e6.png)


実行を終えると「ログ」タブに遷移し、マッチしたルールが表示されます。
下画像ように、値に対して意図したルールがマッチすることを確認できましたので、
「閉じる」をクリックし、運用ステータスを「検証完了」にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/49b9cf15-3b42-b2b8-db34-5c22876aef17.png)


運用ステータスが「検証完了」となったので、下画像のチェックボタンをクリックしルールをプロダクション環境へ移行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/3a023236-941f-b87d-b71b-05b91873cb31.png)




###3.ワークフローの実行


**3-1.curlでリクエストを送る**
クライアントPCからTera Termを使用してOASEサーバにリクエストを送信します。
リクエストはRestAPI機能を使用し、リクエストを送る際には前作業でトークンを認証情報として使用します。

コマンドの書式は下記のとおりです。

```
curl -X POST -k "https://<①ホスト名>/oase_web/event/event/eventsrequest" \
-H "accept: application/json" \
-d "{\"decisiontable\":\"<②ディシジョンテーブル名>\",\"requesttype\":\"<③リクエスト種別>\",\"eventdatetime\":\"<④イベント発生日時>\",\"eventinfo\":[\"<⑤イベント情報>\"]}" -H "Authorization: Bearer <⑥トークン>"
```

各項目の説明は以下になります。

|項目|意味|
|:---|:---|
|①ホスト名|ホスト名、もしくはIPアドレスを指定します。|
|②ディシジョンテーブル名|ディシジョンテーブル名を指定します。|
|③リクエスト種別|投入先である「1:プロダクション」「2:ステージング」のどちらかを指定します。|
|④イベント発生日時|イベント発生日時を指定します。|
|⑤イベント情報|ディシジョンテーブルで作成したルール条件の数値や、文字列を指定します。|
|⑥トークン|トークン払い出し画面にて取得した値を指定します。|


今回実行するコマンドは以下になります。

```
curl -X POST -k "https://xx.xxx.xx.xxx/oase_web/event/event/eventsrequest" -H "accept: application/json" -d "{\"decisiontable\":\"workflow_test\",\"requesttype\":\"1\",\"eventdatetime\":\"2021/11/11 00:00:00\",\"eventinfo\":[\"1\"]}" -H "Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxx"
```

**3-2.アクション履歴の確認**
「アクション履歴」画面から、送信したリクエストのアクションログや状態を確認できます。
確認すると、状態が「処理中」から「完了(正常終了)」に切り替わりました。
「操作」の虫眼鏡マークをクリックすると、実行アクションの詳細やログを確認できます。

---
**【使用メニュー】「ルール」グループ / 「リクエスト履歴」メニュー**

図のように履歴が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/e60d4d07-ba73-a500-3349-69c3d656eaf8.png)


実行ログや実行アクションのディジションテーブル名やルール名などを詳細に見ることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/1efe6a5a-b795-cd75-b520-79bf8c273efd.png)

**3-3.通知メールの確認**
リクエストを送付した数分後に通知ワークフロー作成時に設定した内容のメールを受信しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761075/c255280d-e4c5-cd06-3848-b47deb9555a6.png)

以上、新機能の1つワークフローの実行の再現でした。



#おわりに
今回はOASE v1.5.0で追加・強化されたService Now連携機能の一つ「ワークフローの実行」を見てみました。
今回はシンプルにServiceNowで作成したメール通知のワークフローをOASEから呼び出してみましたが、他にも多様な使い方ができそうです。

残り2つの新機能については、以下記事で紹介しています。

[Exastro OASE ServiceNow連携機能を使ってみた「②インシデント管理機能の強化」](https://qiita.com/ojima-n/private/0e56ea61988975fa1644)
[Exastro OASE ServiceNow連携機能を使ってみた「③承認フローに対応」](https://qiita.com/ojima-n/private/9f64dbd27891c645b8e8)



下記の関連リンクでOASE関係の記事をまとめてみたので、本記事と併せて見て頂ければ分かりやすいと思います。





#関連リンク
[Exastro OASE Learn「Service Now連携_座学編」](https://exastro-suite.github.io/oase-docs/asset/Learn_ja/OASE-servicenow_lecture_ja.pdf)
[Exastro Operation Autonomy Support Engine (公式サイト)](https://exastro-suite.github.io/oase-docs/index_ja.html)
[Exastro コミュニティサイト　OASEドキュメント一覧](https://exastro-suite.github.io/oase-docs/documents_ja.html)
[Exastro IT Automation (Exastro ITA公式サイト)](https://exastro-suite.github.io/it-automation-docs/index_ja.html)
[【随時更新】Exastroの参考になる記事をまとめてみた](https://qiita.com/ooif/items/79952398fb03ca3ec7fd)

[Exastro OASE を最速でインストールする](https://qiita.com/wreath-vine/items/46b3838ce845bba9ae4e)
[Exastro OASE でマッチポンプした話(Web+Zabbix構築編)](https://qiita.com/wreath-vine/items/d916764885ea8169cdda)
[Exastro OASE でマッチポンプした話(活用編)](https://qiita.com/wreath-vine/items/003bb12e7096ec9070cb)