との統合 ServiceNow
アプリ所有者は、 ServiceNow® と App Configurationを統合してワークフローを追加することで、フィーチャー・フラグの有効化を管理できます。
構成変更の承認プロセス・フローを環境レベルで App Configuration に関連付けることができます。 承認ワークフローを有効にすると、承認後に変更が反映され、実装する変更要求の状態が変更されます。 変更要求が実装状態になると、変更は自動的に反映されます。
構成を更新するための管理者特権を持つ ServiceNow インスタンスがあることを確認します。
外部 ServiceNow 名は、標準の https://xxx.service-now.com
に従います。ここで、 xxx
はインスタンス名です。 ServiceNow インスタンス名、ユーザー名、およびパスワードは、 ServiceNow コンソールから取り出すことができます。 ServiceNow プロファイルにナビゲートし、 「インスタンス・パスワードの管理 (Manage Instance Password)」 に移動して詳細を取得します。
ServiceNow ワークフローと統合するには、以下のステップを実行します。
-
App Configuration サービス・インスタンスのダッシュボードで、 「現在の環境」 フィールドの値を選択します。 この値は、 ServiceNow ワークフロー・プロセスを有効にする環境でなければなりません。
-
「機能フラグ」 をクリックします。
-
「ワークフローの管理」 をクリックします。 「ワークフローの管理」 サイド・パネルが表示されます。
{: caption="フローを管理する外部ワーク" caption-side="bottom"}を管理する外部ワークフローを管理する
-
外部ワークフローの場合、以下のステップを実行します。
-
xml-ph-0000@deepl.internalインスタンスの URLServiceNow インスタンスの
-
ServiceNow インスタンスへの接続に使用するユーザー名を入力します。
-
ServiceNow インスタンスで認証するために前述の ユーザー名 の認証に使用する パスワード を入力します。
-
OAuthアクセストークンを取得するために必要なクライアントIDを入力します。
ServiceNow インスタンスにアクセスするには、 「クライアント ID」 と 「クライアント秘密鍵」 が必要です。 クライアント ID および クライアント・シークレットを作成する場合は、 外部クライアント用の OAuth API エンドポイントを作成する方法についてサービスの資料を参照してください。
-
前述の 「クライアント ID」 の認証に必要な 「クライアント秘密鍵」 を入力します。
-
ServiceNow で定義された承認グループ名を入力します。 承認グループ名には、 ServiceNow ワークフローで作成された変更要求を承認する権限を持つ担当者のセットが含まれます。
-
変更要求の有効期限 (時間単位) を設定します。 最小 1 時間から最大 999 時間。
-
「有効」 トグル・スイッチを ON に設定して、選択した環境のワークフローを有効にします。
-
-
ワークフローを作成・適用するには「 作成 」をクリックします。
環境でワークフローを作成するときに、その環境で機能フラグを 「オン」 状態または 「オフ」 状態に切り替えると、変更要求が開始され、ワークフロー承認プロセスを経る必要があります。
ワークフロー承認プロセスを適用する前に一部の機能フラグを既に有効にしている場合、それらの機能フラグは通常どおり機能しますが、さらに切り替えを行うと承認プロセスが実行されます。
既存の機能フラグを無効にしてワークフローを適用した後、機能フラグを有効にすると、その状況が 「ワークフロー開始」 に変更され、変更要求ワークフローが開始されます。
外部 ServiceNow ワークフロー変更要求に必須タグを追加するにはどうすればよいですか?
以下のステップに従って、外部 ServiceNow ワークフロー統合の変更要求に必須タグを追加します。
-
ServiceNow インスタンスに管理者としてログインします。
-
既存の変更要求を開きます。
ServiceNow change request -
追加アクション・アイコンをクリックして、追加オプションを開きます。
ServiceNow additional actions -
「構成」 をクリックし、 「フォーム・レイアウト」 を選択します。
追加設定オプション - フォームレイアウト -
「フォーム・ビューおよびセクション (Form view and section)」 の下の 「フォーム・レイアウト (Form Layout)」 で、 「変更要求 (Change Request)」 を選択し、 「名前 (Name)」 を Appconfiguration タグ、 「タイプ (Type)」 を ストリング、 「フィールド長さ (Field length)」 を *「中 (100)」*として新規フィールドを作成します。
フィールド名は、必ず Appconfiguration タグ (大/小文字の区別あり) と正確に一致するように入力してください。
追加設定オプション - フォームレイアウト - 新規フィールド -
追加 をクリックします。 追加されると、新規フィールドが 「使用可能」 セクションに表示されます。
追加設定オプション - フォームレイアウト - 利用可能セクションに表示される新しいフィールド -
「使用可能」 セクションから 「Appconfiguration タグ」 を選択し、それを 「選択済み」 セクションに追加します。
追加設定オプション - フォームレイアウト - 利用可能なセクションから選択されたセクション -
変更要求に新しいフィールドが表示されます。
フィールド フィールド値は、新規変更要求の作成時に App Configuration サービスによって追加されます。 そのため、値を変更したり、その他の値を 「Appconfiguration タグ」 フィールドに追加したりしないでください。 フィールドに他の値を変更または追加すると、変更要求イベントが無視される可能性があります。
外部 ServiceNow インスタンスに Webhook スクリプトを登録または追加する方法
ServiceNow インスタンスに Webhook スクリプトを登録または追加するには、以下の手順を実行します。
-
ServiceNow インスタンスに管理者としてログインします。
-
すべて タブをクリックし、 「システム定義」にリストされている Business Rulesを検索します。
ServiceNow - Business Rules listed under System Definitions -
Business Rules ページで、 「新規」 ボタンをクリックします。
- 新規ビジネスルール -
新規レコードで、 「名前」 を追加し、 *「変更要求」*にするテーブルを選択します。 「拡張」 チェック・ボックスを選択して、拡張オプション・タブを表示します。
{: caption="なオプション* Webhookスクリプトを追加するための高度なオプション
-
「拡張」 オプション・タブで、Webhook スクリプトを追加します。
(function executeRule(current, previous /*null when async*/) { try { if (current.u_appconfiguration_tag == "appconfig-workflow" && (current.state == -1 || current.state == -5 || current.state == 4)) { //creating the glider Encrypt object var glideEncrypt = new GlideEncrypter(); //fetching the sys_property that contains the IAM key var encryptedIbmIAMKey = gs.getProperty('<Add System property name which holds the IBM IAM key (Case Sensitive)>'); //example: var encryptedKey = gs.getProperty('WorkflowAppConfigIamKey'); //Decrypting the key var decryptedIAMKey = glideEncrypt.decrypt(encryptedIbmIAMKey); gs.addInfoMessage("IBM KEY DECRYPTION COMPLETED"); if (Object.keys(decryptedIAMKey).length !== 0) { gs.addInfoMessage("CHANGE REQUEST IDENTIFIED AS WORKFLOW RELATED"); //Adding the decrypted key to the IAM token generation body var bodyContent = "grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=" + decryptedIAMKey; //Making POST call to IBM IAM to generate token var ibmIamTokenRequest = new sn_ws.RESTMessageV2(); ibmIamTokenRequest.setHttpMethod('POST'); ibmIamTokenRequest.setEndpoint('https://iam.cloud.ibm.com/identity/token'); ibmIamTokenRequest.setRequestBody(bodyContent); ibmIamTokenResponse = ibmIamTokenRequest.execute(); var ibmIamTokenResponseCode = ibmIamTokenResponse.getStatusCode(); gs.addInfoMessage("IBM IAM TOKEN CREATION HTTP RESPONSE CODE: " + ibmIamTokenResponseCode); if (ibmIamTokenResponseCode == 200) { //parsing json response to extract the access_token var ibmIamTokenResponseData = JSON.parse(ibmIamTokenResponse.getBody()); //extracting the access_token var access_token = ibmIamTokenResponseData.access_token; var encryptedInstanceId = gs.getProperty('<Add System property name which holds the AppConfig InstanceId (Case Sensitive)>'); //example: var encryptedInstanceId = gs.getProperty('WorkflowIbmAppConfigInstanceId'); var decryptedInstanceId = glideEncrypt.decrypt(encryptedInstanceId); gs.addInfoMessage("IBM APP CONFIG INSTANCE ID DECRYPTION COMPLETED"); //preparing webhook request to forward var webHookRequest = new sn_ws.RESTMessageV2(); //Refer link https://cloud.ibm.com/apidocs/app-configuration#endpoints-urls for more info on base URL //Choose the base url from below based on your AppConfig instance region //Dallas: https://us-south.apprapp.cloud.ibm.com //Washington DC: https://us-east.apprapp.cloud.ibm.com //London: https://eu-gb.apprapp.cloud.ibm.com //Sydney: https://au-syd.apprapp.cloud.ibm.com //Frankfurt: https://eu-de.apprapp.cloud.ibm.com //Madrid: https://eu-es.apprapp.cloud.ibm.com webHookRequest.setEndpoint('{{AppConfigRegionBaseURL}}/apprapp/workflow/v1/instances/' + decryptedInstanceId + '/crevents'); webHookRequest.setRequestHeader('Authorization', 'Bearer ' + access_token); webHookRequest.setHttpMethod('POST'); webHookRequest.setRequestHeader("Accept", "application/json"); webHookRequest.setRequestHeader("Content-Type", "application/json"); //preparing the data for the webhook request var webHookReqDataObject = new Object(); //BELOW ARE THE DATA THAT IS NEEDED TO PROCESS THE REQUEST, MODIFYING OR ALTERING THE DATA OR THE ATTRIBUTE WILL RESULT IN WEBHOOK REQUEST FAILURE. webHookReqDataObject.operation = String(current.operation()); webHookReqDataObject.short_description = String(current.short_description); webHookReqDataObject.change_request_id = String(current.number); webHookReqDataObject.description = String(current.description); webHookReqDataObject.cr_state = String(current.state); webHookReqDataObject.cr_approval_assignment_group = String(current.assignment_group); webHookReqDataObject.appconfiguration_tag = String(current.u_appconfiguration_tag); webHookReqDataObject.implementation_time = String(current.work_start); var webHookJsonStringData = JSON.stringify(webHookReqDataObject); gs.addInfoMessage(webHookJsonStringData); webHookRequest.setRequestBody(webHookJsonStringData); //checking the change request has the tag, we only accept the CR with the below mentioned tag id gs.addInfoMessage("SENDING REQUEST TO APP CONFIGURATION WEBHOOK HANDLER"); var webHookResponse = webHookRequest.execute(); httpResponseStatus = webHookResponse.getStatusCode(); gs.addInfoMessage("APP CONFIGURATION WEBHOOK HANDLER RESPONSE CODE: " + httpResponseStatus); if (httpResponseStatus == 200) { gs.addInfoMessage("SUCCESSFULLY EXECUTED THE WEBHOOK CALL"); } else { //try once more webHookResponse = webHookRequest.execute(); httpResponseStatus = webHookResponse.getStatusCode(); gs.addInfoMessage("WEBHOOK CALL RETRY STATUS CODE: " + httpResponseStatus); gs.addInfoMessage(webHookResponse.getBody()); } } else { gs.addInfoMessage("IBM IAM TOKEN GENERATION FAILED"); } } else { gs.addInfoMessage("DECRYPTED IAM KEY IS EMPTY OR NOT FOUND"); } } else { gs.addInfoMessage("CR STATE : " + current.state + " CR APPCONFIGURATION TAG VALUE : " + current.u_appconfiguration_tag); gs.addInfoMessage("CHANGE REQUEST DOES NOT BELONG TO WORKFLOW INTEGRATION OR STATE OF THE CR IS NOT VALID"); } } catch (ex) { var message = ex.getMessage(); gs.info(message); } })(current, previous);
-
IBM IAM トークンまたは App Configuration サービス資格情報の API キーと App Configuration インスタンス ID を使用して、コピーしたスクリプトを変更します。
-
「いつ実行するか」 タブにナビゲートし、 「更新」 チェック・ボックスを選択します。
ServiceNow - When to run tab -
Submitをクリックして詳細を保存します。
Webhook スクリプトの IBM IAM トークンまたは App Configuration サービス資格情報の API キーを追加する方法
Webhook スクリプトには、Webhook 呼び出し用の IBM IAM トークン、またはトークンを生成するための API キーを保管できる App Configuration サービス資格情報の API キーが必要です。
以下の手順を実行します。
-
ServiceNow インスタンスに管理者としてログインします。
-
「すべて」 タブをクリックし、 sys_properties.LIST を検索して、 Enter キーを押します。 あるいは、 https://{{instanceid}}.service-now.com/sys_properties_list.doにアクセスすることもできます。ここで、 instanceid は ServiceNow インスタンス ID です。
ServiceNow - All tab -
「システム・プロパティー」 の詳細が表示されます。
- システム・プロパティ -
New をクリックして、新しいシステム・プロパティを作成する。
- 新システムプロパティ -
以下の詳細を追加して、トークンを追加します。 password2 タイプを使用して鍵を保管します。 このタイプはデータを暗号化し、 ServiceNow インスタンスでのみ暗号化解除できます。
- システム・プロパティ -
「送信」 をクリックして、 ServiceNow インスタンスに鍵を保存します。 保存すると、データが暗号化されていることが分かります。
App Configuration インスタンス ID を Webhook スクリプトの ServiceNow システム・プロパティーに追加する方法
以下の手順を実行します。
-
ServiceNow インスタンスに管理者としてログインします。
-
「すべて」 タブをクリックし、 sys_properties.LIST を検索して、 Enter キーを押します。 あるいは、 https://{{instanceid}}.service-now.com/sys_properties_list.doにアクセスすることもできます。ここで、 instanceid は ServiceNow インスタンス ID です。
ServiceNow - All tab -
「システム・プロパティー」 の詳細が表示されます。
- システム・プロパティ -
New をクリックして、新しいシステム・プロパティを作成する。
- 新システムプロパティ -
App Configuration インスタンス ID を追加します。 password2 タイプを使用して鍵を保管します。 このタイプはデータを暗号化し、 ServiceNow インスタンスでのみ暗号化解除できます。
- システム・プロパティ -
「送信」 をクリックして、 ServiceNow インスタンスに鍵を保存します。 保存すると、データが暗号化されていることが分かります。