Integrating ServiceNow OT Asset Workspaces with AWS IoT SiteWise Asset Fashions

Integrating ServiceNow OT Asset Workspaces with AWS IoT SiteWise Asset Fashions


In as we speak’s digital enterprise panorama, organizations more and more depend on asset administration options to streamline their operations. Firms usually discover themselves managing the identical bodily belongings throughout a number of IT and operational know-how (OT) programs. One of many companies that assist IT groups monitor and handle enterprise IT belongings is ServiceNow. This service handles every little thing from {hardware} and software program stock to service requests, license compliance, and the whole lifecycle of know-how sources. For OT, AWS IoT SiteWise is a managed service that allows firms to gather, set up, and analyze industrial gear knowledge at scale. This service gives a unified repository of stay and historic operational knowledge, empowering organizations to make data-driven selections that improve manufacturing effectivity and optimize asset upkeep.

A standard problem that organizations face utilizing ServiceNow and AWS IoT SiteWise collectively is sustaining constant asset info throughout their programs. When an asset hierarchy is up to date in ServiceNow, operations groups should manually replicate these modifications in AWS IoT SiteWise, resulting in duplicate work and potential inconsistencies. This course of can also be time-consuming, error-prone, and creates pointless overhead to handle the identical belongings in each environments.This weblog submit presents an strategy to synchronize asset knowledge between ServiceNow and AWS IoT SiteWise. By implementing this integration sample, you possibly can remove handbook updates, scale back errors, and keep constant asset hierarchies throughout your IT and OT platforms.

Resolution overview

This resolution makes use of AWS companies to create an automatic integration between ServiceNow and AWS IoT SiteWise. When modifications happen in ServiceNow’s asset administration system, they’ll routinely stream by to AWS IoT SiteWise, making certain each programs stay synchronized.

Architecture

Determine 1: Structure

Determine 1 exhibits a two-phase knowledge stream. Within the first part (Ingest), knowledge strikes from ServiceNow by Amazon AppFlow to in Amazon Easy Storage Service (Amazon S3). Within the second part (Import), the information flows by AWS Glue and again to Amazon S3 earlier than reaching AWS IoT SiteWise. Each phases serve completely different functions:

Ingest part:

  • Amazon AppFlow pulls asset knowledge from ServiceNow tables: Operations Expertise (OT), OT Entity, OT Entity Kind.
  • The information is then saved in Amazon S3 and in parquet format.

Import part:

  • AWS Glue transforms the parquet recordsdata to a JSON format that AWS IoT SiteWise can import.
  • Remodeled JSON recordsdata are saved in Amazon S3.
  • AWS IoT SiteWise imports the asset info to create or replace asset fashions and hierarchies.

Implementation overview

This submit presents the next levels to implement this integration:

  1. Configure the ServiceNow connector in Amazon AppFlow to ingest asset knowledge into Amazon S3.
  2. Create AWS Glue jobs to remodel the information from parquet to JSON to match the required AWS IoT SiteWise import format.
  3. Arrange AWS IoT SiteWise asset import from Amazon S3.

Conditions

Earlier than implementing this resolution, you’ll want:

  • A ServiceNow occasion with entry to your asset tables. On this instance, we use:
    • Operations Expertise (OT) (cmdb_ci_ot): Accommodates operational know-how machine information from ServiceNow. These information embody primary attributes like identify, serial quantity, mannequin quantity, producer, and site info.
    • OT Entity (cmdb_ot_entity): Accommodates information that outline the OT entity situations and their relationships. It additionally represents how units join to one another within the operational hierarchy.
    • OT Entity Kind (cmdb_ot_entity_type): Accommodates information that outline the categories or classes of OT entities (reminiscent of, Space, Course of Cell, Unit, and Gear Module). It additionally defines the allowed parent-child relationships within the operational hierarchy.
  • Three tables work collectively to offer a whole image of OT belongings:
    • cmdb_ci_ot handles the bodily machine info (configuration Objects).
    • cmdb_ot_entity manages the situations and relationships of those units.
    • cmdb_ot_entity_type defines the hierarchy construction guidelines and classes.
  • An AWS account with permissions to make use of Amazon AppFlow, Amazon S3, AWS Glue, and AWS IoT SiteWise.
  • ServiceNow credentials for a system-only person with permission to learn your asset tables.

Implementation

Configure the ServiceNow connector

On this part, you’ll arrange Amazon AppFlow to drag knowledge from ServiceNow and configure AWS Glue to catalog the information.

Create a ServiceNow connection in Amazon AppFlow

  1. Navigate to the Amazon AppFlow console.
  2. Within the left menu, below Connections, select ServiceNow from the Connectors dropdown.
  3. Select Create connection.
  4. Within the Connect with ServiceNow pop up, see Determine 2, enter the next:
    1. Choose both Primary Auth or OAuth2 as wanted.
    2. Fill within the obligatory info in response to the person information.
      1. For those who select OAuth2 fill within the Shopper ID, Shopper secret and Occasion URL on your ServiceNow Occasion.
      2. For those who select Primary Auth fill within the Username, Password and Occasion URL on your ServiceNow Occasion.
    3. Click on join as soon as all info is stuffed in.

Connect to ServiceNow

Determine 2: Connect with ServiceNow

Create flows for every desk

  1. Navigate to the Amazon AppFlow console.
  2. Within the left menu, below Flows, select Create stream.
  3. Enter a Circulate Title (for instance: cmdb_ci_ot), see Determine 3, and choose Subsequent.

Create flow

Determine 3: Create stream

  1. Within the Supply particulars dialog field, see Determine 4, enter the next:
    1. For Supply Title, choose ServiceNow.
    2. Make sure that the connection you created earlier is chosen below ServiceNow connection. The reference could have the identify of your ServiceNow occasion, this instance makes use of “dev287617”.
    3. For ServiceNow object, choose Operational Expertise (OT).
  2. Navigate to the Vacation spot particulars dialog field, see Determine 4, and enter the next:
    1. For Vacation spot identify, select Amazon S3.
    2. Beneath Bucket particulars, both select your vacation spot bucket or create one by the Amazon S3 console. This instance makes use of the bucket prefix cmdb_ci_ot.
  3. Select Subsequent.

Flow source and destination

Determine 4: Circulate supply and vacation spot

  1. Within the Supply to vacation spot area mapping dialog field, see Determine 5, enter the next:
    1. Beneath Supply area identify, select Map all fields immediately.
    2. Select Subsequent after which select Subsequent once more.
    3. End by selecting Run stream.

Run flow

Determine 5: Run stream

Repeat the “Create flows for every desk” process to create a stream for every of your tables to create connections with the opposite ServiceNow objects:

  1. Circulate identify and Amazon S3 prefix: cmdb_ot_entity, ServiceNow object: OT Asset.
  2. Circulate identify and Amazon S3 prefix: cmdb_ot_entity_type, ServiceNow object: OT Asset Kind.

Arrange and run AWS Glue Crawler to determine the schema

  1. Navigate to AWS Glue console.
  2. Within the left menu, below Information Catalog, select Crawlers.
  3. Within the Crawlers dialog field, see Determine 6, select Create crawler.

AWS Glue crawlers

Determine 6: AWS Glue crawlers

  1. For Crawler identify, use ServiceNow Crawler and select Subsequent.

Crawler properties

Determine 7: Crawler properties

  1. Select Add a knowledge supply.
  2. Within the Add knowledge supply dialog field, see Determine 8, enter the next:
    1. For Information supply, select S3.
    2. For S3 path, select .
    3. Choose Add an S3 knowledge supply.

Crawler data source
Determine 8: Crawler knowledge supply

  1. Select Subsequent.
  2. Beneath IAM position, choose Create new IAM position, see Determine 9.

Crawler IAM Role

Determine 9: Crawler IAM Position

  1. Select a reputation for the position. On this instance, we use AWSGlueServiceRole-ServiceNowCrawler.
  2. Choose Subsequent.
  3. Beneath Goal database, select an AWS Glue Database. This instance makes use of the default database.

