O Alibaba Cloud SDK for Python permite acessar os serviços da Alibaba Cloud sem a necessidade de codificação complexa. Este tópico descreve como usar o Alibaba Cloud SDK for Python para chamar operações de api fornecidas pelo CloudOps Orchestration service (OOS) para executar tarefas de atualização contínua.
Informações gerais
As tarefas de atualização contínua permitem atualize as configurações de várias instâncias do Elastic Compute Service (ECS) simultaneamente. Com essas tarefas, é possível atualize imagens em lote, executar scripts e instale pacotes OOS em várias instâncias ECS que estejam no estado In service. As instâncias ECS devem pertencer ao mesmo grupo de dimensionamento.
Pré-requisitos
-
Um usuário do Resource Access Management (ram) foi criado e um par de AccessKey foi obtido. Para mais informações, consulte crie an AccessKey for a ram user. Ao chamar uma operação de api, você deve usar um par de AccessKey para concluir a autenticação de identidade.
ImportantePara proteger o par de AccessKey da sua conta Alibaba Cloud, recomendamos crie um usuário ram, conceder as permissões de acesso ao Auto Scaling e, em seguida, usar o par de AccessKey desse usuário ram para chamar o Auto Scaling sdk for Python. Para mais informações, consulte System policies for Auto Scaling.
O AccessKey secret de um usuário ram é exibido apenas no momento da criação do par de AccessKey. Não é possível visualize o AccessKey secret após a criação. Depois de crie o par de AccessKey, armazene o AccessKey secret em um local seguro.
As variáveis de ambiente estão configuradas. Para mais informações, consulte configure environment variables on Linux, macOS, and Windows. Neste tópico, as variáveis de ambiente
ALIBABA_CLOUD_ACCESS_KEY_IDeALIBABA_CLOUD_ACCESS_KEY_SECRETsão usadas para configure a ferramenta Alibaba Cloud Credentials para verificação de identidade. Isso permite acessar o Alibaba Cloud openapi Explorer sem a necessidade de um par de AccessKey em texto simples codificado diretamente no código.Um grupo de dimensionamento foi criado e instâncias ECS foram adicionadas a ele. Para mais informações, consulte crie scaling group from existing instance.
Python 3.6 or later is installed no seu computador local.
Etapa 1: instale o Alibaba Cloud sdk for Python
-
Execute o comando a seguir para verificar se o Alibaba Cloud sdk for Python está instalado.
python --versionSe o Alibaba Cloud sdk for Python estiver instalado, a seguinte saída será exibida.
python --version Python 3.12.4 -
Execute o comando a seguir para instale as dependências do OOS:
pip install alibabacloud_oos20190601==3.2.1
Etapa 2: Executar uma tarefa de atualização contínua
-
crie um script Python e insira o código de exemplo a seguir para executar uma tarefa de atualização contínua.
Para informações sobre os parâmetros do modelo OOS no código, consulte Template parameters. Código de exemplo:
# -*- 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:]) -
Execute o script Python e visualize a resposta.
NotaAo executar uma tarefa de rollback, insira o ID de execução da tarefa de atualização contínua de origem. Você pode obter esse ID de execução a partir da resposta.
Após a execução bem-sucedida da tarefa de atualização contínua, o
ExecutionId(comoexec-cxxx2) na resposta é o ID de execução de origem necessário para tarefas de rollback subsequentes. Exemplo de resposta:{"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"}
Etapa 3: (Opcional) Executar uma tarefa de rollback
Se ocorrerem exceções durante a execução de tarefas de atualização contínua ou se você quiser restaurar configurações anteriores após a execução dessas tarefas, é possível executar tarefas de rollback para restaurar as configurações das instâncias ECS.
-
crie um script Python e insira o código de exemplo a seguir para executar uma tarefa de rollback.
Para informações sobre os parâmetros do modelo OOS no código, consulte Template parameters. Código de exemplo:
# -*- 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:]) -
Execute o script Python e visualize a resposta.
Exemplo de saída:
{'Execution': {'Counters': {'Failed': 0
Parâmetros do modelo
A tabela a seguir descreve os parâmetros do modelo público ACS-ESS-RollingUpdateByRunCommandInScalingGroup utilizado neste tópico.
Parâmetro | Descrição |
invokeType | O tipo da tarefa. Valores válidos:
|
scalingGroupId | O grupo de dimensionamento no qual você deseja executar a tarefa. |
commandType | O tipo de script a ser executado. O valor RunShellScript especifica um script shell. |
invokeScript | O script a ser executado nas instâncias ECS durante uma tarefa de atualização contínua. |
rollbackScript | O script a ser executado nas instâncias ECS durante uma tarefa de rollback. |
OOSAssumeRole | A função ram a ser usada para executar a tarefa. Valor padrão: OOSServiceRole. |
enterProcess | O processo de dimensionamento a ser suspenso antes da execução da tarefa. |
exitProcess | O processo de dimensionamento a ser retomado após a execução da tarefa. |
batchNumber | O número de lotes nos quais as instâncias ECS do grupo de dimensionamento são divididas para execução da tarefa. Cada lote contém pelo menos uma instância ECS. |
batchPauseOption | Especifica se e como a tarefa deve ser suspensa. Valores válidos:
|
sourceExecutionId | O ID de execução da tarefa de atualização contínua de source ao executar a tarefa de rollback. |