All Products
Search
Document Center

Auto Scaling:Gunakan Alibaba Cloud SDK untuk Python untuk menjalankan tugas pembaruan bergulir

Last Updated:Jul 06, 2025

Alibaba Cloud SDK untuk Python memungkinkan Anda mengakses layanan Alibaba Cloud tanpa perlu melakukan pengkodean yang kompleks. Topik ini menjelaskan cara menggunakan Alibaba Cloud SDK untuk Python guna memanggil operasi API yang disediakan oleh CloudOps Orchestration Service (OOS) untuk menjalankan tugas pembaruan bergulir.

Informasi latar belakang

Tugas pembaruan bergulir dapat digunakan untuk memperbarui konfigurasi beberapa instance Elastic Compute Service (ECS) secara bersamaan. Anda dapat menggunakan tugas pembaruan bergulir untuk memperbarui gambar secara batch, mengeksekusi skrip, dan menginstal paket OOS pada beberapa instance ECS dalam status In Service. Instance ECS harus termasuk dalam grup penskalaan yang sama.

Prasyarat

  • Pengguna Resource Access Management (RAM) telah dibuat dan pasangan AccessKey diperoleh. Untuk informasi lebih lanjut, lihat Buat Pasangan AccessKey untuk Pengguna RAM. Saat memanggil operasi API, Anda harus menggunakan pasangan AccessKey untuk menyelesaikan autentikasi identitas.

    Penting
    • Untuk melindungi pasangan AccessKey akun Alibaba Cloud Anda, kami sarankan Anda membuat pengguna RAM, memberikan izin kepada pengguna RAM untuk mengakses Auto Scaling, dan kemudian menggunakan pasangan AccessKey dari pengguna RAM untuk memanggil Auto Scaling SDK untuk Python. Untuk informasi lebih lanjut, lihat Kebijakan Sistem untuk Auto Scaling.

    • Rahasia AccessKey pengguna RAM hanya ditampilkan saat Anda membuat pasangan AccessKey. Anda tidak dapat melihat rahasia AccessKey setelah pasangan AccessKey dibuat. Setelah membuat pasangan AccessKey, simpan rahasia AccessKey di lokasi yang aman.

  • Variabel lingkungan telah dikonfigurasi. Untuk informasi lebih lanjut, lihat Konfigurasikan Variabel Lingkungan di Linux, macOS, dan Windows. Dalam topik ini, variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET digunakan untuk mengonfigurasi alat Kredensial Alibaba Cloud untuk verifikasi identitas. Ini memungkinkan Anda mengakses Alibaba Cloud OpenAPI Explorer tanpa perlu pasangan AccessKey plaintext yang di-hardcode.

  • Grup penskalaan telah dibuat dan instance ECS telah ditambahkan ke grup penskalaan. Untuk informasi lebih lanjut, lihat Buat Grup Penskalaan Berdasarkan Instance ECS yang Ada.

  • Python 3.6 atau yang lebih baru telah diinstal di komputer lokal Anda.

Langkah 1: Instal Alibaba Cloud SDK untuk Python

  1. Jalankan perintah berikut untuk memeriksa apakah Alibaba Cloud SDK untuk Python telah diinstal.

    python --version

    Jika Alibaba Cloud SDK untuk Python telah diinstal, keluaran berikut akan ditampilkan. 2024-07-08_13-37-07.png

  2. Jalankan perintah berikut untuk menginstal dependensi OOS:

    pip install alibabacloud_oos20190601==3.2.1

