Tüm Ürünler
Search
Belge Merkezi

Auto Scaling:Use Alibaba Cloud SDK for Python to execute rolling update tasks

Son Güncelleme:Sep 30, 2026

Alibaba Cloud SDK for Python, karmaşık kodlama gerektirmeden Alibaba Cloud hizmetlerine erişmenizi sağlar. Bu konu, CloudOps Orchestration Service (OOS) tarafından sağlanan API işlemlerini çağırarak kademeli güncelleme görevlerinin Alibaba Cloud SDK for Python ile nasıl yürütüleceğini açıklar.

Genel bilgiler

Kademeli güncelleme görevleri, birden fazla Elastic Compute Service (ECS) örneğinin yapılandırmalarını aynı anda güncellemek için kullanılır. Hizmette durumunda olan ve aynı ölçeklendirme grubuna ait olması gereken birden fazla ECS örneğinde görüntüleri toplu olarak güncellemek, betikler çalıştırmak ve OOS paketleri yüklemek için kademeli güncelleme görevlerinden yararlanabilirsiniz.

Ön koşullar

  • Bir Resource Access Management (RAM) kullanıcısı oluşturun ve bir AccessKey çifti edinin. Daha fazla bilgi için bkz. RAM kullanıcısı için AccessKey oluşturma. Bir API işlemi çağırırken kimlik doğrulamayı tamamlamak için bir AccessKey çifti kullanmanız gerekir.

    Önemli
    • Alibaba Cloud hesabınızın AccessKey çiftini korumak için bir RAM kullanıcısı oluşturmanızı, bu kullanıcıya Auto Scaling hizmetine erişim izinleri vermenizi ve ardından Auto Scaling SDK for Python'u çağırmak için RAM kullanıcısının AccessKey çiftini kullanmanızı öneririz. Daha fazla bilgi için bkz. Auto Scaling için sistem ilkeleri.

    • Bir RAM kullanıcısının AccessKey gizli anahtarı yalnızca AccessKey çifti oluşturulurken görüntülenir. AccessKey çifti oluşturulduktan sonra AccessKey gizli anahtarını görüntüleyemezsiniz. AccessKey çiftini oluşturduktan sonra AccessKey gizli anahtarını güvenli bir konumda saklayın.

  • Ortam değişkenlerini yapılandırın. Daha fazla bilgi için bkz. Linux, macOS ve Windows'ta ortam değişkenlerini yapılandırma. Bu konuda, kimlik doğrulama için Alibaba Cloud Credentials aracını yapılandırmak üzere ALIBABA_CLOUD_ACCESS_KEY_ID ve ALIBABA_CLOUD_ACCESS_KEY_SECRET ortam değişkenleri kullanılır. Bu sayede, sabit kodlanmış düz metin bir AccessKey çiftine ihtiyaç duymadan Alibaba Cloud OpenAPI Explorer'a erişebilirsiniz.

  • Bir ölçeklendirme grubu oluşturun ve ECS örneklerini bu gruba ekleyin. Daha fazla bilgi için bkz. Mevcut örnekten ölçeklendirme grubu oluşturma.

  • Yerel bilgisayarınıza Python 3.6 veya sonraki bir sürüm yükleyin.

Adım 1: Alibaba Cloud SDK for Python'u yükleyin

  1. Alibaba Cloud SDK for Python'un yüklü olup olmadığını kontrol etmek için aşağıdaki komutu çalıştırın.

    python --version

    Alibaba Cloud SDK for Python yüklüyse aşağıdaki çıktı görüntülenir.

    python --version
    Python 3.12.4
  2. OOS bağımlılıklarını yüklemek için aşağıdaki komutu çalıştırın:

    pip install alibabacloud_oos20190601==3.2.1

