Amazon Web Services ブログ
ServiceNow OT アセットワークスペースと AWS IoT SiteWise アセットモデルの統合
現在のデジタル企業環境において、組織はますます資産管理ソリューションに依存して業務を合理化しています。企業は、複数の IT システムや運用技術 (OT) システムで同じ物理資産を管理する必要に直面することがよくあります。IT チームが企業の IT 資産を追跡・管理するのに役立つサービスの 1 つが ServiceNow です。このサービスは、ハードウェアやソフトウェアの在庫管理、サービス要求、ライセンスコンプライアンス、テクノロジーリソースの完全なライフサイクルを一元的に扱います。一方、OT 向けの AWS IoT SiteWise は、企業が産業機器のデータを大規模に収集、体系化、分析できる管理サービスです。このサービスでは、ライブおよび過去の運用データを統合リポジトリにまとめることができるため、組織は生産効率の向上と資産保守の最適化に役立つデータ駆動型の意思決定ができます。
ServiceNow と AWS IoT SiteWise を一緒に使う際に組織が直面する一般的な課題は、システム間で資産情報を一貫して維持することです。ServiceNow で資産階層が更新されると、運用チームは AWS IoT SiteWise でこれらの変更を手動で複製する必要があり、重複した作業や整合性が損なわれる可能性があります。このプロセスは時間がかかり、エラーが発生しやすく、両環境で同じ資産を管理する無駄が生じます。このブログ記事では、ServiceNow と AWS IoT SiteWise 間で資産データを同期する手法を紹介します。この統合パターンを実装することで、手動による更新を排除し、エラーを減らし、IT と OT プラットフォームで資産階層を一貫して維持できます。
ソリューション概要
このソリューションでは、AWS のサービスを使用して、ServiceNow と AWS IoT SiteWise の間の自動統合を実現しています。 ServiceNow の資産管理システムで変更があった場合、自動的に AWS IoT SiteWise に反映されるため、両システムの同期が維持されます。
図 1: アーキテクチャ
図 1 は 2 フェーズのデータフローを示しています。最初のフェーズ (Ingest) では、データが ServiceNow から Amazon AppFlow を経由して Amazon Simple Storage Service (Amazon S3) に移動します。2 番目のフェーズ (Import) では、データは AWS Glue を経由し、AWS IoT SiteWise に到達する前に Amazon S3 に戻ります。 両方のフェーズでは異なる目的がサービスされています。
インジェストフェーズ
- Amazon AppFlow は、ServiceNow のテーブル (Operations Technology (OT)、OT Entity、OT Entity Type) からアセットデータを取得します。
- そのデータは、その後 Amazon S3 に parquet 形式で格納されます。
インポートフェーズ
- AWS Glue は、Parquet ファイルを AWS IoT SiteWise がインポートできる JSON 形式 に変換します。
- 変換された JSON ファイルは、Amazon S3 に保存されます。
- AWS IoT SiteWise は、アセット情報をインポートしてアセットモデルと階層を作成または更新します。
実装の概要
この投稿では、この統合を実装するための以下の段階を提示しています:
- Amazon AppFlow で ServiceNow コネクタを構成し、アセットデータを Amazon S3 に取り込みます。
- AWS Glue ジョブを作成し、データを parquet 形式から JSON 形式に変換して、AWS IoT SiteWise インポートの必須フォーマットに一致させます。
- Amazon S3 から AWS IoT SiteWise へのアセットインポートを設定します。
前提条件
このソリューションを実装する前に、次のものが必要です。
- アセットテーブルへのアクセス権を持つ ServiceNow インスタンス。この例では、次のものを使用します。
- Operations Technology (OT) (
cmdb_ci_ot
): ServiceNow からのOTデバイスレコード。これらのレコードには、名前、シリアル番号、モデル番号、メーカー、および場所情報などの基本的な属性が含まれます。 - OT Entity (
cmdb_ot_entity
): OT エンティティインスタンスとそれらの関係を定義したレコードが含まれています。また、運用階層でデバイスがどのように接続されているかを表しています。 - OT Entity Type (
cmdb_ot_entity_type
): OT エンティティ (Area、Process Cell、Unit、Equipment Module など) のタイプまたはカテゴリを定義したレコードが含まれています。また、運用階層内で許可される親子関係も定義します。
- Operations Technology (OT) (
- 3 つのテーブルがそれぞれの役割を連携して、OT アセットの全体像を提供します。
cmdb_ci_ot
は物理デバイス情報 (構成項目) を処理します。cmdb_ot_entity
はこれらのデバイスのインスタンスと関係性を管理します。cmdb_ot_entity_type
は階層構造のルールとカテゴリを定義します。
- Amazon AppFlow、Amazon S3、AWS Glue、AWS IoT SiteWise を使用するための権限を持つ AWS アカウント。
- アセットテーブルの読み取り権限を持つ system-only user の ServiceNow 認証情報。
実装
ServiceNow コネクタの構成
このセクションでは、Amazon AppFlow を設定して ServiceNow からデータを取り込み、AWS Glue でデータをカタログ化します。
Amazon AppFlow で ServiceNow コネクタを作成する
- Amazon AppFlow コンソールに移動します。
- 左側のメニューから、Connections の下の ServiceNow をコネクタのドロップダウンから選択します。
- Create connection を選択します。
- Connect to ServiceNow のポップアップで、図 2 を参照し、次の情報を入力します。
- 必要に応じて Basic Auth または OAuth2 を選択します。
- ユーザーガイド に従って必要な情報を入力します。
- OAuth2 を選択した場合は、ServiceNow インスタンスの Client ID、Client secret、Instance URL を入力します。
- Basic Auth を選択した場合は、ServiceNow インスタンスの Username、Password、Instance URL を入力します。
- すべての情報を入力したら、connect をクリックします。
図 2: ServiceNow に接続する
各テーブルごとにフローを作成します
- Amazon AppFlow コンソールに移動します。
- 左側のメニューで、Flows の下にある Create flow を選択します。
- Flow Name (例:
cmdb_ci_ot
) を入力し、図 3 を参照の上、Next を選択します。
図 3: フローを作成する
- 「ソース詳細」ダイアログボックスで (図 4 参照)、次の内容を入力します:
- 「ソース名」では、ServiceNow を選択します。
- 「前に作成した接続が ServiceNow コネクタの下で選択されていることを確認してください。参照名は、お使いの ServiceNow インスタンス名になります。この例では “dev287617” を使用しています。
- ServiceNow オブジェクトでは、Operational Technology (OT) を選択します。
- 宛先詳細ダイアログボックス (図 4 参照) に移動し、次の内容を入力します:
- 宛先名では、Amazon S3 を選択します。
- バケット詳細の下で、宛先のバケットを選択するか、新しく作成 (Amazon S3 コンソールから)します。この例ではバケットプレフィックス
cmdb_ci_ot
を使用しています。
- Next を選択します。
図 4: フローのソースと送信先
- ソース から 宛先 へのフィールド マッピング ダイアログボックスで (図 5 参照)、以下の作業を行います。
- ソース フィールド名の下で、すべてのフィールドを直接マップするを選択します。
- Next を選択し、続けて Next を選択します。
- 最後に フローを実行 を選択して完了します。
図 5: 実行フロー
すべてのテーブルに対してフローを作成する “Create flows for each table” の手順を繰り返し、他の ServiceNow オブジェクトとの接続を作成してください:
- フロー名と Amazon S3 プレフィックス:
cmdb_ot_entity
、ServiceNow オブジェクト: OT Asset。 - フロー名と Amazon S3 プレフィックス:
cmdb_ot_entity_type
、ServiceNow オブジェクト: OT Asset Type。 -
AWS Glue Crawler をセットアップし、スキーマを特定するために実行
- AWS Glue コンソールに移動します。
- 左のメニューから Data Catalog の下にある Crawlers を選択します。
- Crawlers ダイアログボックス (図 6 参照) で、Create crawler を選択します。
図 6: AWS Glue Crawlers
- Crawler 名には ServiceNow Crawler を使い、Next を選択してください。
図 7: Crawler の properties
- Add an S3 data source を選択します。
- Add an S3 data source ダイアログボックスで (図 8 を参照)、以下の手順に従います。
- データソースとして S3 を選びます。
- S3 pathとして
<your_bucket_name>
を入力します。 - Add an S3 data source を選択します。
図 8: Crawler data source
- Next を選択します。
- IAM ロールの項目で、Create new IAM role を選択してください (図 9 を参照)。
図 9: Crawler IAM Role
- ロールの名前を決めます。この例では
AWSGlueServiceRole-ServiceNowCrawler
を使用します。 - Next を選択します。
- ターゲットデータベースの下で、AWS Glue データベースを選択します。この例ではデフォルトのデータベースを使用しています。
図 10: AWS Glue データベースの選択
- Next を選択します。
- Createを選択します。
- クロールを実行します。完了するのに約 2 分かかります。
ServiceNow の Parquet データは、Amazon S3 にインポートされました。
JSON ファイルの変換
このセクションでは、AWS Glue ジョブを設定して parquet ファイルを AWS IoT SiteWise に適した JSON 形式に変換し、データを AWS IoT SiteWise にインポートします
AWS Glue ジョブを作成
- AWS Glue コンソールに移動します。
- 左側のメニューから、ETL Jobs の下にある Visual ETL を選択します。
- Create Jobで、 Visual ETL を選択します。
図 11: AWS Glue Studio
- Source ノードを作成します。青い プラス (+) ボタンを選択し (図 12 参照)、Amazon S3 を選択してください。
図 12: Visual ETL
- Name では、図 13 のようにノードの名前を任意につけてください。ここでは cmdb_ot_entity とします。
- S3 source type では、 Data Catalog table を選択してください。
- Database では、前に AWS Glue Crawler のセットアップ時に選択したターゲットデータベースを選んでください。
- Table では、最初の表
cmbd_ot_entity
を選択してください。この手順をcmdb_ci_ot
とcmdb_ot_entity_type
の各テーブルについて繰り返してください。
図 13: ソースノードの追加
アセットを AWS IoT SiteWise のインポート形式にマップする
- 図 12 に示されている青い「+」ボタンを選択して、新しい Source ノードを作成してください。
- Transform ノードを追加し、SQL Query を選択してください。
- Name には「assets」を使用してください。
- Node parents には、ソースノード
cmdb_ot_entity
とcmdb_ci_ot
を選択してください。。 - Input sources と SQL Aliases には、図 14 に示すように、それぞれ
cmdb_ot_entity
とcmdb_ci_ot
を選択してください。
図 14: アセットの変換
- SQL Query に次のクエリをコピー & ペーストしてください。
asset model をマッピングする
- 図 12 に示されている青い「+」ボタンを選択して、新しい Source ノードを作成します。
- 新しい Transform ノードを追加し、SQL Query を選択します。
- Name には「assetModels」を使用します。
- Node Parents では、ソースノード
cmdb_ot_entity_type
を選択します。 - Input sources と SQL Aliases では、図 15 に示されているように、それぞれ
cmdb_ot_entity_type
を使用します。
図 15: assetModel 変換
- SQL Query に次のクエリをコピー & ペーストしてください。
assetsと asset model を組み合わせる
- 図 12 に示されているように、青色の 「+」 ボタンを選択して新しい Source ノードを作成します。
- 新しい Transform ノードを追加し、SQL Query を選択します。
- Name には 「assetModelHierarchy」 を使用します。
- Node parents には、Source ノード assets と assetModels を選択します。
- Input sources と SQL aliases には、図 16 のように assets と assetModels を使用します。
図 16: assetModelHierarchy 変換
- SQL Query に次のクエリをコピー & ペーストしてください。
AWS Glue ジョブ の結果を AWS IoT SiteWise にインポートするために使用するよう、変換のターゲットを追加しましょう。
変換のターゲットを追加する
- 図 12 に示されている青い 「+」 ボタンを選択して、新しいソースノードを作成します。
- 新しいノード Transform を追加し、ターゲットから Amazon S3 を選択します。
- Name は何でも構いません。この例では Amazon S3 を使用しています。
- Node Parents は、ソースノード assetModelHierarchy を選択します。
- Format は JSON を選択します。
- Compression Type は None を選択します。
- S3 Target Location は
<your_destination_bucket>
を選択します。
図 17: ターゲットノードの追加
完了すると、図 18 に示すような ETL を確認できるはずです。Save を選択してください。 それから Run を選択し、完了するまで待ちます。
図 18: アセットの階層
AWS IoT SiteWise への取り込み
このセクションでは、Amazon S3 内の JSON ファイルの作成を確認し、AWS IoT SiteWise に ServiceNow のアセットをインポートします。
- まず、次の操作を行って JSON ファイルが作成されたことを確認します。
- Amazon S3 コンソールを開きます。
<your_destination_bucket>
を選択します。run-<timestamp>-part-r-00000
ファイルを選択後、アクションをクリック。- オブジェクトの名前変更を選択し、
sitewise-import.json
に変更する。AWS IoT SiteWise にインポートするためには、ファイル名に .json の拡張子を付ける必要があります。
- AWS IoT SiteWise にインポートするには、AWS IoT SiteWise コンソールを開きます。
- ナビゲーションペインで Bulk Operations を選択します。
- New Import を選択します。図 19: AWS IoT SiteWise bulk operations
- Import metadata からS3 URI に
<your_destination_bucket>
を選択し sitewise-import.json ファイルを指定します。図 20: S3 import - Import を選択し、インポートが完了するまで待ちます。
作業の検証
図 21 に示されているように、さまざまなモデルとモデルプロパティを表示できるようになりました。また、図 22、23、24 に示されているように、さまざまなアセットとアセットプロパティも表示できます。あなたの ServiceNow 階層が AWS IoT SiteWise に正常に複製されました。
図 21: AWS IoT SiteWise モデル
図 22: AWS IoT SiteWise のモデルプロパティ
図 23: AWS IoT SiteWise アセット
図 24: AWS IoT SiteWise のアセットプロパティ
クリーンアップ
このブログで説明した作業をクリーンアップするには、Amazon AppFlow コンソールに移動し、フローと ServiceNow コネクタを削除します。ServiceNow で作成したユーザーとユーザー認証情報を削除します。AWS Glue では、Crawler 、ジョブ、AWS Glue データカタログからテーブルを削除します。AWS IoT SiteWise からアセットとアセットモデルを削除します。最後に、Amazon S3 バケットからParquetと JSON 形式のファイルの両方を削除します。
まとめ
このブログでは、ServiceNow のアセットデータと AWS IoT SiteWise を統合するプロセスを紹介しました。 このプラクティスにより、組織は IT と OT のアセット管理ソリューション間で一貫したアセット情報を保持できます。 この統合を完全に自動化するには、Amazon AppFlow のフローに定期的に実行するようにスケジューリングし、AWS Glue ジョブにスケジュールのトリガーを設定します。 AWS Glue ジョブを設定する際、ETL スクリプト経由で出力ファイルに ‘.json’ 拡張子を付与することもできます。 これらの 2 つのソリューションにより、手動でのデータ入力を排除し、IT システムと OT システム間の整合性が保たれます。
AWS IoT SiteWise の詳細を知りたい場合は、AWS IoT SiteWise Developer Guide をご覧ください。
この記事は Mariaと Brent によって書かれた Integrating ServiceNow OT Asset Workspaces with AWS IoT SiteWise Asset Models の日本語訳です。この記事はソリューションアーキテクトの服部が翻訳しました。
About the authors
Maria El Khoury : AWS のソリューションアーキテクト。製造業のデジタルトランスフォーメーションを支援し、IoT やコンピュータビジョンの経験を活かし、産業用 IoT やサプライチェーン分野への AWS 適用に注力。
Brent Van Wynsberge : AWS のソリューションアーキテクト。エンタープライズ顧客のクラウド導入を支援し、 IoT や DevOps 、データ分析、コンテナ技術にも関心を持つ。
Kazunari Hattori 自動車業界担当のソリューションアーキテクト。CCoE 立ち上げや工場 IoT の導入、クラウド活用の推進に注力。AWS の IoT の技術コミュニティに所属。 第二種電気工事士。今春キャンピングカーをレンタルして秩父にキャンプに行きました。