すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:Cloud Assistant コマンドを使用したインスタンスの停止または再起動

最終更新日:Aug 22, 2026

Cloud Assistant の終了コードを使用して Elastic Compute Service (ECS) インスタンスを停止または再起動します。この操作には、コンソール、OpenAPI、および CloudOps Orchestration Service (OOS) によるバッチ操作のオプションがあります。

前提条件

(推奨) 終了コードを使用したインスタンスの停止または再起動

Cloud Assistant コマンドの末尾に終了コードを追加することで、インスタンスを停止または再起動できます。終了コードがない場合、Cloud Assistant エージェントは実行結果を報告できず、コマンドのステータスが正しく更新されないことがあります。

重要

ターゲットインスタンスの Cloud Assistant エージェントは、以下のバージョンである必要があります。

  • Linux: 2.2.3.317

  • Windows: 2.2.3.317

エラーが発生した場合は、Cloud Assistant エージェントを最新バージョンに更新してください。詳細については、「Cloud Assistant エージェントのアップグレードまたは自動アップグレードの無効化」をご参照ください。

  1. ECS コンソール - ECS クラウドアシスタントに移動します。

  2. 上部メニューで、対象リソースのリージョンとリソースグループを選択します。 地域

  3. コマンドの作成/実行をクリックします。

  4. コマンド情報 セクションで、パラメーターを設定します。詳細については、「コマンドの作成と実行」をご参照ください。

  5. コマンド の最後に、対応する終了コードを追加します。

    • インスタンスを停止するには、以下のいずれかの終了コードを使用します。

      オペレーティングシステム

      終了コード

      コマンド例

      Linux

      193

      # 終了コード 193 を返すことで、インスタンスを停止するアクションがトリガーされます。
      exit 193

      Windows

      3009

      # 終了コード 3009 を返すことで、インスタンスを停止するアクションがトリガーされます。
      exit 3009
    • インスタンスを再起動するには、以下のいずれかの終了コードを使用します。

      オペレーティングシステム

      終了コード

      コマンド例

      Linux

      194

      # 終了コード 194 を返すことで、インスタンスを再起動するアクションがトリガーされます。
      exit 194

      Windows

      3010

      # 終了コード 3010 を返すことで、インスタンスを再起動するアクションがトリガーされます。
      exit 3010
  6. インスタンスの選択 または マネージドインスタンスの選択 セクションで、コマンドを実行するインスタンスを選択します。

    説明

    マネージドインスタンスは、Alibaba Cloud が提供するものではなく、Cloud Assistant によって管理されるインスタンスです。詳細については、「Alibaba Cloud マネージドインスタンス」をご参照ください。

  7. 実行して保存 または 実行 をクリックすると、コマンドがすぐに実行されます。

OpenAPI を使用したインスタンスのバッチ再起動