Adım 2: Kademeli güncelleme görevini yürütün

  1. Bir Python betiği oluşturun ve kademeli güncelleme görevini yürütmek için aşağıdaki örnek kodu girin.

    Koddaki OOS şablon parametreleri hakkında bilgi için bkz. Şablon parametreleri. Örnek kod:

    # -*- 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:
            """
            Use your AccessKey ID and AccessKey secret to initialize the client.
            @return: Client
            @throws Exception
            """
            # If the project code is leaked, the AccessKey pair may be leaked and the security of all resources in your Alibaba Cloud account may be compromised. The following lines are provided for reference only. 
            config = open_api_models.Config(
                # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is configured. ,
                access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is configured. ,
                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:
                # Write code to print the response of the API operation based on your business requirements.
                resp = client.start_execution_with_options(start_execution_request, runtime)
                print(resp.body)
            except Exception as error:
                # Exercise caution when you handle exceptions in actual business scenarios, and do not ignore exceptions in your project. In this example, error messages are printed only for reference. 
                # Display error messages.
                print(error.message)
                # Display information about troubleshooting.
                print(error.data.get("Recommend"))
                UtilClient.assert_as_string(error.message)
    
    if __name__ == '__main__':
        Sample.main(sys.argv[1:])
    
  2. Python betiğini çalıştırın ve yanıtı görüntüleyin.

    Not

    Geri alma görevini yürütürken kaynak kademeli güncelleme görevinin yürütme kimliğini girin. Kaynak kademeli güncelleme görevinin yürütme kimliğini yanıttan alabilirsiniz.

    Kademeli güncelleme görevi başarıyla yürütüldüğünde, yanıttaki ExecutionId (örneğin exec-cxxx2) sonraki geri alma görevleri için gereken kaynak yürütme kimliğidir. Örnek yanıt:

    {"Execution": {"Counters": {"Failed": 0, "Total": 0, "Success": 0}, "CurrentTasks": [], "ExecutedBy": "xxx", "ExecutionId": "exec-cxxx2", "LoopMode": "Automatic", "Mode": "Automatic", "Outputs": "{}", "Parameters": "{\"invokeType\": \"invoke\", \"scalingGroupId\": \"asg-bp1xxx\", \"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\"}", "ResourceGroupId": "rg-axxx", "SafetyCheck": "Skip", "StartDate": "2024-08-13T03:39:27Z", "Status": "Started", "Tags": {"scaling_group": "asg-bp1xxx"}, "TemplateId": "t-3a5f0904084e4a3c8801", "TemplateName": "ACS-ESS-RollingUpdateByRunCommandInScalingGroup", "TemplateVersion": "v17"}, "RequestId": "D4B1C557-0E42-5AD4-A329-AA673ECD2DF1"}

Adım 3: (İsteğe bağlı) Geri alma görevini yürütün

Kademeli güncelleme görevleri yürütülürken özel durumlar oluşursa veya görevler tamamlandıktan sonra önceki yapılandırmaları kullanmak isterseniz ECS örneklerinin yapılandırmalarını geri yüklemek için geri alma görevlerini yürütebilirsiniz.

  1. Bir Python betiği oluşturun ve geri alma görevini yürütmek için aşağıdaki örnek kodu girin.

    Koddaki OOS şablon parametreleri hakkında bilgi için bkz. Şablon parametreleri. Örnek kod:

    # -*- 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:
            """
            Use your AccessKey ID and AccessKey secret to initialize the client.
            @return: Client
            @throws Exception
            """
            # If the project code is leaked, the AccessKey pair may be leaked and the security of all resources in your Alibaba Cloud account may be compromised. The following lines are provided for reference only. 
            config = open_api_models.Config(
                # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is configured. ,
                access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is configured. ,
                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:
                # Write code to print the response of the API operation based on your business requirements.
                resp = client.start_execution_with_options(start_execution_request, runtime)
                print(resp.body)
            except Exception as error:
                # Exercise caution when you handle exceptions in actual business scenarios, and do not ignore exceptions in your project. In this example, error messages are printed only for reference. 
                # Display error messages.
                print(error.message)
                # Display information about troubleshooting.
                print(error.data.get("Recommend"))
                UtilClient.assert_as_string(error.message)
    
    if __name__ == '__main__':
        Sample.main(sys.argv[1:])
    
  2. Python betiğini çalıştırın ve yanıtı görüntüleyin.

    Örnek çıktı:

    {'Execution': {'Counters': {'Failed': 0

Şablon parametreleri

Aşağıdaki tabloda, bu konuda kullanılan ACS-ESS-RollingUpdateByRunCommandInScalingGroup genel şablonunun parametreleri açıklanmaktadır.

Parametre

Açıklama

invokeType

Görev türü. Geçerli değerler:

  • invoke: kademeli güncelleme görevi.

  • rollback: geri alma görevi.

scalingGroupId

Görevin yürütüleceği ölçeklendirme grubu.

commandType

Çalıştırmak istediğiniz betik türü. RunShellScript değeri bir shell betiğini belirtir.

invokeScript

Kademeli güncelleme görevi sırasında ECS örneklerinde çalıştırmak istediğiniz betik.

rollbackScript

Geri alma görevi sırasında ECS örneklerinde çalıştırmak istediğiniz betik.

OOSAssumeRole

Görevi yürütmek için kullanmak istediğiniz RAM rolü. Varsayılan değer: OOSServiceRole.

enterProcess

Görev yürütülmeden önce askıya almak istediğiniz ölçeklendirme işlemi.

exitProcess

Görev yürütüldükten sonra devam ettirmek istediğiniz ölçeklendirme işlemi.

batchNumber

Görev yürütmesi için ölçeklendirme grubundaki ECS örneklerinin bölüneceği toplu iş sayısı. Her toplu iş en az bir ECS örneği içerir.

batchPauseOption

Görevin askıya alınıp alınmayacağını ve nasıl askıya alınacağını belirtir. Geçerli değerler:

  • Automatic: Görev kesinti olmadan yürütülür.

  • FirstBatchPause: İlk toplu iş yürütmesi tamamlandığında görev askıya alınır.

  • EveryBatchPause: Her toplu iş yürütmesi tamamlandığında görev askıya alınır.

sourceExecutionId

Geri alma görevi yürütüldüğünde kaynak kademeli güncelleme görevinin yürütme kimliği.