如何使用擴充性動作將 Automation Assembler 與 ServiceNow 整合
Automation Assembler
與 ServiceNow 整合使用擴充性動作,可以將
Automation Assembler
與企業 ITSM (例如 ServiceNow) 整合。
- 設定此整合之前,篩選具有條件式雲端範本內容的所有事件訂閱:event.data["customProperties"]["enable_servicenow"] === "true"此內容存在於需要 ServiceNow 整合的雲端範本上。
- 下載並安裝 Python。
如需有關篩選訂閱的詳細資訊,請參閱建立擴充性訂閱。

企業使用者通常會將其雲端管理平台與 IT 服務管理 (ITSM) 和設定管理資料庫 (CMDB) 平台整合以實現符合性。按照此範例,您可以使用擴充性動作指令碼將
Automation Assembler
與適用於 CMDB 和 ITSM 的 ServiceNow 整合。 您也可以使用
Automation Orchestrator 用戶端
工作流程將 ServiceNow 與 Automation Assembler
整合。如需有關使用工作流程整合 ServiceNow 的資訊,請參閱如何使用 Automation Orchestrator 用戶端 工作流程將 Automation Assembler 與 ServiceNow 整合以符合 ITSM。 若要建立此整合,請使用四個擴充性動作指令碼。在佈建期間,前三個指令碼在發生計算資源佈建後事件時按順序起始。第四個指令碼在發生計算資源移除後事件時觸發。
如需有關事件主題的詳細資訊,請參閱Automation Assembler 隨附的事件主題。

取得虛擬機器詳細資料
「取得虛擬機器詳細資料」指令碼可取得建立 CI 所需的其他裝載詳細資料,以及儲存在
Amazon Web Services
Systems Manager 參數存放區 (SSM) 中的身分識別 Token。此外,此指令碼還可以使用其他內容更新 customProperties
以供日後使用。 建立 ServiceNow CMDB CI
「建立 ServiceNow CMDB CI」指令碼將 ServiceNow 執行個體 URL 做為輸入傳遞,並將執行個體儲存在 SSM 中以滿足安全性需求。此指令碼還會讀取 ServiceNow CMDB 唯一記錄識別碼回應 (sys_id)。此指令碼將回應做為輸出傳遞,並在建立期間寫入自訂內容
serviceNowSysId
。此值用於在銷毀執行個體時將 CI 標記為已淘汰。 可能需要向
VMware Aria Automation 服務
Amazon Web Services
角色配置其他權限,以允許 Lambda 存取 SSM 參數存放區。 建立 ServiceNow 變更
此指令碼將 ServiceNow 執行個體 URL 做為輸入傳遞,並將 ServiceNow 認證儲存在 SSM 中以滿足安全性需求,從而完成 ITSM 整合。
建立 ServiceNow 變更
「淘汰 ServiceNow CMDB CI」指令碼會根據在建立指令碼中建立的自訂內容
serviceNowSysId
,來提示 ServiceNow 停止 CI 並將其標記為已淘汰。 - 從虛擬機器開啟命令列提示字元。
- 執行「取得虛擬機器詳細資料」指令碼。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
- 執行 CMDB 組態項目建立動作。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
- 執行建立動作指令碼。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)
Automation Assembler
已成功與 ITSM ServiceNow 整合。
如果需要,您可以使用 CMDB 組態淘汰動作將 CI 淘汰:
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)