Mithilfe von Erweiterbarkeitsaktionen können Sie Automation Assembler mit einer ITSM-Unternehmenslösung wie ServiceNow integrieren.

Der ServiceNow-Integrationsablauf durchläuft mehrere Automation Assembler-, Amazon Web Services- und ServiceNow-Dienste und -APIs.
Unternehmensbenutzer integrieren ihre Cloud Management Platform zu Übereinstimmungszwecken in der Regel mit einer ITSM- (IT Service Management) und einer CMDB-Plattform (Configuration Management Database). Gemäß diesem Beispiel können Sie Automation Assembler unter Verwendung von Erweiterbarkeitsaktionsskripts in ServiceNow für CMDB und ITSM integrieren.
Hinweis: Sie können ServiceNow auch unter Verwendung von Automation Orchestrator-Workflows in Automation Assemblerintegrieren. Informationen zum Integrieren von ServiceNow mithilfe von Workflows finden Sie unter Vorgehensweise zum Integrieren von Automation Assembler für ITSM mit ServiceNow unter Verwendung von Automation Orchestrator-Workflows.

Zum Erstellen dieser Integration verwenden Sie vier Erweiterbarkeitsaktionsskripts. Die ersten drei Skripts werden nacheinander während der Bereitstellung beim Compute-Bereitstellungs-Post-Ereignis initiiert. Das vierte Skript löst das Compute-Entfernungs-Post-Ereignis aus.

Weitere Informationen zu Ereignisthemen finden Sie unter Mit Automation Assembler bereitgestellte Ereignisthemen.

Die vier Erweiterbarkeitsaktionsskripts weisen unterschiedliche Prioritätsebenen auf. Die höchste Prioritätsstufe wird für die Erweiterbarkeitsaktionsskripts „VM-Details abrufen“ und „ServiceNow-CMDB-Konfigurationselement zurückziehen“ angegeben.

VM-Details abrufen

Das Skript zum Abrufen von VM-Details erfasst zusätzliche Nutzlastdetails, die für die CI-Erstellung erforderlich sind, sowie ein Identitätstoken, das in Amazon Web Services Systems Manager Parameter Store (SSM) gespeichert ist. Außerdem aktualisiert dieses Skript customProperties mit zusätzlichen Eigenschaften für die spätere Verwendung.

ServiceNow-CMDB-Konfigurationselement erstellen
Das Skript zum Erstellen des ServiceNow-CMDB-Konfigurationselements übergibt die Instanz-URL von ServiceNow als Eingabe und speichert die Instanz in SSM, um die Sicherheitsanforderungen zu erfüllen. Dieses Skript liest auch die Antwort der eindeutigen Datensatz-ID (sys_id) der ServiceNow-CMDB. Es übergibt die Antwort als Ausgabe und schreibt die benutzerdefinierte Eigenschaft serviceNowSysId während der Erstellung. Dieser Wert wird verwendet, um das Konfigurationselement als veraltet zu markieren, wenn die Instanz gelöscht wird.
Hinweis: Unter Umständen müssen Ihrer Amazon Web Services-Rolle für cloud automation service zusätzliche Berechtigungen zugewiesen werden, damit Lambda auf den SSM-Parameterspeicher zugreifen kann.

ServiceNow-Änderung erstellen

Dieses Skript beendet die ITSM-Integration, indem die Instanz-URL von ServiceNow als Eingabe übergeben und die ServiceNow-Anmeldedaten als SSM gespeichert werden, um die Sicherheitsanforderungen zu erfüllen.

ServiceNow-Änderung erstellen

Das Skript zum Zurückziehen des ServiceNow-CMDB-Konfigurationselements fordert ServiceNow zum Anhalten auf und markiert das Konfigurationselement basierend auf der benutzerdefinierten Eigenschaft serviceNowSysId, die im Erstellungsskript erstellt wurde, als veraltet.

Voraussetzungen

  • Bevor Sie diese Integration konfigurieren, filtern Sie alle Ereignisabonnements mit der bedingten Cloud-Vorlageneigenschaft: event.data["customProperties"]["enable_servicenow"] === "true"
    Hinweis: Diese Eigenschaft ist in Cloud-Vorlagen vorhanden, die eine ServiceNow-Integration benötigen.
  • Laden Sie Python herunter und installieren Sie es.

Weitere Informationen zum Filtern von Abonnements finden Sie unter Erstellen eines Erweiterbarkeitsabonnements.

