Maison  >  Article  >  Opération et maintenance  >  Comment utiliser Cloud Assistant pour automatiser la gestion des instances

Comment utiliser Cloud Assistant pour automatiser la gestion des instances

坏嘻嘻
坏嘻嘻original
2018-09-19 15:37:392752parcourir

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.

Comment utiliser Cloud Assistant pour automatiser la gestion des instances

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é.

Comment utiliser Cloud Assistant pour automatiser la gestion des instances

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.

Comment utiliser Cloud Assistant pour automatiser la gestion des instances

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.

Comment utiliser Cloud Assistant pour automatiser la gestion des instances

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn