ServiceNow への SFTP からの CMDB インポート

このページで、SSHファイル転送プロトコル(SFTP)サーバからServiceNowへのデータインポートの手順を確認できます。

Nexthinkは、構成管理データベース(CMDB)へのデータインポートには、ServiceNowの既定の手順を使用することを推奨しています。

以下に公式ServiceNowドキュメントを参照用として示します:

さらに、Nexthinkは参考のため、更新セットの形で構成変更のグループを提供します。 このアップデートセットの詳細についてはこちら:

前提条件

Nexthink SFTPインポートコネクタにはNexthinkクラウドプラットフォームインスタンスが必要です。 このシステムは、ServiceNowがデータソースとして消費できるようにNexthinkプラットフォームのアウトバウンドインテグレーションを使用して生成され、SFTPサーバに保存されたCSVファイルとしてデータをインポートします。

スムーズなプロセスのためには、以下のコンポーネントが必要です:

  • Nexthinkクラウドインスタンス。

  • SFTPサーバ。

  • ServiceNowインスタンス。

  • SFTPサーバにCSVファイルをエクスポートするために使用される「アウトバウンドコネクタ」セクションを用いたデータエクスポーター。

  • CMDB戦略

このインポートプロセスに関与するユーザは、対象テーブルのACLルールに準拠するために必要なロールを持っていなければなりません。

ServiceNowのメインコンポーネント

データソース

プロセスの最初のステップは、SFTPサーバーからデータを取得し、そのデータでインポートセットテーブルを埋めるためのアーティファクトを作成することです。

詳細についてはServiceNowの公式ドキュメントを参照してください: データソース | ServiceNow

データソースの例

データソースの作成方法

データソースを作成するには、システムインポートセット > 管理 > データソースモジュールに移動し、新規 ボタンをクリックします。

次の表は、アーティファクトの各フィールドにデータを構成する方法を説明します。

フィールド
詳細

名前

任意の名前を設定できます。

インポートセットテーブルラベル

任意のテーブルラベルを設定できます。

インポートセットテーブル名

前のフィールドの値に基づいて自動的に設定されます。

タイプ

SFTPを取得方法として使用するには、値を「File」に設定する必要があります。

形式

CSV

ファイル取得方法

SFTP

サーバー

SFTPのDNS情報

ポート

SFTPのポート。 デフォルトは「22」です。 SFTPサーバー設定でカスタマイズされている場合は、異なるポートを設定します。

ファイルパス

サーバー上でシステムがファイルを格納する絶対パス。 ファイル名を含める必要があります。例: /folder/folder/file_name.csv.

ユーザー名

SFTPのユーザー名。

[パスワード]

SFTPのユーザーパスワード。

CSVの区切り文字

システムが異なる列に分割する際に使用するファイル内の区切り文字。

データソースを設定した後、関連リンクの「20件のレコードをテストロード」をクリックして接続性をテストします。 このユーティリティを使用して、提供されたすべての詳細が正しいことと、システムがServiceNowインポートセットテーブルにSFTPサーバーからデータをインポートしたことを確認します。

テストロードの期待結果

参考までに、更新に含まれているデータソースの例をここで見つけてください。

ServiceNowインポート via SFTP インストレーションガイド | スケジュールインポート設定

変換マップ

変換マップは、インポートセット内のフィールドと既存のServiceNowテーブル内のフィールドとの関係を決定するフィールドマップのセットです。 このプロセスの部分では、インポートセットにインポートされたデータを変更、分割、または変換し、要件に従って最終テーブルに結果データを保存することも可能です。

変換マップの作成方法

システムはすべての変換マップをテーブル_sys_transform_map_で作成します。 システムはそれらを直接テーブル形式で作成することができます。 しかし、データソースから始めて、それにリンクされる変換マップを作成することをお勧めします。

データソースフォームの一番下に関連リストがあり、「transforms」と呼ばれています。 このタブをクリックして_新規_ボタンをクリックすると、システムは新しい変換マップを作成するためのフォームにリダイレクトします。

変換マップの例

新しいレコードフォームでは、次のフィールドを入力する必要があります。

フィールド
詳細

名前

任意の名前を設定します。

ソーステーブル

データソース用に作成されたインポートセットテーブルを設定します。

アクティブ

このフィールドのチェックボックスをオンにします。

ターゲットテーブル

システムがデータを挿入する最終CMDBテーブル。

上記の詳細を設定した後、レコードを保存し、ページのリロードを待ち、関連リンク_Mapping assist_を使用してフィールドマッピングを作成します。

フィールドマップアシスタント

このツールはフィールドマップ作成のタスクを容易にします。 すべてのマッピングを関連リスト_Field Map_を使用してゼロから作成する代わりに、この目的には_mapping assist_の使用を強くお勧めします。 必要に応じて、関連リスト_Field Map_で微調整を行います。

このツールを使用するには、左の列(ソース:データソース)と右の列(ターゲットテーブル)のフィールドを、表示画面の中央に位置する_Field Map_列に移動させます。 次に、ソースフィールドとターゲットフィールドの順序を列の同一行に沿って合わせ、正しくマッピングされていることを確認します。

たとえば、ソースフィールド_device.name_をコンピュータテーブルのフィールド_Name_にマッピングするには、両フィールドがフィールドマップの同一行にあることを確認してください。

最後に、システムが将来インポートしようとする際にレコードを更新するように、合流フィールドを設定することが重要です。 たとえば、システムがCIsを識別するためにテーブルでフィールド_name_を使用している場合、重複を作成しないことが重要です。 これを避けるには、変換マップ設定でそのフィールドを合流として設定し、システムがターゲットテーブルのレコードを更新し、再度挿入しないようにします。

コレスフィールドとして設定された名前フィールド

コレスフィールドの挙動についての詳細はここで確認できます:

コレスを使用したレコード更新 | ServiceNow

カスタム変換の作成方法

SFTPサーバーからの着信データが期待される形式でない場合や、挿入されたデータの全部ではなく一部のみを保存する必要がある場合もあります。 これらの場合、_mapping assist_は十分ではなく、カスタム変換を作成する必要があります。

次のセクションでは、カスタム変換を作成する方法の詳細を提供します。 追加情報が必要な場合は、公式のServiceNowドキュメントをご覧ください:

カスタム変換を作成するには、_Use Source Script_ボックスをチェックしてスクリプトを使用し、ソースフィールドを使用します。

これをアクティベートすると、ソーススクリプトエディタが表示されます。

ソーススクリプトエディタ

ここでターゲットフィールドに挿入される値を計算するために任意のJavaScriptコードを追加することができます。 返されるように設定されたものはすべてフィールドマップのターゲットフィールドに挿入されることに注意してください。

これとは別に、インポートセットテーブルのすべての列にこのスクリプトを通じてsourceオブジェクトを使用してアクセスできることが最も便利な部分です。 このため、このオブジェクトをスクリプトの基盤として使用することが可能です。

更新セットに含まれている変換マップの参考例はこちらを参照してください。

ServiceNowインポート via SFTP インストレーションガイド | 変換マップの設定

カスタム変換サンプル

Nexthinkからインポートされることがあるフィールドの一つは、ディスクスペース情報です。 NQLデータモデル参照に記載されているように、フィールド_system_drive_free_space_はデータをバイト形式で保存します。 しかし、この情報を保存するためのコンピュータテーブルのターゲットフィールドでは、データがGB単位であることが期待されています。 この状況を解決するには、カスタムスクリプトを使用してください。

前のセクションで説明したように、フィールドマップ設定フォームに移動し、_Use Source Script_ボックスを有効にします。 エディタが表示されたら、次のスクリプトを設定します。

answer = (function transformEntry(source) {
 var value = source.u_disk_capacity;
 return value / Math.pow(1024, 3);
})(source);

上記のスクリプトは、Nexthinkから受信したデータ(バイト単位)を変数_value_に保存し、その値を3回にわたって1024で割った値を返すようになります。 言い換えれば、バイトをGBに変換します。

スケジュールインポート

スケジュールされたインポートは、システムが指定されたインポート操作を定期的に実行することを示します。 デフォルトでは、統合によって提供されるスケジュールされたインポートは非アクティブです。別のスクリプトがプログラム的にそれらを実行します。 詳細は以下のセクションで確認してください。

スケジュールインポートの作成方法

スケジュールインポートを作成するには、システムインポートセット > 管理 > スケジュールインポートモジュールに行き、新しいボタンをクリックします。 これにより、新しいレコードフォームが表示されます。

新しいスケジュールインポートフォーム

新しいレコードフォームでは、次のフィールドを入力します。

フィールド
詳細

名前

任意の名前を設定します。

データソース

データをインポートするためにデータソースをスケジュールします。

アクティブ

このフィールドのチェックボックスをオンにします。

実行

待望のインポートが実行される頻度です。 このフィールドに設定される選択肢に応じて、以下のフィールドが異なります。

上記の最も重要な設定は、_active_設定です。 このフィールドをアクティブにすると、_run_フィールドの下にスケジュールされたインポートの日付または間隔の詳細を設定するための新しいフィールドが表示されます。 これらのオプションの詳細については、ServiceNow ドキュメンテーションをご覧ください。

詳しくは、更新セットに含まれているスケジュールされたインポートをここで見つけてください。

ServiceNow インポート via SFTP インストレーションガイド | スケジュールインポート設定

インポート手順の実行

データをインポートするために2つのメイン方法があります:

手動実行

データインポート手順を手動で実行するには、インポートセットを作成し、インポートセットテーブルをNexthinkデータで埋める必要があります。

この目的のため、データソースに移動し、「すべてのレコードをロード」関連リンクをクリックします。

すべてのレコードをロード関連リンク

システムはインポートステータスフォームにリダイレクトします。

期待される結果

成功しました以外の結果が表示された場合は、返されたエラーを確認して設定を再確認し、データソース設定を調整してください。

このフォームで、変換を実行リンクをクリックし、インポートセットと変換マップがどこにデータをインポートするかを選択します。

変換ボタンをクリックすると、変換が完了し、再度インポートステータスフォームが表示されます。

ステータスに加えて、_インポートセット、変換履歴_や_インポートログ_に移動して、システムがすべてのCIを期待通りにインポートしたことを確認するためのログにアクセスできます。

スケジュール実行

インポートセット実行をスケジュールするには、フィルターナビゲータ System Import Sets → Administration → Scheduled Imports に移動します。新規をクリックし、以下のようにフォームを入力します。

次の3つのフィールドを正確に記入することが重要です:

フィールド
詳細

データソース

最初に作成したデータソースを使用してください。

実行者

システムはここにリストされたユーザーの代わりにスケジュールされたインポートを実行します。 このユーザーに割り当てられたロールはプロセス全体に影響を与える可能性があります。

実行

インポートを実行したい頻度を選択します。

アクティブボックスをチェックすると、システムが表示する列は「実行」フィールドで選択したオプションに応じて異なります。

  • 月次

  • 毎週

  • 毎日

  • 定期的

スケジュールについての詳細は こちらのリンクをクリックしてください。

よくある質問 (F.A.Q.)

CIタイプをインポートするには?

まず、必要なNexthinkデータを含むCSVファイルを生成し、SFTPサーバーに保存します。

Nexthinkは、_Nexthink Infinity > Integrations > Outbound connector_セクションでデータエクスポーターを作成することを推奨しています。 こちらのガイド(https://docs.nexthink.com/platform/ja/latest/data-export)を参考にして、例えば下記クエリを使用してワークステーションに関連する列をエクスポートすることができます。

devices
| where hardware.machine_serial_number != "" and (hardware.type == laptop or hardware.type == desktop)
| include cpus
| compute num_of_cores = number_of_cores.count(), number_of_cpus = count(), freq = frequency.sum()
| include disks
| compute disk_capacity = capacity.sum()
| list group_name, entity, hardware.manufacturer, hardware.model, operating_system.architecture, hardware.machine_serial_number, name, hardware.memory, num_of_cores, number_of_cpus, freq ,disk_capacity, operating_system.name, operating_system.build 

一度CSVファイルをSFTPサーバーに保管したら、データソースの作成方法セクションで説明されているようにデータソースを設定し、インポート手順を実行セクションで説明されているように、スケジュールまたは手動でインポートを実行します。

データをインポートする際の参照およびsys_choiceフィールドの動作はどうなりますか?

この種のフィールドは最初、変換マップ構成に従って単に挿入される他のフィールド(文字列、整数など)とは異なる動作をします。

これらのフィールドは実際には別のテーブルの異なるCIを参照しているため、システムは、記録参照されたレコードが挿入される前に存在することを期待しています。

アプリケーションの動作は1つのパラメーターに応じて異なります:

  • フィールドマップの設定_Choice action_がCreateに設定されている場合、システムは参照テーブル内に新しい選択肢またはレコードを作成します。

  • フィールドマップの設定_Choice action_がIgnoreに設定されている場合、システムはソーステーブルからの新しい値を無視し、CIが挿入または更新されても参照フィールドは空のままです。

  • フィールドマップの設定_Choice action_がRejectに設定されている場合、システムは新しい値を含むレコード全体をスキップし、インポートプロセスは次の行に進みます。

CI関係をインポートするには?

まず、必要なNexthinkデータを含むCSVファイルを生成し、SFTPサーバーに保存します。

_Nexthink Infinity > Integrations > Outbound connector_セクションでデータエクスポーターを作成することをお勧めします。 こちらのガイドを使用して、ワークステーションとソフトウェアの関係に関連する列をエクスポートするための例として、次のクエリを使用して、CSVファイルをSFTPサーバーにエクスポートできます。

パッケージインストール済みパッケージ
| summarize c1=count() by package.name, package.version , device.name
| リスト package.name, package.version , device.name

CSVファイルをSFTPサーバーに保存したら、データソースの作成方法セクションに従ってデータソースを構成し、スケジュールまたは手動でインポートスケジュールの実行をインポート手順の実行で説明するように設定します。

ServiceNowでの関係はどのように機能しますか?

関係のために設定されたテーブルのフィールドは、外部テーブルを指す参照フィールドです。 たとえば、cmdb_rel_person テーブルには他のテーブルを参照する2つのフィールドがあります。

  • CI → 参照 cmdb_ci.

  • ユーザー → 参照 sys_user.

そのため、要件に応じてフォロースルーする戦略を決定する必要があります。

  1. 関係の欠けているCIを作成したい場合 変換で設定されたフィールドマップで_選択アクション_設定を作成に設定します。

  2. 関係は作りたいが、参照されるCIは作成したくない場合 変換で設定されたフィールドマップで_選択アクション_設定を無視に設定します。 これにより、キーの1つが空の関係が作成されます。 このオプションは推奨されません。

  3. どのCIも欠けている場合に関係を作成したくない場合 フィールドマップで_選択アクション_設定を拒否に設定している場合、新しい値を含むレコード全体がスキップされ、インポートプロセスは次の行に移行します。

他のインポートメカニズムが同時に動作している場合はどうなりますか?

異なるコネクタがCMDBテーブルにデータをインポートしている場合は、コアレースフィールドを正確に設定していることを確認してください。 変換マップの作成方法セクションで説明されているように、コネクタの動作はコアレースフィールドによって決まります。 次に、ターゲットテーブルでコアレースフィールドの値が既に存在する記録が見つかった場合、システムは最終インポートセットの情報でCIを更新します。

なお、この手順ではシステムはIREエンジンを一切使用しません。 つまり、システムは異なるソースから挿入されたデータをマージするために、いかなる識別ルールも使用しません。

このプロセスを自動的に実行できますか?

残念ながら、現時点では不可能です。

制約の理由は、システムがデータをインポートする前にデータソースのファイルパスを更新する必要があることにあります。 将来のリリースでその問題を解決するための自動メカニズムが提供される可能性があります。

SFTPサーバーに保存されたCSVファイルをリストするファイルリスト取得ステップを使用して、フローを呼び出すアクションで追加の自動化レベルを追加することが可能です。

システムがファイルを2回インポートした場合どうなりますか?

ファイルパスを更新せずに2回インポートプロセスをスケジュールした場合、システムはCMDBに同じ情報を挿入しようとします。 その結果、最初のインポートセットではすべてのレコードが挿入/更新され、ターゲットテーブルに既に同一の情報がある場合、2番目のインポートセットはすべてのレコードを無視またはスキップします。

将来のリリースで、データソースのファイルパスを手動で更新する手順を避けるための自動メカニズムが提供されます。

Last updated

Was this helpful?