Prozedur

  1. Öffnen Sie eine Eingabeaufforderung auf Ihrer virtuellen Maschine.
  2. Führen Sie das Skript zum Abrufen von VM-Details aus.
    from botocore.vendored import requests
    import json
    import boto3
    client = boto3.client('ssm','ap-southeast-2')
    
    def handler(context, inputs):
        baseUri = inputs['url']
        casToken = client.get_parameter(Name="casToken",WithDecryption=True)
        
        url = baseUri + "/iaas/login"
        headers = {"Accept":"application/json","Content-Type":"application/json"}
        payload = {"refreshToken":casToken['Parameter']['Value']}
        
        results = requests.post(url,json=payload,headers=headers)
        
        bearer = "Bearer "
        bearer = bearer + results.json()["token"]
        
        deploymentId = inputs['deploymentId']
        resourceId = inputs['resourceIds'][0]
        
        print("deploymentId: "+ deploymentId)
        print("resourceId:" + resourceId)
        
        machineUri = baseUri + "/iaas/machines/" + resourceId
        headers = {"Accept":"application/json","Content-Type":"application/json", "Authorization":bearer }
        resultMachine = requests.get(machineUri,headers=headers)
        print("machine: " + resultMachine.text)
        
        print( "serviceNowCPUCount: "+ json.loads(resultMachine.text)["customProperties"]["cpuCount"] )
        print( "serviceNowMemoryInMB: "+ json.loads(resultMachine.text)["customProperties"]["memoryInMB"] )
        
        #update customProperties
        outputs = {}
        outputs['customProperties'] = inputs['customProperties']
        outputs['customProperties']['serviceNowCPUCount'] = int(json.loads(resultMachine.text)["customProperties"]["cpuCount"])
        outputs['customProperties']['serviceNowMemoryInMB'] = json.loads(resultMachine.text)["customProperties"]["memoryInMB"]
        return outputs
  3. Führen Sie die Aktion zur Erstellung des CMDB-Konfigurationselements aus.
    from botocore.vendored import requests
    import json
    import boto3
    client = boto3.client('ssm','ap-southeast-2')
    
    def handler(context, inputs):
    
        snowUser = client.get_parameter(Name="serviceNowUserName",WithDecryption=False)
        snowPass = client.get_parameter(Name="serviceNowPassword",WithDecryption=True)
        table_name = "cmdb_ci_vmware_instance"
        url = "https://" + inputs['instanceUrl'] + "/api/now/table/{0}".format(table_name)
        headers = {'Content-type': 'application/json', 'Accept': 'application/json'}
        payload = {
            'name': inputs['customProperties']['serviceNowHostname'],
            'cpus': int(inputs['customProperties']['serviceNowCPUCount']),
            'memory': inputs['customProperties']['serviceNowMemoryInMB'],
            'correlation_id': inputs['deploymentId'],
            'disks_size': int(inputs['customProperties']['provisionGB']),
            'location': "Sydney",
            'vcenter_uuid': inputs['customProperties']['vcUuid'],
            'state': 'On',
            'sys_created_by': inputs['__metadata']['userName'],
            'owned_by': inputs['__metadata']['userName']
            }
        results = requests.post(
            url,
            json=payload,
            headers=headers,
            auth=(snowUser['Parameter']['Value'], snowPass['Parameter']['Value'])
        )
        print(results.text)
    
        #parse response for the sys_id of CMDB CI reference
        if json.loads(results.text)['result']:
            serviceNowResponse = json.loads(results.text)['result']
            serviceNowSysId = serviceNowResponse['sys_id']
            print(serviceNowSysId)
    
            #update the serviceNowSysId customProperty
            outputs = {}
            outputs['customProperties'] = inputs['customProperties']
            outputs['customProperties']['serviceNowSysId'] = serviceNowSysId;
            return outputs
  4. Führen Sie das Erstellungsaktionsskript aus.
    from botocore.vendored import requests
    import json
    import boto3
    client = boto3.client('ssm','ap-southeast-2')
    
    def handler(context, inputs):
        snowUser = client.get_parameter(Name="serviceNowUserName",WithDecryption=False)
        snowPass = client.get_parameter(Name="serviceNowPassword",WithDecryption=True)
        table_name = "change_request"
        url = "https://" + inputs['instanceUrl'] + "/api/now/table/{0}".format(table_name)
        headers = {'Content-type': 'application/json', 'Accept': 'application/json'}
        payload = {
            'short_description': 'Provision CAS VM Instance'      
                  }
        results = requests.post(
            url,
            json=payload,
            headers=headers,
            auth=(snowUser['Parameter']['Value'], snowPass['Parameter']['Value'])
        )
        print(results.text)

Ergebnisse

Automation Assembler wurde erfolgreich in ITSM-Lösung ServiceNow integriert.

Nächste Maßnahme

Wenn Sie möchten, können Sie das Konfigurationselement mithilfe der Aktion zum Zurückziehen des CMDB-Konfigurationselements als veraltet markieren:
from botocore.vendored import requests
import json
import boto3
client = boto3.client('ssm','ap-southeast-2')

def handler(context, inputs):
    snowUser = client.get_parameter(Name="serviceNowUserName",WithDecryption=False)
    snowPass = client.get_parameter(Name="serviceNowPassword",WithDecryption=True)
    tableName = "cmdb_ci_vmware_instance"
    sys_id =inputs['customProperties']['serviceNowSysId']
    url = "https://" + inputs['instanceUrl'] + "/api/now/"+tableName+"/{0}".format(sys_id)
    headers = {'Content-type': 'application/json', 'Accept': 'application/json'}
    payload = {
        'state': 'Retired'
        }

    results = requests.put(
        url,
        json=payload,
        headers=headers,
        auth=(inputs['username'], inputs['password'])
    )
    print(results.text)