Langkah 2: Jalankan tugas pembaruan bergulir

  1. Buat skrip Python dan masukkan kode contoh berikut untuk menjalankan tugas pembaruan bergulir.

    Untuk informasi tentang parameter template OOS dalam kode, lihat Parameter Template. Contoh kode:

    # -*- coding: utf-8 -*-
    import os
    import sys
    
    from typing import List
    
    from alibabacloud_oos20190601.client import Client as oos20190601Client
    from alibabacloud_tea_openapi import models as open_api_models
    from alibabacloud_oos20190601 import models as oos_20190601_models
    from alibabacloud_tea_util import models as util_models
    from alibabacloud_tea_util.client import Client as UtilClient
    
    
    class Sample:
        def __init__(self):
            pass
    
        @staticmethod
        def create_client() -> oos20190601Client:
            """
            Gunakan ID AccessKey dan Rahasia AccessKey Anda untuk menginisialisasi klien.
            @return: Client
            @throws Exception
            """
            # Jika kode proyek bocor, pasangan AccessKey mungkin bocor dan keamanan semua sumber daya di akun Alibaba Cloud Anda mungkin terganggu. Baris berikut disediakan hanya untuk referensi.
            config = open_api_models.Config(
                # Diperlukan. Pastikan bahwa variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dikonfigurasi.,
                access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                # Diperlukan. Pastikan bahwa variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET dikonfigurasi.,
                access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
            )
            config.endpoint = f'oos.cn-hangzhou.aliyuncs.com'
            return oos20190601Client(config)
    
        @staticmethod
        def main(
                args: List[str],
        ) -> None:
            client = Sample.create_client()
            tags = {
                'scaling_group': 'asg-bp1******'
            }
            start_execution_request = oos_20190601_models.StartExecutionRequest(
                region_id='cn-hangzhou',
                template_name='ACS-ESS-RollingUpdateByRunCommandInScalingGroup',
                parameters='''{"invokeType": "invoke",
                            "scalingGroupId": "asg-bp1******",
                            "commandType": "RunShellScript",
                            "invokeScript": "df -h;ifconfig",
                            "rollbackScript": "df -h;ifconfig",
                            "OOSAssumeRole": "",
                            "exitProcess": [
                                "ScaleIn",
                                "ScaleOut",
                                "HealthCheck",
                                "AlarmNotification",
                                "ScheduledAction"
                            ],
                            "enterProcess": [
                                "ScaleIn",
                                "ScaleOut",
                                "HealthCheck",
                                "AlarmNotification",
                                "ScheduledAction"
                            ],
                            "batchNumber": 2,
                            "batchPauseOption": "Automatic"}''',
                tags=tags
            )
            runtime = util_models.RuntimeOptions()
            try:
                # Tulis kode untuk mencetak respons dari operasi API berdasarkan kebutuhan bisnis Anda.
                resp = client.start_execution_with_options(start_execution_request, runtime)
                print(resp.body)
            except Exception as error:
                # Berhati-hatilah saat Anda menangani pengecualian dalam skenario bisnis aktual, dan jangan abaikan pengecualian dalam proyek Anda. Dalam contoh ini, pesan kesalahan dicetak hanya untuk referensi.
                # Tampilkan pesan kesalahan.
                print(error.message)
                # Tampilkan informasi tentang pemecahan masalah.
                print(error.data.get("Recommend"))
                UtilClient.assert_as_string(error.message)
    
    if __name__ == '__main__':
        Sample.main(sys.argv[1:])
    
  2. Jalankan skrip Python dan lihat responsnya.

    Catatan

    Saat mengeksekusi tugas pembatalan, masukkan ID eksekusi dari tugas pembaruan bergulir sumber. Anda dapat memperoleh informasi seperti ID eksekusi dari tugas pembaruan bergulir sumber dalam keluaran perintah, seperti yang ditunjukkan pada gambar berikut.

    image

Langkah 3: (Opsional) Jalankan tugas pembatalan

Jika pengecualian terjadi saat tugas pembaruan bergulir dijalankan atau Anda ingin menggunakan konfigurasi sebelumnya setelah tugas pembaruan bergulir dijalankan, Anda dapat menjalankan tugas pembatalan untuk memulihkan konfigurasi instance ECS.

  1. Buat skrip Python dan masukkan kode contoh berikut untuk menjalankan tugas pembatalan.

    Untuk informasi tentang parameter template OOS dalam kode, lihat Parameter Template. Contoh kode:

    # -*- coding: utf-8 -*-
    import os
    import sys
    
    from typing import List
    
    from alibabacloud_oos20190601.client import Client as oos20190601Client
    from alibabacloud_tea_openapi import models as open_api_models
    from alibabacloud_oos20190601 import models as oos_20190601_models
    from alibabacloud_tea_util import models as util_models
    from alibabacloud_tea_util.client import Client as UtilClient
    
    
    class Sample:
        def __init__(self):
            pass
    
        @staticmethod
        def create_client() -> oos20190601Client:
            """
            Gunakan ID AccessKey dan Rahasia AccessKey Anda untuk menginisialisasi klien.
            @return: Client
            @throws Exception
            """
            # Jika kode proyek bocor, pasangan AccessKey mungkin bocor dan keamanan semua sumber daya di akun Alibaba Cloud Anda mungkin terganggu. Baris berikut disediakan hanya untuk referensi.
            config = open_api_models.Config(
                # Diperlukan. Pastikan bahwa variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dikonfigurasi.,
                access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                # Diperlukan. Pastikan bahwa variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET dikonfigurasi.,
                access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
            )
            config.endpoint = f'oos.cn-hangzhou.aliyuncs.com'
            return oos20190601Client(config)
    
        @staticmethod
        def main(
                args: List[str],
        ) -> None:
            client = Sample.create_client()
            tags = {
                'scaling_group': 'asg-bp1******'
            }
            start_execution_request = oos_20190601_models.StartExecutionRequest(
                region_id='cn-hangzhou',
                template_name='ACS-ESS-RollingUpdateByRunCommandInScalingGroup',
                parameters='''{"invokeType": "rollback",
                            "scalingGroupId": "asg-bp1******",
                            "commandType": "RunShellScript",
                            "rollbackScript": "df -h;ifconfig",
                            "OOSAssumeRole": "",
                            "sourceExecutionId": "exec-c1******",
                            "batchNumber": 2,
                            "batchPauseOption": "Automatic"}''',
                tags=tags
            )
            runtime = util_models.RuntimeOptions()
            try:
                # Tulis kode untuk mencetak respons dari operasi API berdasarkan kebutuhan bisnis Anda.
                resp = client.start_execution_with_options(start_execution_request, runtime)
                print(resp.body)
            except Exception as error:
                # Berhati-hatilah saat Anda menangani pengecualian dalam skenario bisnis aktual, dan jangan abaikan pengecualian dalam proyek Anda. Dalam contoh ini, pesan kesalahan dicetak hanya untuk referensi.
                # Tampilkan pesan kesalahan.
                print(error.message)
                # Tampilkan informasi tentang pemecahan masalah.
                print(error.data.get("Recommend"))
                UtilClient.assert_as_string(error.message)
    
    
    if __name__ == '__main__':
        Sample.main(sys.argv[1:])
    
  2. Jalankan skrip Python dan lihat responsnya.

    Gambar berikut menunjukkan sebuah contoh.image

Parameter template

Tabel berikut menjelaskan parameter template publik ACS-ESS-RollingUpdateByRunCommandInScalingGroup yang digunakan dalam topik ini.

Parameter

Deskripsi

invokeType

Jenis tugas. Nilai yang valid:

  • invoke: tugas pembaruan bergulir.

  • rollback: tugas pembatalan.

scalingGroupId

Grup penskalaan tempat Anda ingin mengeksekusi tugas.

commandType

Jenis skrip yang ingin Anda eksekusi. Nilai RunShellScript menentukan skrip shell.

invokeScript

Skrip yang ingin Anda eksekusi pada instance ECS selama tugas pembaruan bergulir.

rollbackScript

Skrip yang ingin Anda eksekusi pada instance ECS selama tugas pembatalan.

OOSAssumeRole

Peran RAM yang ingin Anda gunakan untuk mengeksekusi tugas. Nilai default: OOSServiceRole.

enterProcess

Proses penskalaan yang ingin Anda jeda sebelum tugas dieksekusi.

exitProcess

Proses penskalaan yang ingin Anda lanjutkan setelah tugas dieksekusi.

batchNumber

Jumlah batch ke dalam mana instance ECS dalam grup penskalaan dibagi untuk eksekusi tugas. Setiap batch berisi setidaknya satu instance ECS.

batchPauseOption

Menentukan apakah dan bagaimana menangguhkan tugas. Nilai yang valid:

  • Otomatis: Tugas dieksekusi tanpa gangguan.

  • FirstBatchPause: Tugas ditangguhkan ketika eksekusi batch pertama selesai.

  • EveryBatchPause: Tugas ditangguhkan ketika setiap eksekusi batch selesai.

sourceExecutionId

ID eksekusi dari tugas pembaruan bergulir sumber saat tugas pembatalan dieksekusi.