AWS Glue Database

Determine 10: AWS Glue Database Choice

  1. Select Subsequent.
  2. Select Create.
  3. Run the crawler. It ought to take round two minutes to finish.

The ServiceNow parquet knowledge has now been efficiently imported into Amazon S3.

Rework the JSON recordsdata

On this part, you’ll arrange the AWS Glue job to remodel the parquet recordsdata to JSON format appropriate for AWS IoT SiteWise and import the information into AWS IoT SiteWise.

Create AWS Glue Job

  1. Navigate to AWS Glue console.
  2. Within the menu to the left, below ETL Jobs, select Visible ETL.
  3. In Create Job, choose Visible ETL.

AWS Glue studio

Determine 11: AWS Glue studio

  1. Create a Supply node. Choose the blue plus (+) button, see Determine 12, and choose Amazon S3.

Visual ETL

Determine 12: Visible ETL

  1. For Title, select any identify for the node, see Determine 13. On this instance, we’ll use cmdb_ot_entity.
  2. For S3 supply kind, choose Information Catalog desk.
  3. For Database, select the goal database you beforehand chosen when establishing your AWS Glue Crawler.
  4. For Desk, select the primary desk cmbd_ot_entity. Repeat this step for every of the tables: cmdb_ci_ot and cmdb_ot_entity_type.

Adding source node

Determine 13: Including supply node

Map belongings to the AWS IoT SiteWise import format

  1. Create a brand new Supply node by choosing the blue “+” button as proven in Determine 12.
  2. Add a Rework node and choose SQL Question.
  3. For Title, use “belongings”.
  4. For Node mother and father, select the supply nodes cmdb_ot_entity and cmdb_ci_ot.
  5. For Enter sources and SQL Aliases, select cmdb_ot_entity and cmdb_ci_ot for every, as proven in Determine 14.

assets transform

Determine 14: belongings rework

  1. For SQL Question, copy and paste the next question:
SELECT DISTINCT
    mum or dad.sys_id as assetExternalId,
    mum or dad.identify as assetName,
    mum or dad.ot_asset_type as assetModelExternalId,
    COLLECT_LIST(
        CASE 
            WHEN baby.sys_id IS NOT NULL THEN 
                STRUCT(
                    array_join(array(mum or dad.ot_asset_type, baby.ot_asset_type), '-') as externalId,
                    baby.sys_id as childAssetExternalId
                )
        END
    ) as assetHierarchies,
    (
        CASE 
            WHEN ot.sys_id IS NOT NULL THEN 
                array(
                    STRUCT('identify' as externalId, ot.identify as attributeValue),
                    STRUCT('serial_number' as externalId, ot.serial_number as attributeValue),
                    STRUCT('producer' as externalId, ot.producer as attributeValue),
                    STRUCT('model_number' as externalId, ot.model_number as attributeValue),
                    STRUCT('firmware_version' as externalId, ot.firmware_version as attributeValue),
                    STRUCT('hardware_version' as externalId, ot.hardware_version as attributeValue),
                    STRUCT('asset_tag' as externalId, ot.asset_tag as attributeValue),
                    STRUCT('class' as externalId, ot.class as attributeValue),
                    STRUCT('atmosphere' as externalId, ot.atmosphere as attributeValue),
                    STRUCT('short_description' as externalId, ot.short_description as attributeValue)
                )
            ELSE array()
        END
    ) as assetProperties
FROM cmdb_ot_entity as mum or dad
LEFT JOIN cmdb_ci_ot as ot
    ON mum or dad.ot_asset = ot.sys_id
LEFT JOIN cmdb_ot_entity as baby
    ON mum or dad.sys_id = baby.mum or dad
GROUP BY mum or dad.sys_id, mum or dad.identify, mum or dad.ot_asset_type, ot.sys_id, ot.identify, ot.serial_number, ot.producer, ot.model_number, ot.firmware_version, ot.hardware_version, ot.asset_tag, ot.class, ot.atmosphere, ot.short_description