ローカルの Linux 環境で Python コードを実行して OpenAPI を呼び出し、コマンドを実行することでインスタンスをバッチで再起動します。

  1. 必要な情報を準備します。

    1. RAM ユーザーの AccessKey ペアを取得します。詳細については、「AccessKey ペアの作成」をご参照ください。

    2. DescribeRegions API を呼び出してリージョンのリストを取得します。詳細については、「DescribeRegions」をご参照ください。

    3. DescribeInstances API を呼び出して、指定された条件を満たすインスタンスをフィルタリングします。詳細については、「DescribeInstances」をご参照ください。

  2. ローカル環境を設定し、サンプルコードを実行します。

    1. Alibaba Cloud SDK for Python をインストールまたはアップグレードします。

      sudo pip install --upgrade alibabacloud_ecs20140526
    2. .py ファイルを作成し、以下のサンプルコードを追加します。

      クリックしてサンプルコードを表示

      # coding=utf-8
      # Python SDK がインストールされていない場合は、「sudo pip install alibabacloud_ecs20140526」を実行します。
      # 最新の SDK バージョンを使用していることを確認してください。
      # 「sudo pip install --upgrade alibabacloud_ecs20140526」を実行してアップグレードします。
      
      import base64
      import logging
      import os
      import sys
      import time
      
      from alibabacloud_ecs20140526.client import Client as Ecs20140526Client
      from alibabacloud_ecs20140526.models import (
          DescribeInvocationResultsRequest,
          DescribeInstancesRequest,
          RunCommandRequest,
          RebootInstancesRequest
      )
      from alibabacloud_tea_openapi.models import Config
      
      # ログ出力フォーマッターを設定します。
      logging.basicConfig(level=logging.INFO,
                          format="%(asctime)s %(name)s [%(levelname)s]: %(message)s",
                          datefmt='%m-%d %H:%M')
      
      logger = logging.getLogger()
      
      # ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数がランタイム環境に設定されていることを確認してください。
      # プロジェクトコードが漏洩すると AccessKey ペアが漏洩し、アカウント内の全リソースのセキュリティが危険にさらされる可能性があります。以下のサンプルコードでは環境変数から AccessKey ペアを取得しますが、この方法はあくまで参考です。よりセキュリティを強化するために、STS トークンの使用を推奨します。
      access_key = os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
      access_key_secret = os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
      region_id = '<yourRegionId>'  # 取得したリージョン ID を入力します。
      
      ecs_config = Config(
          access_key_id=access_key,
          access_key_secret=access_key_secret,
          endpoint=f'ecs.{region_id}.aliyuncs.com'
      )
      client = Ecs20140526Client(ecs_config)
      
      
      def base64_decode(content, code='utf-8'):
          if sys.version_info.major == 2:
              return base64.b64decode(content)
          else:
              return base64.b64decode(content).decode(code)
      
      
      def get_invoke_result(invoke_id):
          request = DescribeInvocationResultsRequest(
              region_id=region_id,
              invoke_id=invoke_id
          )
          response = client.describe_invocation_results(request)
          response_details = response.body.invocation.invocation_results.invocation_result
          dict_res = {detail.instance_id: {"status": detail.invocation_status,
                                           "output": base64_decode(detail.output)} for detail in
                      response_details}
          return dict_res
      
      
      def get_instances_status(instance_ids):
          request = DescribeInstancesRequest(
              region_id=region_id,
              instance_ids=str(instance_ids)
          )
          response = client.describe_instances(request)
          response_details = response.body.instances.instance
          dict_res = {detail.instance_id: {"status": detail.status} for detail in response_details}
          return dict_res
      
      
      def run_command(cmdtype, cmdcontent, instance_ids, timeout=60):
          """
          cmdtype: コマンドタイプ。有効値:RunBatScript、RunPowerShellScript、RunShellScript。
          cmdcontent: コマンドの内容。
          instance_ids: インスタンス ID のリスト。
          """
          try:
              request = RunCommandRequest(
                  region_id=region_id,
                  type=cmdtype,
                  command_content=cmdcontent,
                  instance_id=instance_ids,
                  timeout=timeout  # コマンド実行のタイムアウト期間 (秒単位) 。デフォルト値は 60 です。実行するコマンドに基づいて、適切なタイムアウト期間を設定します。
              )
              response = client.run_command(request)
              return response.body.invoke_id
          except Exception as e:
              logger.error("run command failed", exc_info=True)
      
      
      def reboot_instances(instance_ids, Force=False):
          """
          instance_ids: 再起動するインスタンス ID のリスト。
          Force: インスタンスを強制的に再起動するかどうかを指定します。デフォルトは False です。
          """
          request = RebootInstancesRequest(
              region_id=region_id,
              instance_id=instance_ids,
              force_reboot=Force
          )
          response = client.reboot_instances(request)
      
      
      def wait_invoke_finished_get_out(invoke_id, wait_count, wait_interval):
          for i in range(wait_count):
              result = get_invoke_result(invoke_id)
              if set([res['status'] for _, res in result.items()]) & set(["Running", "Pending", "Stopping"]):
                  time.sleep(wait_interval)
              else:
                  return result
          return result
      
      
      def wait_instance_reboot_ready(ins_ids, wait_count, wait_interval):
          for i in range(wait_count):
              result = get_instances_status(ins_ids)
              if set([res['status'] for _, res in result.items()]) != set(["Running"]):
                  time.sleep(wait_interval)
              else:
                  return result
          return result
      
      
      def run_task():
          # Cloud Assistant コマンドのタイプを設定します。
          cmdtype = "RunShellScript"
          # Cloud Assistant コマンドの内容を設定します。
          cmdcontent = """
          #!/bin/bash
          echo helloworld
          """
          # タイムアウト期間を設定します。
          timeout = 60
          # コマンドを実行してから再起動するインスタンスの ID を入力します。
          ins_ids = ["i-bp185fcs****", "i-bp14wwh****", "i-bp13jbr****"]
      
          # コマンドを実行します。
          invoke_id = run_command(cmdtype, cmdcontent, ins_ids, timeout)
          logger.info("run command,invoke-id:%s" % invoke_id)
      
          if invoke_id is None:
              logger.error("Failed to run command, stopping further execution")
              return
      
          # コマンドが終了するまで待機します。システムは 5 秒間隔でステータスを 10 回確認します。必要に応じて、確認の回数と間隔を設定します。
          invoke_result = wait_invoke_finished_get_out(invoke_id, 10, 5)
          for ins_id, res in invoke_result.items():
              logger.info(
                  "instance %s command execute finished,status: %s,output:%s" % (ins_id, res['status'], res['output']))
      
          # インスタンスを再起動します。
          logger.warning("reboot instance Now")
          reboot_instances(ins_ids)
      
          time.sleep(5)
          # インスタンスが再起動して実行中状態になるまで待機します。システムは 10 秒間隔でステータスを 30 回確認します。
          reboot_result = wait_instance_reboot_ready(ins_ids, 30, 10)
          logger.warning("reboot instance Finished")
          for ins_id, res in reboot_result.items():
              logger.info("instance %s status: %s" % (ins_id, res['status']))
      
      
      if __name__ == '__main__':
          run_task()
      

      サンプルコード内の以下の値を、ご自身の値に置き換えてください。

      • AccessKey ID: access_key = os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']

      • AccessKey シークレット: access_key_secret = os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']

      • リージョン ID: region_id = '<yourRegionId>'

      • インスタンス ID: ins_ids= ["i-bp185fcs****","i-bp14wwh****","i-bp13jbr****"]

    3. .py ファイルを実行します。

      次の出力は、その結果です。コマンド helloworld は 3 つのインスタンスで実行され、インスタンスは自動的に再起動されます。

      [root@iZxxx ~]# vim runcommand_reboot_instances.py
      [root@iZxxx ~]# ls
      runcommand_reboot_instances.py
      [root@iZxxx ~]# python runcommand_reboot_instances.py
      /usr/lib/python2.7/site-packages/aliyunsdkcore/auth/algorithm/sha_hmac256.py:20: CryptographyDeprecationWarning: Python 2 is now deprecated in cryptography, and will be removed in the next release.
        from cryptography.hazmat.backends import default_backend
      09-18 14:33 root [INFO]: run command,invoke-id:t-hz0xxxxx
      09-18 14:34 root [INFO]: instance i-bp185fcs**** command execute finished,status: Finished,output:helloworld
      
      09-18 14:34 root [INFO]: instance i-bp14wwh**** command execute finished,status: Finished,output:helloworld
      
      09-18 14:34 root [INFO]: instance i-bp13jbr**** command execute finished,status: Finished,output:helloworld
      
      09-18 14:34 root [WARNING]: reboot instance Now
      09-18 14:39 root [WARNING]: reboot instance Finished
      09-18 14:39 root [INFO]: instance i-bp185fcs**** status: Running
      09-18 14:39 root [INFO]: instance i-bp14wwh**** status: Running
      09-18 14:39 root [INFO]: instance i-bp13jbr**** status: Running

