Le contenu de cet article explique comment utiliser l'assistant cloud pour gérer automatiquement les instances. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Utilisez Cloud Assistant pour gérer automatiquement les instances
Le but de l'exploitation et de la maintenance des instances ECS est de maintenir les instances ECS dans un état optimal et d'assurer l'efficacité du dépannage, mais la maintenance manuelle vous coûtera un beaucoup de temps et d'énergie, Alibaba Cloud a donc développé un assistant cloud pour résoudre comment automatiser et traiter par lots les tâches de maintenance quotidiennes. Cet article donne un exemple de la façon d'utiliser l'API Cloud Assistant pour exécuter les commandes correspondantes pour les instances ECS afin d'atteindre l'objectif d'exploitation et de maintenance automatisées des instances ECS.
Introduction au type de commande
Actuellement, Cloud Assistant prend en charge les trois types de commandes suivants.
Prérequis
Vous devez vous assurer que le type de réseau de l'instance ECS cible est un réseau privé réseau (VPC).
L'état de l'instance ECS cible doit être En cours d'exécution.
L'instance ECS cible doit avoir le client Cloud Assistant préinstallé. Vous pouvez vous référer à Alibaba Cloud Assistant pour installer et utiliser le client Cloud Assistant.
Lors de l'exécution d'une commande de type PowerShell, vous devez vous assurer que l'instance Windows cible dispose du module PowerShell configuré.
Les exemples suivants sont complétés dans l'outil de ligne de commande. Vous devez vous assurer que vous avez installé l'outil de ligne de commande Alibaba Cloud CLI (Command-Line Interface).
Pour des exemples Windows, voir Installer les outils de ligne de commande et le SDK en ligne.
Pour des exemples Linux, voir Installer les outils de ligne de commande et le SDK en ligne.
Vous devez mettre à niveau le SDK.
Modifier la configuration CLI :
Télécharger le fichier aliyunOpenApiData.py.
Remplacez le fichier aliyunOpenApiData.py dans le chemin %python_install_path%Libsite-packagesaliyuncli par le fichier téléchargé.
Pour savoir comment configurer Alibaba Cloud CLI, veuillez vous référer au document Configuration des outils de ligne de commande et du SDK.
Étapes de fonctionnement
L'exemple suivant montre comment utiliser Cloud Assistant via l'API dans Alibaba Cloud CLI pour exécuter les commandes correspondantes pour les instances ECS. Prenons l'exemple de l'exécution d'une commande echo 123.
Exécutez aliyuncli ecs CreateCommand --CommandContent ZWNobyAxMjM= --Type RunShellScript --Name test --Description test Créer une commande (CreateCommand) dans CMD, PowerShell ou Shell de l'ordinateur local.
Exécutez aliyuncli ecs InvokeCommand --InstanceIds your-vm-instance-id1 instance-id2 --CommandId your-command-id --Timed false Exécutez la commande (InvokeCommand) .
Remarque :
InstanceIds est votre ID d'instance ECS. Il prend en charge plusieurs instances ECS, jusqu'à 100.
Timed indique s'il s'agit d'une tâche périodique, Timed True indique qu'il s'agit d'une tâche périodique et Timed False indique qu'il ne s'agit pas d'une tâche périodique.
Lorsque votre tâche est une tâche périodique, c'est-à-dire lorsque le paramètre Timed est True, vous devez spécifier la période via le paramètre Frequency, par exemple, 0 */20 * * * * signifie que la période est toutes les 20 minutes. Pour plus de détails sur les expressions Cron, veuillez vous référer à la description de la valeur de l'expression Cron.
Le résultat renvoyé est un InvokeId commun pour toutes les instances ECS cibles. Vous pouvez utiliser InvokeId pour interroger l'exécution de la commande.
(Facultatif) Exécutez aliyuncli ecs DescribeInvocations --InstanceId your-vm-instance-id --InvokeId your-invoke-id pour afficher l'état d'exécution de la commande (DescribeInvocations). Parmi eux, InvokeId est l'ID d'exécution renvoyé lors de l'exécution de la commande pour l'instance ECS dans la deuxième étape.
Lorsque le paramètre de retour InvokeStatus est Terminé, cela signifie uniquement que l'exécution du processus de commande est terminée. Cela ne signifie pas nécessairement qu'il y aura l'effet de commande attendu. Vous devez vérifier les résultats d'exécution spécifiques réels via le. paramètre Sortie dans DescribeInvocationResults.
(Facultatif) Exécutez aliyuncli ecs DescribeInvocationResults --InstanceId your-vm-instance-id --InvokeId your-invoke-id pour afficher les résultats d'exécution réels (DescribeInvocationResults) de la commande pour l'instance ECS spécifiée. Parmi eux, InvokeId est l'ID d'exécution renvoyé lors de l'exécution de la commande pour l'instance ECS dans la deuxième étape.
Lors de la création d'une commande (CreateCommand), vous pouvez également définir les paramètres de requête suivants pour la commande.
Exemple de code complet pour utiliser Cloud Assistant via le SDK Python
Vous pouvez également utiliser Cloud Assistant via le SDK Alibaba Cloud. Pour plus d'informations sur la configuration du SDK Alibaba Cloud, reportez-vous au document Configuration des outils de ligne de commande et du SDK. Vous trouverez ci-dessous un exemple de code complet pour utiliser Cloud Assistant via le SDK Python.
# coding=utf-8 # if the python sdk is not install using 'sudo pip install aliyun-python-sdk-ecs' # if the python sdk is install using 'sudo pip install --upgrade aliyun-python-sdk-ecs' # make sure the sdk version is 2.1.2, you can use command 'pip show aliyun-python-sdk-ecs' to check import json import logging import os import time import datetime import base64 from aliyunsdkcore import client from aliyunsdkecs.request.v20140526.CreateCommandRequest import CreateCommandRequest from aliyunsdkecs.request.v20140526.InvokeCommandRequest import InvokeCommandRequest from aliyunsdkecs.request.v20140526.DescribeInvocationResultsRequest import DescribeInvocationResultsRequest # configuration the log output formatter, if you want to save the output to file, # append ",filename='ecs_invoke.log'" after datefmt. logging.basicConfig(level=logging.INFO, format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S',filename='aliyun_assist_openapi_test.log', filemode='w') #access_key = 'Your Access Key Id' #acess_key_secrect = 'Your Access Key Secrect' #region_name = 'cn-shanghai' #zone_id = 'cn-shanghai-b' access_key = 'LTAIXXXXXXXXXXXX' acess_key_secrect = '4dZXXXXXXXXXXXXXXXXXXXXXXXX' region_name = 'cn-hangzhou' zone_id = 'cn-hangzhou-f' clt = client.AcsClient(access_key, acess_key_secrect, region_name) def create_command(command_content, type, name, description): request = CreateCommandRequest() request.set_CommandContent(command_content) request.set_Type(type) request.set_Name(name) request.set_Description(description) response = _send_request(request) if response is None: return None command_id = response.get('CommandId') return command_id; def invoke_command(instance_id, command_id, timed, cronat): request = InvokeCommandRequest() request.set_Timed(timed) InstanceIds = [instance_id] request.set_InstanceIds(InstanceIds) request.set_CommandId(command_id) request.set_Frequency(cronat) response = _send_request(request) invoke_id = response.get('InvokeId') return invoke_id; def get_task_output_by_id(instance_id, invoke_id): logging.info("Check instance %s invoke_id is %s", instance_id, invoke_id) request = DescribeInvocationResultsRequest() request.set_InstanceId(instance_id) request.set_InvokeId(invoke_id) response = _send_request(request) invoke_detail = None output = None if response is not None: result_list = response.get('Invocation').get('InvocationResults').get('InvocationResult') for item in result_list: invoke_detail = item output = base64.b64decode(item.get('Output')) break; return output; def execute_command(instance_id): command_str = 'yum check-update' command_id = create_command(base64.b64encode(command_str), 'RunShellScript', 'test', 'test') if(command_id is None): logging.info('create command failed') return invoke_id = invoke_command(instance_id, command_id, 'false', '') if(invoke_id is None): logging.info('invoke command failed') return time.sleep(15) output = get_task_output_by_id(instance_id, invoke_id) if(output is None): logging.info('get result failed') return logging.info("output: %s is \n", output) # send open api request def _send_request(request): request.set_accept_format('json') try: response_str = clt.do_action(request) logging.info(response_str) response_detail = json.loads(response_str) return response_detail except Exception as e: logging.error(e) if __name__ == '__main__': execute_command('i-bp17zhpbXXXXXXXXXXXXX')
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!