Map the asset mannequin

  1. Create a brand new Supply node by choosing the blue “+” button as proven in Determine 12.
  2. Add a brand new Rework node and choose SQL Question.
  3. For Title, use “assetModels”.
  4. For Node Mother and father, select the supply node cmdb_ot_entity_type.
  5. For Enter sources and SQL Aliases, use cmdb_ot_entity_type for every, as proven in Determine 15.

assetModel transform

Determine 15: assetModel rework

  1. For SQL Question, copy and paste the next question:
SELECT DISTINCT
    mum or dad.sys_id as assetModelExternalId,
    mum or dad.label as assetModelName,
    (
        CASE 
            WHEN mum or dad.ot_table IS NOT NULL THEN 
                from_json(
                '[{"dataType":"STRING","externalId":"name","name":"Name","type":{"attribute":{"defaultValue":"-"}},"unit":"-"},{"dataType":"STRING","externalId":"serial_number","name":"Serial Number","type":{"attribute":{"defaultValue":"-"}},"unit":"-"},{"dataType":"STRING","externalId":"manufacturer","name":"Manufacturer","type":{"attribute":{"defaultValue":"-"}},"unit":"-"},{"dataType":"STRING","externalId":"model_number","name":"Model Number","type":{"attribute":{"defaultValue":"-"}},"unit":"-"},{"dataType":"STRING","externalId":"firmware_version","name":"Firmware Version","type":{"attribute":{"defaultValue":"-"}},"unit":"-"},{"dataType":"STRING","externalId":"hardware_version","name":"Hardware Version","type":{"attribute":{"defaultValue":"-"}},"unit":"-"},{"dataType":"STRING","externalId":"asset_tag","name":"Asset Tag","type":{"attribute":{"defaultValue":"-"}},"unit":"-"},{"dataType":"STRING","externalId":"category","name":"Category","type":{"attribute":{"defaultValue":"-"}},"unit":"-"},{"dataType":"STRING","externalId":"environment","name":"Environment","type":{"attribute":{"defaultValue":"-"}},"unit":"-"},{"dataType":"STRING","externalId":"short_description","name":"Short Description","type":{"attribute":{"defaultValue":"-"}},"unit":"-"}]',
                    'array<struct<dataType:string,externalId:string,identify:string,kind:struct<attribute:struct<defaultValue:string>>,unit:string>>'
                )
            ELSE array()
        END
    ) as assetModelProperties,
    COLLECT_LIST(
        CASE 
            WHEN baby.sys_id IS NOT NULL THEN 
                STRUCT(
                    array_join(array(mum or dad.sys_id, baby.sys_id), '-') as externalId,
                    baby.identify as identify,
                    baby.sys_id as childAssetModelExternalId
                )
        END
    ) as assetModelHierarchies
FROM cmdb_ot_entity_type as mum or dad
LEFT JOIN cmdb_ot_entity_type as baby
    ON mum or dad.sys_id = baby.parent_type
GROUP BY mum or dad.sys_id, mum or dad.identify, mum or dad.label, mum or dad.ot_table

Mix the belongings and assetModels

  1. Create a brand new Supply node by choosing the blue “+” button as proven in Determine 12.
  2. Add a brand new node Rework and choose SQL Question.
  3. For Title, use “assetModelHierarchy”.
  4. For Node mother and father, select the supply nodes belongings and assetModels.
  5. For Enter sources and SQL aliases, use belongings and assetModels for every, as proven in Determine 16.

assetModelHierarchy transform

Determine 16: assetModelHierarchy rework

  1. For SQL Question, copy and paste the next question:
SELECT (
    SELECT COLLECT_LIST(STRUCT(assetModels.*)) as assetModels
    FROM assetModels
) as assetModels,
(
    SELECT COLLECT_LIST(STRUCT(belongings.*)) as belongings
    FROM belongings
) as belongings

Now, add the goal of the rework so you possibly can retailer the results of our AWS Glue Job for use for importing into AWS IoT SiteWise.