OOS を使用したインスタンスのバッチ再起動

CloudOps Orchestration Service (OOS) は、テンプレートを通じて O&M タスクを自動化します。テンプレートにアクションを定義して実行することで、コマンドの実行とインスタンスのバッチ再起動が可能です。

  1. テンプレート設定ページに移動します。

    1. OOS コンソールにログインします。

    2. [自動タスク] > [カスタムテンプレート] を選択します。

    3. テンプレートの作成 をクリックします。

  2. テンプレートを設定します。

    1. テンプレートの作成 ページで、デフォルト設定のままにして 次へ をクリックします。

    2. [YAML] タブをクリックし、次のコードを入力します。

      クリックしてサンプルコードを表示

      FormatVersion: OOS-2019-06-01
      Description:
        en: 複数の ECS インスタンスで Cloud Assistant コマンドをバッチ実行し、再起動します。
        name-en: コマンドのバッチ実行と ECS インスタンスの再起動
        categories:
          - run_command
      Parameters:
        regionId:
          Type: String
          Description:
            en: リージョンの ID。
          Label:
            en: リージョン
          AssociationProperty: RegionId
          Default: '{{ ACS::RegionId }}'
        targets:
          Type: Json
          Label:
            en: ターゲットインスタンス   
          AssociationProperty: Targets
          AssociationPropertyMetadata:
            ResourceType: ALIYUN::ECS::Instance
            RegionId: regionId
        commandType:
          Description:
            en: コマンドタイプ。
            
          Label:
            en: コマンドタイプ
            
          Type: String
          AllowedValues:
            - RunBatScript
            - RunPowerShellScript
            - RunShellScript
          Default: RunShellScript
        commandContent:
          Description:
            en: ECS インスタンスで実行するコマンドの内容。
            
          Label:
            en: コマンド内容
            
          Type: String
          MaxLength: 16384
          AssociationProperty: Code
          Default: echo hello
        workingDir:
          Description:
            en: 'コマンドが ECS インスタンスで実行されるディレクトリ。Linux インスタンスの場合、デフォルトは root ユーザーのホームディレクトリ (/root) です。Windows インスタンスの場合、デフォルトは Cloud Assistant エージェントが配置されているディレクトリ (C:\Windows\System32 など) です。'
          Label:
            en: 作業ディレクトリ
            
          Type: String
          Default: ''
        timeout:
          Description:
            en: ECS インスタンスでのコマンド実行のタイムアウト期間。  
          Label:
            en: タイムアウト
          Type: Number
          Default: 600
        enableParameter:
          Description:
            en: コマンドにシークレットパラメータまたはカスタムパラメータが含まれているかどうかを指定します。
          Label:
            en: パラメータの有効化
          Type: Boolean
          Default: false
        username:
          Description:
            en: ECS インスタンスでコマンドを実行するユーザー名。
          Label:
            en: ユーザー名
          Type: String
          Default: ''
        windowsPasswordName:
          Description:
            en: Windows インスタンスでコマンドを実行するユーザーのパスワード名。
          Label:
            en: Windows パスワード名
          Type: String
          Default: ''
          AssociationProperty: SecretParameterName
        rateControl:
          Description:
            en: タスク実行の同時実行率。
          Label:
            en: レートコントロール
          Type: Json
          AssociationProperty: RateControl
          Default:
            Mode: Concurrency
            MaxErrors: 0
            Concurrency: 10
        OOSAssumeRole:
          Description:
            en: OOS が引き受ける RAM ロール。
          Label:
            en: OOS Assume Role 
          Type: String
          Default: OOSServiceRole
      RamRole: '{{ OOSAssumeRole }}'
      Tasks:
        - Name: getInstance
          Description:
            en: ECS インスタンスの取得
          Action: ACS::SelectTargets
          Properties:
            ResourceType: ALIYUN::ECS::Instance
            RegionId: '{{ regionId }}'
            Filters:
              - '{{ targets }}'
          Outputs:
            instanceIds:
              Type: List
              ValueSelector: Instances.Instance[].InstanceId
        - Name: runCommand
          Action: ACS::ECS::RunCommand
          Description:
            en: Cloud Assistant コマンドの実行
          Properties:
            regionId: '{{ regionId }}'
            commandContent: '{{ commandContent }}'
            instanceId: '{{ ACS::TaskLoopItem }}'
            commandType: '{{ commandType }}'
            workingDir: '{{ workingDir }}'
            timeout: '{{ timeout }}'
            enableParameter: '{{ enableParameter }}'
            username: '{{ username }}'
            windowsPasswordName: '{{ windowsPasswordName }}'
          Loop:
            RateControl: '{{ rateControl }}'
            Items: '{{ getInstance.instanceIds }}'
            Outputs:
              commandOutputs:
                AggregateType: Fn::ListJoin
                AggregateField: commandOutput
          Outputs:
            commandOutput:
              Type: String
              ValueSelector: invocationOutput
        - Name: rebootInstance
          Action: ACS::ECS::RebootInstance
          Description:
            en: ECS インスタンスの再起動
          Properties:
            regionId: '{{ regionId }}'
            instanceId: '{{ ACS::TaskLoopItem }}'
          Loop:
            RateControl: '{{ rateControl }}'
            Items: '{{ getInstance.instanceIds }}'
      Outputs:
        instanceIds:
          Type: List
          Value: '{{ getInstance.instanceIds }}'
    3. テンプレートの作成 をクリックします。

    4. 表示されたダイアログボックスで、テンプレート名 runcommand_reboot_instances を入力し、OK をクリックします。

  3. テンプレートを実行します。

    1. 先ほど作成したテンプレートを見つけ、[操作] 列の エグゼキューションの作成 をクリックします。

    2. 実行を設定します。

      プロンプトに従って設定を完了します。パラメーター設定 ページで、複数のインスタンスを選択し、他の設定はデフォルトのままにします。この例では、次のパラメーター設定を使用します。

      • リージョン: [中国 (杭州)] を選択します

      • 対象インスタンス: [インスタンスを手動で選択] を選択し、[インスタンスの選択] をクリックしてコマンドを実行する ECS インスタンスを追加します

      • コマンドタイプ: [RunShellScript] を選択します

      • コマンド内容: echo hello と入力します。

    3. OK ページで、作成 をクリックします。

      テンプレートは自動的に実行されます。基本情報 ページで、実行ステータス が 成功 に変わるまでお待ちください。

  4. 実行プロセスとタスクノードの詳細を確認します。

    1. [実行ステップと結果] で [実行フローチャートを表示] をクリックすると実行フローチャートが表示され、タスクが [ECS インスタンスの取得]、[Cloud Assistant コマンドの実行]、[インスタンスの再起動] を順に通過し、すべてが正常に実行されたことがわかります。

    2. Cloud Assistant コマンドの実行ステップをクリックします。ループタスクリストのタブで、各タスクノードの実行詳細を確認できます。スケジュールされたすべての操作が正常に完了しました。