All Products
Search
Document Center

Elastic Compute Service:Menghentikan atau me-restart sebuah instans menggunakan perintah Cloud Assistant

Last Updated:Sep 03, 2025

Topik ini menjelaskan cara menghentikan atau me-restart sebuah instans menggunakan perintah Cloud Assistant.

Prasyarat

(Direkomendasikan) Gunakan kode keluar khusus untuk menghentikan atau me-restart sebuah instans

Saat mengeksekusi perintah di Cloud Assistant untuk menghentikan atau me-restart sebuah instans, tambahkan kode keluar di akhir perintah. Hal ini memastikan akurasi dan status waktu nyata dari eksekusi perintah. Jika tidak, Agen Asisten Cloud tidak dapat melaporkan hasil eksekusi, dan status perintah mungkin tidak diperbarui dengan benar.

Penting

Pastikan bahwa Agen Asisten Cloud pada instans target bukan versi yang lebih lama dari berikut ini:

  • Linux: 2.2.3.317

  • Windows: 2.2.3.317

Jika terjadi kesalahan saat menjalankan perintah, perbarui Agen Asisten Cloud ke versi terbaru. Untuk informasi lebih lanjut, lihat Tingkatkan atau nonaktifkan pembaruan otomatis.

  1. ECS console - Storage Capacity Units
  2. Di bilah navigasi atas, pilih Wilayah dan kelompok sumber daya dari sumber daya yang ingin Anda kelola. 地域

  3. Di pojok kanan atas halaman, klik Create/Run Command.

  4. Di bagian Command Information, konfigurasikan parameter. Untuk informasi lebih lanjut, lihat Buat dan jalankan perintah.

  5. Di akhir Command Content, atur kode keluar yang sesuai.

    • Untuk menghentikan sebuah instans, tentukan salah satu kode keluar berikut.

      Sistem operasi

      Kode keluar

      Contoh perintah

      Linux

      193

      # Perintah Shell ini mengembalikan kode keluar 193, yang memicu tindakan untuk menghentikan instans.
      exit 193

      Windows

      3009

      # Perintah PowerShell ini mengembalikan kode keluar 3009, yang memicu tindakan untuk menghentikan instans.
      exit 3009
    • Untuk me-restart sebuah instans menggunakan perintah, tentukan salah satu kode keluar berikut.

      Sistem operasi

      Kode keluar

      Contoh perintah

      Linux

      194

      # Perintah Shell ini mengembalikan kode keluar 194, yang memicu tindakan untuk me-restart instans.
      exit 194

      Windows

      3010

      # Perintah PowerShell ini mengembalikan kode keluar 3010, yang memicu tindakan untuk me-restart instans.
      exit 3010
  6. Di bagian Select Instance atau Select Managed Instances, pilih instans tempat Anda ingin menjalankan perintah.

    Catatan

    Instans terkelola adalah instans yang tidak disediakan oleh Alibaba Cloud tetapi dikelola oleh Cloud Assistant. Untuk informasi lebih lanjut, lihat Instans yang dikelola oleh Alibaba Cloud.

  7. Klik Run and Save atau Run untuk segera menjalankan perintah.

Gunakan OpenAPI untuk menjalankan perintah Cloud Assistant untuk me-restart instans dalam batch

