0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【連載 第3回】ServiceNow標準機能だけで作る「Pull型」自動化連携 ― Catalog Item・Variable Set・Execution Planの準備

0
Posted at

本記事は連載「ServiceNow標準機能だけで作るPull型自動化連携」の第3回です。
第1回では必要性とビジネス価値を、第2回では全体アーキテクチャと設計方針を紹介しました。
今回から実装に入ります。まずは、ServiceNow側で依頼を受け付け、SCTASKを生成するまでの土台を作ります。

この回で作るもの

# 作るもの 役割
1 自動化ユーザーとAssignment group SCTASKの担当で自動化の状態を表す
2 APIサービスユーザー 自動化エンジンがServiceNowへアクセスするためのユーザー
3 共通Variable Set 全依頼種別で共通の入力と結果の保存先
4 個別Variable Set 依頼種別ごとの入力値と、失敗時の引継ぎ先
5 Catalog Item 依頼の入口(サービス化)
6 Execution Plan 作業の順序制御(サービスの連結)

この回の最後には、Catalog Itemから依頼を出すと、Open + autoengine1 のSCTASKが生成される状態になります。これが、次回以降で自動化エンジンがPullする対象です。

画面のメニュー名や項目名は、ServiceNowのバージョンや言語設定によって異なる場合があります。本記事は検証用インスタンスでの最小構成を前提としています。

1. 自動化ユーザーとAssignment groupを作る

第2回で説明したとおり、自動化の状態はSCTASKの State × Assigned to で表します。そのために、状態を名前で表す自動化ユーザーを作成します。

1.1 Assignment group

項目 設定値
Name autoengine1group

1.2 自動化ユーザー

User ID 意味 所属グループ
autoengine1 取得待ち、または確保済みで実行待ち autoengine1group
autoengine1running 自動化エンジンで実行中 autoengine1group

これらは「状態を表すためのユーザー」で、ログインには使いません。SCTASKのAssigned toに設定できるよう、Activeにしておきます。

設計上は、将来の拡張用に autoengine1failed(失敗)や autoengine1retry(再実行待ち)といったユーザー名も考えられます。ただし本連載では使いません。失敗時は、依頼ごとに指定した引継ぎグループへ移す方式にしています。

1.3 APIサービスユーザー

自動化エンジンがServiceNowへアクセスするためのユーザーです。状態を表すユーザーとは分けて作成します。

項目 設定値
User ID svc_autoengine1_api
用途 Table APIとScripted REST APIの呼び出し

このユーザーには、次の操作ができる権限が必要です。

  • SCTASK、RITM、REQ、Catalog Variableの参照
  • SCTASKのState、Assigned to、Assignment group、Work Notesの更新
  • RITMの隠し変数(execution_result_json)の更新

必要なロールは、インスタンスのACL設定によって異なります。itilロールで足りるかどうかは、実機で確認してください。本番環境では、最小権限の原則に沿ってロールとACLを設計してください。

2. 共通Variable Setを作る

全Catalog Itemで共通して使う変数です。

変数名 種類 表示 デフォルト値 用途
target_host Single Line Text 表示 (空白) 作業対象のホスト
execution_result_json Single Line Text 非表示 [] 自動化結果の履歴(JSON配列)
execution_result_display Multi Line Text 表示 (空白) 依頼者向けの結果サマリー

ポイントは次の2つです。

  • execution_result_jsonのデフォルト値は[]にします。 結果登録APIは、この配列にSCTASKごとの結果を追記していきます。未設定や空文字の場合も[]として扱います。
  • execution_result_jsonは状態の判定には使いません。 状態はあくまでSCTASKの State × Assigned to で表し、この変数は結果データの保存専用にします。

3. 個別Variable Setを作る

依頼種別ごとに固有の入力値を定義します。例として「Linuxログ取得」の個別Variable Setを作ります。

変数名 用途
failure_assignment_group 自動化が技術的に失敗したときの引継ぎ先グループ(Reference型: sys_user_group)
log_path 取得対象のログパス
destination 配置先の識別子
description 依頼の補足(自動化では使わない場合もある)

3.1 failure_assignment_groupは全ての個別Variable Setに必ず用意する

failure_assignment_groupは、全依頼種別に共通する変数です。ただし、引継ぎ先は依頼種別ごとに異なるため、個別Variable Set側に必ず用意するルールにしています。

項目 設定値
Type Reference
Reference sys_user_group(Group)
Default value 引継ぎ先グループの sys_id を手入力
表示 依頼者に選ばせない場合は非表示

引継ぎ先グループのsys_idは、グループのレコードを開き、フォームのヘッダーメニューから「Copy sys_id」で取得できます。

Default value: 0a1b2c3d4e5f60718293a4b5c6d7e8f9   ← 運用チームのグループのsys_id(例)

