The Inside Playbook
Ansible + ServiceNow パート 3:Red Hat Ansible Tower へのアウトバウンド RESTful API 呼び出し
2019年10月9日、寄稿者:Michael Ford
Red Hat Ansible Tower の価値は、チェック済みの方法で自動化をスケーリングできるようにすることにあります。ユーザーは、アクセスが必要なプロセスとターゲットに対してのみ Playbook を実行できます。
Ansible Tower は大規模な自動化を実現するとともに、複数の外部プラットフォームとの統合も可能です。この機能によって、ユーザーは多くの場合、バックグラウンドで Ansible Tower テンプレートを起動しながら、使い慣れたインタフェースを使用することができます。
ServiceNow は現在使用されている中でも特にユビキタスなセルフサービス・プラットフォームの 1 つであり、Ansible Tower を使用するエンタープライズのお客様との会話でも、ServiceNow との統合がしばしば話題に上がりました。これを踏まえ、このブログ記事では、ServiceNow インスタンスをセットアップし、OAuth2 認証を使用して Ansible Tower へのアウトバウンド RESTful API 呼び出しを行う手順を説明します。
このブログは、複数回で構成されるシリーズのパート 3 です。以前の記事は、パート 1 およびパート 2 をご覧ください。
使用するソフトウェアのバージョンは次の通りです。
- Ansible Tower:3.4、3.5
- ServiceNow:London、Madrid
ServiceNow Developer アカウントにサインアップすると無料インスタンスが提供されるので、これから説明する機能を実際に試してみることができます。ただし、ServiceNow インスタンスから Ansible Tower インスタンスへの通信を有効にしておく必要があります。また、https://ansible.com/license では Ansible Tower のトライアルライセンスを取得できます。Ansible Tower のインストール方法は、こちらでご確認ください。
3) 次に、画面左の [Settings] から [System] に移動します。[Allow External Users to Create OAuth2 Tokens] オプションを [on] に切り替えます。緑色の [Save] ボタンをクリックして、変更をコミットします。
Ansible Tower を準備する
1) Ansible Tower で、画面左の [Applications] をクリックします。右側の緑色のプラスボタンをクリックすると、[Create Application] ダイアログが表示されます。次のフィールドに入力します。
- Name:Ansible Tower に接続するアプリケーションの名前
- Organization:このアプリケーションを所有する組織
- Authorization Grant Type:認証コード
- Redirect URIS:https://<snow_instance_id>.service-now.com/oauth_redirect.do
- Client Type:Confidential
2) 右側にある緑色の [Save] ボタンをクリックするとポップアップウィンドウが表示されます。ここに書かれている Client ID と Client Secret は、ServiceNow から Ansible Tower への API 呼び出しを行う際に使用します。この値は一度しか表示されないので、忘れないようにキャプチャしておいてください。
3) 次に、画面左の [Settings] から [System] に移動します。[Allow External Users to Create OAuth2 Tokens] オプションを [on] に切り替えます。緑色の [Save] ボタンをクリックして、変更をコミットします。
ServiceNow を準備する
4) 次に ServiceNow で、[System Definition] から [Certificates] に移動します。すると、ServiceNow が使用するすべての証明書が一覧表示されます。青色の [New] ボタンをクリックして、次のように詳細を入力します。
- Name:証明書の名前
- Format:PEM
- Type:Trust Store Cert
- PEM Certificate:Ansible Tower に対する認証で使用する証明書。/etc/tower/tower.cert にある Tower サーバーの組み込み証明書を使用できます。このファイルの内容を ServiceNow のフィールドにコピーします。
下部の [Submit] ボタンをクリックします。
5) ServiceNow で [System OAuth] から [Application Registry] に移動します。すると、ServiceNow が通信するすべてのアプリケーションが一覧表示されます。青色の [New] ボタンをクリックすると、セットアップする OAuth アプリケーションの種類を尋ねられるので、[Connect to a third party OAuth Provider] を選択します。
6) 新しいアプリケーションの画面で、次のように詳細を入力します。
- Name: アプリケーションの名前
- Client ID: Ansible Tower から取得した Client ID
- Client Secret:Ansible Tower から取得した Client Secret
- Default Grant Type:認証コード
- Authorization URL: https://<tower_url>/api/o/authorize/
- Token URL: https://<tower_url>/api/o/token/
- Redirect URL: https://<snow_instance_id>.service-now.com/oauth_redirect.do
下部の [Submit] ボタンをクリックします。
7) 登録したアプリケーションの一覧が表示されるので、作成したアプリケーションをクリックします。下部の 2 つのタブのうち、[OAuth Entity Scopes] タブをクリックします。ここに、[Insert a new row…] というセクションがあります。これをダブルクリックし、フィールドに「Writing Scope」と入力します。緑色のチェックマークをクリックして、この変更を確定します。次に、上部にグレーで表示されている [Application Registries] エリア内で右クリックし、ポップアップメニューで [Save] をクリックします。
8) 先ほどの「Writing Scope」がクリックできるようになっているはずです。これをクリックし、表示されるダイアログで [OAuth Scope] ボックスに「write」と入力します。下部の [Update] ボタンをクリックします。
9) [Application Settings] ページに戻り、下にスクロールして、[OAuth Entity Profiles] タブをクリックします。データが入力されたエンティティプロファイルがあるはずなので、それをクリックします。
10) [OAuth Entity Profile] ウィンドウが表示されます。下部で、[OAuth Entity Scope] フィールドに「Writing Scope」と入力します。緑色のチェックマークをクリックして更新します。
11) [System Web Services] から [REST Messages] に移動し、青色の [New] ボタンをクリックします。表示されるダイアログウィンドウで、次のフィールドに入力します。
- Name:REST メッセージの名前
- Endpoint:実行する Ansible Tower アクションの URL エンドポイントこれは、ブラウザで https://<tower_url>/api にアクセスして API から取得できます。
- Authentication Type:OAuth 2.0
- OAuth Profile:作成した OAuth プロファイルを選択
上部のグレーのエリア内で右クリックして、[Save] をクリックします。
12) REST メッセージ画面の [Get OAuth Token] ボタンをクリックします。すると、Ansible Tower インスタンスあるいはクラスタに対して ServiceNow を承認するよう求めるポップアップウィンドウが表示されます。[Authorize] をクリックします。これで、ServiceNow は Ansible Tower サーバーに対して認証するための OAuth2 トークンを取得しました。
13) 下部の [HTTP Methods] セクションで、青色の [New] ボタンをクリックします。表示される新しいダイアログウィンドウで、次のフィールドに入力します。
- HTTP Method:POST
- Name:HTTP Method の名前
- Endpoint:実行する Ansible Tower アクションの URL エンドポイントこれは、ブラウザで https://<tower_url>/api にアクセスして API から取得できます。
- HTTP Headers ([HTTP Request] タブ内)
- 必須の HTTP ヘッダーは「Content-Type: application/json」だけです。
[Test] リンクをクリックすると、これらのパラメーターを使用して Ansible Tower への RESTful 呼び出しを開始できます。
ServiceNow と Ansible Tower の接続をテストする
14) [Test] リンクをクリックすると、Restful 呼び出しが Ansible Tower に正常に送信されたことを示す結果画面が表示されます。この例では、ServiceNow が Ansible Tower のジョブテンプレートを開始し、Ansible Tower からの応答には「276」という Job ID が含まれています。
このジョブテンプレートが実際に開始されたことを確認するには、Ansible Tower で画面左の [Jobs] セクションをクリックします。同じ ID (276) のジョブがリストに表示されているはずです (Playbook のサイズによっては、処理中の場合があります)。
Ansible Tower ジョブテンプレートを起動する
ServiceNow カタログアイテムを作成する
15) ServiceNow から Ansible Tower へのアウトバウンド RESTful 呼び出しを行えるようになったところで、ServiceNow の本番環境でユーザーがセルフサービスで選択できるよう、カタログアイテムを作成します。[HTTP Method] オプションで、[Preview Script Usage] リンクをクリックします。
表示されたスクリプトをコピーし、後で参照できるようにテキストエディターに貼り付けます。
16) ServiceNow で [Workflow] から [Workflow Editor] に移動すると、新しいタブが開き、既存のすべての ServiceNow ワークフローが一覧表示されます。青色の [New Workflow] ボタンをクリックします。
17) 表示される [New Workflow] ダイアログボックスで、次のオプションを入力します。
- Name:ワークフローの名前
- Table:Requested Item [sc_req_item]
その他はすべてそのままで、[Submit] ボタンをクリックします。
18) Workflow Editor に、[Begin] と [End] の 2 つのボックスだけがあるワークフローが表示されます。ラインをクリックし (選択すると青色に変わります)、Delete キーを押して削除します。
19) Workflow Editor 画面の右側で [Core] タブを選択し、[Core Activities] の [Utilities] から [Run Script] オプションを Workflow Editor にドラッグします。表示される新しいダイアログボックスで、名前を入力し、先ほどキャプチャしたスクリプトを貼り付けます。[Submit] をクリックしてスクリプトを保存します。
20) [Begin] ボックスから新たに作成した [Run Script] ボックスへの接続と、[Run Script] ボックスから [End] ボックスへの接続を作成します。その後、ワークフロー名の左側にある 3 本の横線をクリックして、[Publish] オプションを選択します。これで、このワークフローをカタログアイテムに関連付ける準備ができました。
21) [Service Catalog] から [Catalog Definitions]、[Maintain Items] の順に移動します。 表示されるアイテムリストで青色の [New] ボタンをクリックします。表示されるダイアログボックスで、次のフィールドに入力します。
- Name:カタログアイテムの名前
- Catalog:このアイテムを含めるカタログ
- Category:ユーザーがこのアイテムを検索できるようにする場合は必須
[Process Engine] タブで、[Workflow] フィールドに作成したワークフローを入力し、[Submit] ボタンをクリックします。この時点では、新しいカタログアイテムはまだ作成できていません。
22) 最後に、このカタログアイテムを実行するため、[Self-Service] から [Homepage] に移動し、作成したカタログアイテムを検索します。見つかったら、[order now] ボタンをクリックします。結果のページが ServiceNow にポップアップ表示され、Ansible Tower でジョブが実行されていることを確認できます。
これで作業は完了です。この手順を終えると、ServiceNow カタログアイテムを使用して、Ansible Tower でジョブテンプレートとワークフローテンプレートを起動できるようになります。これは、さまざまな複雑なタスクを自動化し、エンドユーザーが使い慣れたフロントエンドから実行できるようにするのに理想的です。よく知っているフロントエンドを使えるので、Playbook の作成担当チームだけでなく、エンタープライズ全体で価値実現までの時間を短縮できます。
ブログ記事の著者に会ってみませんか?
ブログ記事の著者たちにはAnsible Automates のイベントやテクニカルワークショップで会うことができます。
- https://www.ansible.com/community/events/automates
- https://www.ansible.com/community/events/workshops
パート 4 では、ServiceNow からエキスパートを招き、考えや体験を共有してもらう予定です。