SSH を使用してワークフロータイプ操作で VM をシャットダウンする

  • リリースバージョン: Xanadu
  • 更新日 2024年08月01日
  • 所要時間:11分
  • SSH を使用してワークフロータイプ操作で VM をリモートでシャットダウンします。このユースケースに従って、このタイプのシャットダウンに必要なすべてのタスクを順に実行します。

    始める前に

    必要なロール:ワークフローデザイナーまたは sn_cmp.cloud_admin

    手順

    1. SSH カスタムアクティビティを作成するには、次の手順を実行します。
      1. 移動先 管理ポータル > ワークフロー > ワークフローエディター.
      2. [カスタム] タブをクリックし、[+] (プラス記号) をクリックして、新しいカスタムアクティビティを作成します。
      3. アクティビティのタイプのリストから [SSH] を選択します。
        カスタムアクティビティタイプとして SSH を選択します。
      4. アクティビティデザイナーが開き、[全般] タブが表示されます。
        アクティビティの一意の名前を入力し、[続行] をクリックします。
      5. [入力] タブで、次の手順に従い入力変数を追加し、[続行] をクリックします。
      6. [入力] テーブルで、円の中の [+] をクリックして、新しい入力変数を作成します。
      7. [名前] 列で ABC の右をクリックし、入力名を入力します。

        入力は、影響を受けるオブジェクトによって異なります。VM を停止するアクティビティを停止すれば、入力には、そのアクションを実行するために必要な値が反映されます。

        入力した入力に従って、[タイプ] 列と [必須] 列が自動的に入力されます。

      8. 次の表の各入力に対して新しい入力オブジェクトを作成し、[続行] をクリックします。
        入力変数 タイプ 必須
        ホスト 文字列 いいえ
        コマンド 文字列 いいえ
        CredentialTag 文字列 いいえ
      9. [実行コマンド] タブで、次を実行します。
      10. [出力] テーブルで、円の中の [+] をクリックして、新しい出力変数を作成します。
      11. [名前] 列で ABC の右をクリックし、出力名を入力します。
        出力変数は、ワークフローが VM に SSH を試行した場合に考えられる結果を反映します。[タイプ] 列に自動的に入力されます。
        出力 タイプ
        エラー 文字列
        output 文字列
      12. [エラー] 変数をクリックして、[解析ルール] テーブルの [変数名] フィールドにドラッグします。
      13. エラーの [ルールの解析] ダイアログにある解析の [ソース] ドロップダウンで、適切なソースを選択します (この場合は、executionResult.errorMessages)。
      14. 出力変数に対して繰り返し、解析のソースとして executionResult.output を選択して、[送信] をクリックします。
        [解析ルール] に表示される出力
      15. [続行] をクリックします。
        条件はオプションです
      16. [保存] をクリックしてから [公開] をクリックして、アクティビティをワークフローで使用できるようにします。
    2. VM の電源をオフにするために必要な SSH ワークフローを作成するには、次の手順に従います。
      ワークフローを作成する場合、それをテーブルおよびアクティビティに関連付けます。
      • グローバルレベルのテーブルまたはアプリケーションレベルのテーブルにワークフローを作成できます。グローバルテーブルを使用して、ワークフローをすべての ServiceNow アプリケーションで使用できるようにします。ここでは、クラウドプロビジョニングとガバナンス にテーブルを使用するため、このワークフローはそのアプリケーションでのみ使用できます。
      • ワークフローは、ワークフローエディターまたはアクティビティデザイナーから作成できます。ここでは、アクティビティデザイナーが使用されます。
      1. アクティビティデザイナーで、右側の [ワークフロー] タブを選択し、[+] (プラス記号) をクリックして新しいワークフローを追加します。
      2. [新規ワークフロー] ウィンドウで、ワークフローの一意の名前を入力します。
      3. [テーブル] ドロップダウンから、使用するテーブルを選択します。
        ワークフローを使用して VM の電源をオフにするには、[仮想マシンインスタンス cmdb_ci_vm_instance] を検索して使用します。
      4. [送信] をクリックします。
      5. キャンバスにワークフローが表示されたら、ワークフローの始点と終点の間の接続線を削除します。
      6. ワークフローの始点と終点の間の接続線を削除します。
      7. 詳細のキャンバスを右クリックし、[入力の編集] を選択します。
      8. 次の入力を作成します。
        注:
        [ラベル] フィールドからではなく、[列] フィールドから入力名を取得します。ワークフローがグローバルレベルのテーブルに関連付けられている場合、[列] フィールドの入力名にはプリフィックス u_ が付きます (u_ipaddress)。ここでは、テーブルはアプリケーションレベルなので、プリフィックスは必要ありません。
        表 : 1. ワークフロー入力
        タイプ ラベル 列 (自動的に追加) 最大長
        文字列 IPAddress ipaddress 100
        文字列 CredentialTag credentialtag 100
      9. [送信] をクリックします。
      10. キャンバスを右クリックし、[要素を追加] を選択します。
      11. [バージョン] ウィンドウで、このユースケースで最初に作成したアクティビティを検索して選択します。
      12. そのアクティビティの [新規アクティビティ] ウィンドウ (ワークフローアクティビティの新規レコード [Diagrammer ビュー]) に、アクティビティの名前を入力します。
      13. [ホスト] フィールドに、アクティビティが予期する入力マッピングを入力します。

        ホストの IP アドレスは ${workflow.inputs.u_ipaddress} です。この式を使用して IP アドレスを取得します。

        $(Script:CMPVMUtils.getReachableIp[arg=$(Stack.items[Virtual Server].attributes[sys_id])])

      14. [コマンド] フィールドに、shutdown -h now と入力します。
      15. [認証情報タグ] フィールドに、${workflow.inputs.u_credentialtag} と入力します。

        この式を使用して、認証情報タグを取得します。

        $(Script:CMPVMUtils.getCredentialAlias[arg=${Stack.items[Virtual Server].attributes[sys_id]}])

      16. [送信] をクリックします。
        アクティビティはワークフローキャンバスに表示されます。
      17. キャンバスを右クリックし、[コアアクティビティを追加] を選択して、スクリプト実行アクティビティを追加します。
      18. [ワークフローアクティビティ定義] ウィンドウで、[スクリプトを実行] を検索して選択します。
      19. 新規アクティビティの [スクリプトを実行] ウィンドウで、アクティビティの名前を入力します。
      20. [スクリプト] フィールドに (環境に適した) スクリプトを切り取って貼り付けます。
        このスクリプトは、シャットダウン後に VM のステータスを更新します。
        スクリプト例:
        if ( gs.nil(data.get(3).error)) {
                            current.state = 'off';
                            current.setWorkflow(false);
                            current.update();
        }
        
      21. [送信] をクリックします。
      22. キャンバスで、開始点、アクティビティ、実行スクリプト、および終了点の間のコネクターを接続します。
      23. ワークフロー検証を使用してワークフローを検証します。
        注:
        システムでは、current.update() の使用は推奨されません。これは無視できます。
    3. 操作をリソースブロックに追加するには、次の手順を実行します。
      リソースブロック内の既存の操作からワークフローを操作するように選択するか、またはカスタム操作を作成できます。
      1. クラウドアドミンポータル Design (デザイン) > リソースブロック.
      2. リソースブロックを選択します ([仮想サーバー] など)。
      3. リソースブロックのステータスを [公開] から [ドラフト] に移動して、編集可能にします。
      4. [操作] タブを選択し、[インターフェイス] ドロップダウンフィールドから、ユーザーが使用できるインターフェイスを選択します。
        デフォルトのインターフェイスは [仮想サーバーインターフェイス] です。
      5. [操作] フィールドの右側にある [+] をクリックし、[操作を追加] ダイアログで意味のある一意の名前を入力します。
      6. [操作タイプ] ドロップダウンから操作を選択します。
      7. [アクセスタイプ] フィールドから [公開] を選択します。
      8. フォームに入力し、[送信] をクリックします。
        操作タイプ 実行する操作を選択します。
        アクセスタイプ ユーザーがプロビジョニング時にリソースレベルで操作を表示するには、[公開] を選択します。[プライベート] に設定された操作は、プロビジョニング中に表示されません。
        ワークフローのリソースを選択すると、この操作をリソースで使用できるようになります。
      9. ワークフローを呼び出すリソース操作ステップを追加するには、[操作] タブで ステップ > ステップを追加.
        ワークフローを更新セットの一部としてエクスポートできるようにするには、拡張インターフェイスを作成し、新しい操作を追加する必要があります。詳細については、「操作の上書きによる クラウドプロビジョニングとガバナンス リソースブロックの拡張」を参照してください。
      10. [操作ステップを追加] ポップアップで、[操作タイプ][ワークフローを呼び出し (Invoke Workflow)] を選択します。
      11. 作成したワークフローのリストから [ワークフロー] を選択します。
        システムはタグを使用してリストをフィルタリングできます。タグを追加するには:
        1. [システムプロパティ] に移動します。
        2. システムプロパティ sn_cmp.workflow_tag_filter を見つけて選択します。
        3. プロパティを編集します。タグまたはカンマ区切りのタグのリストを追加します。
        4. [保存] をクリックします。
      12. ワークフローをフィルタするには:
        1. ワークフローテーブルで、ワークフローを開きます。
        2. [タグを追加] をクリックします。
        3. sn_cmp.workflow_tag_filter プロパティに前に指定した値を入力します。
        4. [入力] をクリックして、値をタグとしてワークフローに追加します。新しいステップは、ソフトウェアが 2 日目の操作カタログを新しく生成した後に表示されます。
      13. グローバル以外のテーブルにワークフローが作成される場合があります。
        このようなテーブルに作成されたワークフローを追加できます。このタイプのワークフローに対して操作を実行するには、現在のレコードを作成するためにワークフローが実行されているレコードの sys_id が必要です。そのため、デザイナーがグローバル以外のテーブル上にあるワークフローを追加すると、システムは操作入力パラメーターに wf_current パラメーターを作成します。その後、操作を実行しているリソースの sys_id をマッピングする式を記述できます。これが完了すると、デザイナーはワークフロースクリプトで「現在」のキーワードを使用できます。
        ワークフローを追加するには、次の手順を実行します。
        1. ステップを作成すると、ワークフロー入力が操作入力パラメーターに追加されます。必要に応じて、これらのパラメーターのマッピングを指定できます。
        2. [カタログの生成] ボタンをクリックして、操作のカタログアイテムを作成します。
        3. カタログが生成された後、ロードおよびフィールド変更ルールからカタログ品目に追加できます。
      14. リソースブロックを [公開] ステータスに設定して、クラウドユーザーポータルでワークフローを使用できるようにします。
    4. ユーザーポータルから操作を実行するには、次の手順を実行します。
      1. ポータルから簡単な AWS VM をプロビジョニングします。
      2. VM プロビジョニングが完了したら、[スタック] > [VM リソース (VM Resource)] に移動します。
      3. [リソース運用を選択] オプションで、このユースケースで前に作成したカスタムの停止アクティビティを選択し、[OK] をクリックします。
        この操作は、RITM が作成され、AWS コンソールで VM ステータスが変更された後に実行されます。
      4. 移動先 運用 > 記録 を使用して証跡ログを表示し、操作ステップをトレースします。
    5. トラブルシューティングを行うには、必要に応じて次の手順を実行します。
      1. 要求アイテム (RITM) を使用して、RootCauseAnalysis ダッシュボードに移動します。
        RITM には、現在実行されている操作のワークフローコンテキストへのリンクがあります。
      2. 次の一般的なエラーを確認します。
        表 : 2. エラー処理
        症状 エラーメッセージ
        VM がシャットダウンしても SSH 接続に問題がある 「エラー。ジョブはエラーステータスで終了しました。SSH セッションに問題があり、ジョブが中断しました。SSH サーバーによって接続は予期せず終了しました (Error; job finished with status ERROR: Problem in SSH session, job aborted: Connection unexpectedly closed by SSH server:)」
        VM がすでにシャットダウンされている / VM に接続できない 「接続できません。ステータスが TCP_CONNECTION_FAILURE です。TCP が 10.198.252.224:22 にコネクトするのを待っている間にタイムアウトになりました:\n"
        注:
        wf_context 内の VM の IP アドレスが適切なアドレスであることを確認します。VM はすでにシャットダウンされている可能性があります。IP アドレスがアクセス可能であることを確認します。
        ルートアクセスを使用できない 「メソッドの呼び出しを発行できませんでした。アクセスが拒否されました。ルートにする必要があります。終了ステータス:(Failed to issue method call: Access denied\nMust be root.\nExit status: 1\n\n)」
        注:
        このユースケースの最初にある SSH アクティビティで、[Sudo が必要] ボックスがオンになっていることを確認します。