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.
ÖnemliAlibaba 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_IDveALIBABA_CLOUD_ACCESS_KEY_SECRETortam 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
-
Alibaba Cloud SDK for Python'un yüklü olup olmadığını kontrol etmek için aşağıdaki komutu çalıştırın.
python --versionAlibaba Cloud SDK for Python yüklüyse aşağıdaki çıktı görüntülenir.
python --version Python 3.12.4 -
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
-
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:]) -
Python betiğini çalıştırın ve yanıtı görüntüleyin.
NotGeri 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ğinexec-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.
-
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:]) -
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:
|
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:
|
sourceExecutionId | Geri alma görevi yürütüldüğünde kaynak kademeli güncelleme görevinin yürütme kimliği. |