Alibaba Cloud menyediakan serangkaian operasi OpenAPI yang kaya untuk mengelola sumber daya cloud. Bagian ini memberikan contoh tentang cara menjalankan kode Python di lingkungan Linux lokal untuk memanggil operasi OpenAPI. Contoh tersebut menunjukkan cara mengeksekusi perintah dan me-restart instans dalam batch.

  1. Siapkan informasi yang diperlukan untuk mengeksekusi perintah.

    1. Dapatkan Pasangan Kunci Akses dari pengguna Resource Access Management (RAM) yang ingin Anda gunakan. Untuk informasi lebih lanjut, lihat Buat Pasangan Kunci Akses.

    2. Panggil operasi DescribeRegions untuk mengambil daftar Wilayah. Untuk deskripsi rinci dari parameter, lihat DescribeRegions.

    3. Panggil operasi DescribeInstances untuk memfilter instans yang memenuhi kondisi tertentu. Untuk deskripsi parameter dalam operasi DescribeInstances, lihat DescribeInstances.

  2. Konfigurasikan lingkungan lokal dan jalankan kode contoh.

    1. Instal dan tingkatkan SDK Alibaba Cloud untuk Python.

      sudo pip install --upgrade alibabacloud_ecs20140526
    2. Buat file .py dan tulis kode contoh berikut ke dalam file.

      Klik untuk melihat kode contoh

      # coding=utf-8
      # Jika Python SDK belum diinstal, jalankan 'sudo pip install alibabacloud_ecs20140526'.
      # Pastikan Anda menggunakan versi SDK terbaru.
      # Jalankan 'sudo pip install --upgrade alibabacloud_ecs20140526' untuk meningkatkan.
      
      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
      
      # Konfigurasikan formatter output log.
      logging.basicConfig(level=logging.INFO,
                          format="%(asctime)s %(name)s [%(levelname)s]: %(message)s",
                          datefmt='%m-%d %H:%M')
      
      logger = logging.getLogger()
      
      # Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah diatur dalam lingkungan runtime.
      # Jika kode proyek Anda bocor, pasangan AccessKey Anda mungkin terancam, membahayakan keamanan semua sumber daya di akun Anda. Kode contoh berikut menggunakan variabel lingkungan untuk mendapatkan pasangan AccessKey. Metode ini hanya untuk referensi. Untuk keamanan yang lebih baik, gunakan token STS.
      access_key = os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
      access_key_secret = os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
      region_id = '<yourRegionId>'  # Masukkan ID wilayah yang Anda dapatkan.
      
      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: Jenis perintah. Nilai valid: RunBatScript, RunPowerShellScript, dan RunShellScript.
          cmdcontent: Isi perintah.
          instance_ids: Daftar ID instans.
          """
          try:
              request = RunCommandRequest(
                  region_id=region_id,
                  type=cmdtype,
                  command_content=cmdcontent,
                  instance_id=instance_ids,
                  timeout=timeout  # Batas waktu eksekusi perintah dalam detik. Nilai default adalah 60. Atur batas waktu yang sesuai berdasarkan perintah yang akan dieksekusi.
              )
              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: Daftar ID instans untuk direstart.
          Force: Menentukan apakah akan memaksa restart instans. Defaultnya adalah 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():
          # Tetapkan jenis perintah Cloud Assistant.
          cmdtype = "RunShellScript"
          # Tetapkan isi perintah Cloud Assistant.
          cmdcontent = """
          #!/bin/bash
          echo helloworld
          """
          # Tetapkan periode batas waktu.
          timeout = 60
          # Masukkan ID instans tempat perintah akan dijalankan dan kemudian direstart.
          ins_ids = ["i-bp185fcs****", "i-bp14wwh****", "i-bp13jbr****"]
      
          # Eksekusi perintah.
          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("Gagal menjalankan perintah, menghentikan eksekusi lebih lanjut")
              return
      
          # Tunggu perintah selesai. Sistem memeriksa status 10 kali dengan interval 5 detik. Konfigurasikan jumlah permintaan dan interval sesuai kebutuhan.
          invoke_result = wait_invoke_finished_get_out(invoke_id, 10, 5)
          for ins_id, res in invoke_result.items():
              logger.info(
                  "instans %s perintah selesai dieksekusi,status: %s,output:%s" % (ins_id, res['status'], res['output']))
      
          # Restart instans.
          logger.warning("restart instans Sekarang")
          reboot_instances(ins_ids)
      
          time.sleep(5)
          # Tunggu instans direstart dan masuk ke status Running. Sistem memeriksa status 30 kali dengan interval 10 detik.
          reboot_result = wait_instance_reboot_ready(ins_ids, 30, 10)
          logger.warning("restart instans Selesai")
          for ins_id, res in reboot_result.items():
              logger.info("instans %s status: %s" % (ins_id, res['status']))
      
      
      if __name__ == '__main__':
          run_task()
      

      Ganti informasi berikut dalam kode contoh dengan informasi yang Anda dapatkan:

      • ID AccessKey:

        access_key = os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']

      • Rahasia AccessKey:

        access_key_secret = os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']

      • ID Wilayah:

        region_id = '<yourRegionId>'

      • ID Instans:

        ins_ids= ["i-bp185fcs****","i-bp14wwh****","i-bp13jbr****"]

    3. Jalankan file .py.

      Gambar berikut menunjukkan hasilnya: perintah dieksekusi pada tiga instans untuk mengeluarkan helloworld, dan kemudian instans secara otomatis direstart.openapi-exec-reboot

Gunakan OOS untuk menjalankan perintah Cloud Assistant untuk me-restart instans dalam batch

Layanan Orkestrasi CloudOps (OOS) adalah layanan O&M otomatis dari Alibaba Cloud. Anda dapat mendefinisikan tindakan O&M dalam Templat dan kemudian mengeksekusi templat untuk menjalankan tugas O&M otomatis.

  1. Pergi ke halaman konfigurasi templat.

    1. Masuk ke Konsol OOS.

    2. Di panel navigasi sebelah kiri, klik Automated Tasks > Custom Templates.

    3. Klik Create Template.

  2. Lengkapi konfigurasi templat.

    1. Di halaman Create Template, pertahankan konfigurasi default dan klik Next.

    2. Klik tab YAML dan masukkan kode berikut.

      Klik untuk melihat kode contoh

      FormatVersion: OOS-2019-06-01
      Description:
        en: Jalankan perintah Cloud Assistant pada beberapa instans ECS secara batch dan kemudian restart mereka.
        name-en: Batch Jalankan Perintah dan Restart Instans ECS
        categories:
          - run_command
      Parameters:
        regionId:
          Type: String
          Description:
            en: ID wilayah.
          Label:
            en: Region
          AssociationProperty: RegionId
          Default: '{{ ACS::RegionId }}'
        targets:
          Type: Json
          Label:
            en: Instans Target   
          AssociationProperty: Targets
          AssociationPropertyMetadata:
            ResourceType: ALIYUN::ECS::Instance
            RegionId: regionId
        commandType:
          Description:
            en: Jenis perintah.
            
          Label:
            en: Tipe Perintah
            
          Type: String
          AllowedValues:
            - RunBatScript
            - RunPowerShellScript
            - RunShellScript
          Default: RunShellScript
        commandContent:
          Description:
            en: Isi perintah untuk dieksekusi pada instans ECS.
            
          Label:
            en: Isi Perintah
            
          Type: String
          MaxLength: 16384
          AssociationProperty: Code
          Default: echo hello
        workingDir:
          Description:
            en: 'Direktori tempat perintah berjalan pada instans ECS. Untuk instans Linux, defaultnya adalah direktori home dari pengguna root (/root). Untuk instans Windows, defaultnya adalah direktori tempat proses klien Cloud Assistant berada, seperti C:\Windows\System32.'
          Label:
            en: Direktori Kerja
            
          Type: String
          Default: ''
        timeout:
          Description:
            en: Batas waktu untuk eksekusi perintah pada instans ECS.  
          Label:
            en: Timeout
          Type: Number
          Default: 600
        enableParameter:
          Description:
            en: Menentukan apakah perintah berisi parameter rahasia atau kustom.
          Label:
            en: Aktifkan Parameter
          Type: Boolean
          Default: false
        username:
          Description:
            en: Nama pengguna yang digunakan untuk menjalankan perintah pada instans ECS.
          Label:
            en: Username
          Type: String
          Default: ''
        windowsPasswordName:
          Description:
            en: Nama kata sandi untuk pengguna yang menjalankan perintah pada instans Windows.
          Label:
            en: Nama Kata Sandi Windows
          Type: String
          Default: ''
          AssociationProperty: SecretParameterName
        rateControl:
          Description:
            en: Rasio konkurensi untuk eksekusi tugas.
          Label:
            en: Kontrol Laju
          Type: Json
          AssociationProperty: RateControl
          Default:
            Mode: Concurrency
            MaxErrors: 0
            Concurrency: 10
        OOSAssumeRole:
          Description:
            en: Peran RAM yang diasumsikan oleh OOS.
          Label:
            en: Peran Diasumsikan OOS 
          Type: String
          Default: OOSServiceRole
      RamRole: '{{ OOSAssumeRole }}'
      Tasks:
        - Name: getInstance
          Description:
            en: Dapatkan instans 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: Eksekusi perintah 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: Restart instans ECS.
          Properties:
            regionId: '{{ regionId }}'
            instanceId: '{{ ACS::TaskLoopItem }}'
          Loop:
            RateControl: '{{ rateControl }}'
            Items: '{{ getInstance.instanceIds }}'
      Outputs:
        instanceIds:
          Type: List
          Value: '{{ getInstance.instanceIds }}'
    3. Klik Create Template.

    4. Di kotak dialog yang muncul, masukkan nama templat runcommand_reboot_instances dan klik Finish Creation.

  3. Eksekusi templat.

    1. Temukan templat yang baru saja Anda buat dan klik Create Execution di kolom Actions.

    2. Lengkapi konfigurasi eksekusi.

      Ikuti petunjuk untuk menyelesaikan konfigurasi. Di halaman Set Parameters, pilih beberapa instans dan pertahankan nilai default untuk pengaturan lainnya.exec-temp

    3. Di halaman Confirm, klik Create.

      Setelah eksekusi dibuat, templat mulai dieksekusi secara otomatis. Anda akan dialihkan ke halaman Basic Information dari eksekusi. Tunggu hingga Execution Status berubah menjadi Succeeded.

  4. Lihat proses eksekusi tugas dan detail setiap node tugas.

    1. Di bagian Execution Steps And Results, klik View Execution Flowchart untuk melihat proses eksekusi.

      image

    2. Klik langkah eksekusi perintah Cloud Assistant. Di tab daftar tugas loop, lihat detail eksekusi setiap node tugas. Gambar berikut menunjukkan bahwa tindakan yang dijadwalkan telah selesai dengan sukses.

      image