Reference型にしておくことで、ServiceNow側で参照先が存在するグループかどうかを判定できます。結果登録APIは、この変数を使ってSCTASKのAssignment groupを変更します。値が未設定、参照先のグループが見つからない、またはグループが非アクティブの場合は、SCTASKを更新せずにエラーを返します(第6回で解説します)。

sys_idはインスタンスごとに異なります。開発環境から本番環境へ移行するときは、Default valueのsys_idを移行先のグループに合わせて設定し直してください。

3.2 automation_typeのような変数は作らない

「どの自動化処理を実行するか」を表す変数は作りません。処理のキーは、次に説明するExecution PlanのTask Templateに持たせます。
既に同様の変数がある場合は、Catalog Script、API、自動化エンジンのどこからも参照されていないことを確認してから削除します。

4. Catalog Itemを作る

依頼種別ごとにCatalog Itemを作ります。

項目 設定例
Name Linuxログ取得
Variable Sets 共通Variable Set、Linuxログ取得用の個別Variable Set
Execution Plan 次章で作成するExecution Plan

Catalog ItemにWorkflowやFlowを設定していると、Execution Planが使われない場合があります。本連載ではExecution Planで順序を制御するため、WorkflowやFlowは設定しません。インスタンスでの挙動は実機で確認してください。

5. Execution Planを作る

5.1 Task Templateの設定

自動化エンジンに実行させる作業のTask Templateを、次のように設定します。

フィールド 設定例
Short description REQTYPE_LINUXLOG_ACTION1
Description Automation Execution
Assignment group autoengine1group
Assigned to autoengine1
State Open

Short descriptionは、自動化エンジンが処理を選ぶためのキーです。人が読む説明文ではなく、機械が判読できる値にします。

<REQUEST_TYPE>_<ACTION_NUMBER>

REQTYPE_LINUXLOG_ACTION1   Linuxログ取得の作業1
REQTYPE_LINUXLOG_ACTION2   Linuxログ取得の作業2
REQTYPE_LSOF_ACTION1       lsof取得の作業1

人向けの説明はDescriptionに書きます。キーは自動化エンジン側の処理と1対1に対応させ、重複しないように管理します。

5.2 人の作業と複数の自動化エンジンを組み合わせる

Execution Planは、前のSCTASKが正常に完了すると次のSCTASKを生成します。各Task Templateの担当を変えるだけで、人の作業と自動化の作業を1つの依頼の中に並べられます。

順序 Short description Assignment group Assigned to 実施者
1 REQTYPE_LINUXLOG_ACTION1 autoengine1group autoengine1 自動化エンジン1
2 例: 取得ログの確認 運用チームのグループ (空欄) 人
3 REQTYPE_LINUXLOG_ACTION2 autoengine2group autoengine2 自動化エンジン2
  • 人が担当する作業は、通常のSCTASKとして運用チームのキューに入ります。
  • 自動化エンジン2を使う場合は、1章と同じ要領でautoengine2group、autoengine2、autoengine2runningを作成します。
  • 今は人が担当している作業2も、自動化できた時点でTask Templateの担当を自動化ユーザーに変えるだけで切り替えられます。Catalog Itemは変わりません。

第7回で紹介する、進捗をRITMへ転記するBusiness Ruleは、サンプルではautoengine1系のユーザー名で判定しています。複数の自動化エンジンを使う場合は、判定条件を拡張してください。

6. 動作確認

Catalog Itemから依頼を1件出し、次の点を確認します。

  • RITMが作成され、変数に入力値が保存されている
  • execution_result_jsonが[]になっている
  • failure_assignment_groupに引継ぎ先グループが設定されている(表示名でグループ名が見える)
  • SCTASKが1件生成されている
  • SCTASKのShort descriptionがREQTYPE_LINUXLOG_ACTION1になっている
  • SCTASKのStateがOpen、Assignment groupがautoengine1group、Assigned toがautoengine1になっている
  • 1件目のSCTASKを手動でClosed Completeにすると、次のSCTASKが生成される(複数ステップの場合)

最後の項目では、Closed Completeにしたときに次のステップへ進むことを必ず確認してください。結果登録APIは、自動化が成功したときにSCTASKをClosed Completeへ更新します。ここが期待どおりに動かないと、Execution Planが先に進みません。

Stateの内部値(Open=1、In Progress=2、Closed Complete=3など)は、インスタンスによって異なる場合があります。後続の回で作るAPIやスクリプトの値と合っているか、ここで確認しておいてください。

次回予告

次回は、自動化エンジン側からTable APIで実行待ちのSCTASKを取得し、確保する部分を実装します。Open + autoengine1 の検索条件と、Stateを2に更新して確保する方法を紹介します。

連載記事


※ 本記事の内容は個人の見解であり、所属する組織の公式な見解ではありません。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?