Add the goal of the rework

  1. Create a brand new Supply node by choosing the blue “+” button as proven in Determine 12.
  2. Add a brand new node Rework and choose Amazon S3 from the targets.
  3. For Title, use something. This instance usesAmazon S3.
  4. For Node Mother and father, select the supply node assetModelHierarchy.
  5. For Format, select JSON.
  6. For Compression Kind, select None.
  7. For S3 Goal Location, choose .

Adding target node

Determine 17: Including goal node

As soon as full, you must see the ETL that’s proven in Determine 18. Select Save.

Then choose Run and await it to complete.

Asset hierarchy

Determine 18: Asset hierarchy

Import into AWS IoT SiteWise

On this part, you’ll affirm the creation of the JSON file in Amazon S3 and import the ServiceNow belongings into AWS IoT SiteWise.

  1. First, affirm JSON file was created by doing the next:
    1. Open the Amazon S3 console.
    2. Choose .
    3. Choose the run--part-r-00000 file, then select Actions.
    4. Choose Rename Object, then rename it to sitewise-import.json. With a purpose to import it to AWS IoT SiteWise, the item will need to have the json extension added to the identify.
  2. To import into AWS IoT SiteWise, open the AWS IoT SiteWise console.
    1. Within the navigation pane, select Bulk Operations.
    2. Choose New ImportAWS IoT SiteWise bulk operations

      Determine 19: AWS IoT SiteWise bulk operations

    3. Within the Import metadata dialog field, for S3 URI, choose then the sitewise-import.json file.S3 import

      Determine 20: S3 import

    4. Choose Import and await the import to complete.

Validate your work

Now you can view the completely different fashions and mannequin properties as proven in Determine 21. You may as well view the completely different belongings and asset properties as proven in Figures 22, 23, and 24. Your ServiceNow hierarchy is now efficiently replicated into AWS IoT SiteWise.

AWS IoT SiteWise models

Determine 21: AWS IoT SiteWise fashions

AWS IoT SiteWise model properties

Determine 22: AWS IoT SiteWise mannequin properties

AWS IoT SiteWise assets

Determine 23: AWS IoT SiteWise belongings

AWS IoT SiteWise asset properties

Determine 24: AWS IoT SiteWise asset properties

Cleanup

To wash up the work outlined on this weblog, navigate to the Amazon AppFlow console to delete the flows and ServiceNow connection. Delete any person and person credentials created for ServiceNow. In AWS Glue, delete the crawler, job, and tables from the AWS Glue Information Catalog. Take away the belongings and asset fashions from AWS IoT SiteWise. Lastly, delete each the parquet and reworked JSON recordsdata out of your Amazon S3 buckets.

Conclusion

This weblog offered a course of to combine ServiceNow asset knowledge with AWS IoT SiteWise, a follow that permits organizations to take care of constant asset info throughout their IT and OT asset administration options. To completely automate this integration, schedule your Amazon AppFlow flows to run at common intervals and configure your AWS Glue job with a schedule set off. When establishing the AWS Glue job, you may as well add the ‘.json’ extension to the output file through the ETL script. Each options remove handbook knowledge entry and guarantee consistency between IT and OT programs.

Attempt implementing this resolution and tell us about your expertise within the feedback part beneath. Need to be taught extra about AWS IoT SiteWise? See the AWS IoT SiteWise Developer Information for extra info.


In regards to the authors


Maria El Khoury is a Options Architect at AWS supporting manufacturing prospects of their digital transformation journey. With a background of constructing IoT and pc imaginative and prescient options, Maria is particularly keen on making use of AWS within the fields of Industrial IoT and provide chain.


Brent Van Wynsberge is a Options Architect at AWS supporting enterprise prospects. He accelerates the cloud adoption journey for organizations by aligning technical goals to enterprise outcomes and strategic targets. Brent is an IoT fanatic, particularly within the software of IoT in manufacturing, he’s additionally keen on DevOps, knowledge analytics and containers.

Leave a Reply

Your email address will not be published. Required fields are marked *