Heim > Artikel > Betrieb und Instandhaltung > So verwenden Sie Cloud Assistant zur Automatisierung der Instanzverwaltung
Der Inhalt dieses Artikels befasst sich mit der Verwendung des Cloud-Assistenten zur automatischen Verwaltung von Instanzen. Ich hoffe, dass er für Freunde hilfreich ist.
Verwenden Sie Cloud Assistant, um Instanzen automatisch zu verwalten
Der Zweck des Betriebs und der Wartung von ECS-Instanzen besteht darin, die ECS-Instanzen in optimalem Zustand zu halten und die Effizienz der Fehlerbehebung sicherzustellen, aber die manuelle Wartung kostet Sie einen viel Zeit und Energie, deshalb hat Alibaba Cloud einen Cloud-Assistenten entwickelt, um zu lösen, wie tägliche Wartungsaufgaben automatisiert und stapelweise verarbeitet werden können. Dieser Artikel enthält ein Beispiel für die Verwendung der Cloud Assistant-API zum Ausführen entsprechender Befehle für ECS-Instanzen, um den Zweck des automatisierten Betriebs und der Wartung von ECS-Instanzen zu erreichen.
Einführung in die Befehlstypen
Derzeit unterstützt Cloud Assistant die folgenden drei Befehlstypen.
Voraussetzungen
Sie müssen sicherstellen, dass der Netzwerktyp der Ziel-ECS-Instanz privat ist Netzwerk (VPC).
Der Status der Ziel-ECS-Instanz muss „Wird ausgeführt“ lauten.
Auf der Ziel-ECS-Instanz muss der Cloud Assistant-Client vorinstalliert sein. Sie können sich an Alibaba Cloud Assistant wenden, um den Cloud Assistant-Client zu installieren und zu verwenden.
Beim Ausführen eines Befehls vom Typ PowerShell müssen Sie sicherstellen, dass für die Ziel-Windows-Instanz das PowerShell-Modul konfiguriert ist.
Die folgenden Beispiele werden im Befehlszeilentool ausgefüllt. Sie müssen sicherstellen, dass Sie das Alibaba Cloud-Befehlszeilentool CLI (Command-Line Interface) installiert haben.
Windows-Beispiele finden Sie unter „Befehlszeilentools und SDK online installieren“.
Linux-Beispiele finden Sie unter „Befehlszeilentools und SDK online installieren“.
Sie müssen das SDK aktualisieren.
CLI-Konfiguration ändern:
Laden Sie die Datei aliyunOpenApiData.py herunter.
Ersetzen Sie die Datei aliyunOpenApiData.py im Pfad %python_install_path%Libsite-packagesaliyuncli durch die heruntergeladene Datei.
Informationen zur Konfiguration der Alibaba Cloud CLI finden Sie im Dokument „Konfigurieren von Befehlszeilentools und SDK“.
Vorgangsschritte
Das folgende Beispiel zeigt, wie Sie Cloud Assistant über die API in Alibaba Cloud CLI verwenden, um entsprechende Befehle für ECS-Instanzen auszuführen. Nehmen Sie als Beispiel die Ausführung eines echo 123-Befehls.
Führen Sie aliyuncli ecs CreateCommand --CommandContent ZWNobyAxMjM= --Type RunShellScript --Name test --Description test Befehl erstellen (CreateCommand) in CMD, PowerShell oder Shell des lokalen Computers aus.
Führen Sie aliyuncli ecs InvokeCommand --InstanceIds your-vm-instance-id1 instance-id2 --CommandId your-command-id --Timed false aus. Führen Sie den Befehl aus (InvokeCommand). .
Hinweis:
InstanceIds ist Ihre ECS-Instanz-ID, die mehrere ECS-Instanzen unterstützt, bis zu 100.
Timed gibt an, ob es sich um eine periodische Aufgabe handelt, Timed True gibt an, dass es sich um eine periodische Aufgabe handelt, und Timed False gibt an, dass es sich nicht um eine periodische Aufgabe handelt.
Wenn es sich bei Ihrer Aufgabe um eine periodische Aufgabe handelt, d. h. wenn der Parameter „Timed“ „True“ ist, müssen Sie den Zeitraum über den Parameter „Frequenz“ angeben. Beispiel: 0 */20 * * * * bedeutet, dass der Zeitraum ist alle 20 Minuten. Weitere Einzelheiten zu Cron-Ausdrücken finden Sie in der Beschreibung des Cron-Ausdruckswerts.
Das Rückgabeergebnis ist eine gemeinsame InvokeId für alle Ziel-ECS-Instanzen. Mit der InvokeId können Sie die Ausführung des Befehls abfragen.
(Optional) Führen Sie aliyuncli ecs DescribeInvocations --InstanceId your-vm-instance-id --InvokeId your-invoke-id aus, um den Status der Befehlsausführung anzuzeigen (DescribeInvocations). Unter diesen ist InvokeId die Ausführungs-ID, die bei der Ausführung des Befehls für die ECS-Instanz im zweiten Schritt zurückgegeben wird.
Wenn der Rückgabeparameter InvokeStatus Finished ist, bedeutet dies nur, dass die Ausführung des Befehlsprozesses abgeschlossen ist. Es bedeutet nicht, dass der erwartete Befehlseffekt vorliegen muss. Sie müssen die tatsächlichen spezifischen Ausführungsergebnisse überprüfen den Parameter Output in DescribeInvocationResults.
(Optional) Führen Sie aliyuncli ecs DescribeInvocationResults --InstanceId your-vm-instance-id --InvokeId your-invoke-id aus, um die tatsächlichen Ausführungsergebnisse (DescribeInvocationResults) des Befehls für die angegebene ECS-Instanz anzuzeigen. Unter diesen ist InvokeId die Ausführungs-ID, die bei der Ausführung des Befehls für die ECS-Instanz im zweiten Schritt zurückgegeben wird.
Beim Erstellen eines Befehls (CreateCommand) können Sie auch die folgenden Anforderungsparameter für den Befehl festlegen.
Vollständiges Codebeispiel für die Verwendung von Cloud Assistant über das Python SDK
Sie können Cloud Assistant auch über das Alibaba Cloud SDK verwenden. Informationen zur Konfiguration des Alibaba Cloud SDK finden Sie im Dokument „Konfigurieren von Befehlszeilentools und SDK“. Unten finden Sie ein vollständiges Codebeispiel für die Verwendung von Cloud Assistant über das Python SDK.
# 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')
Das obige ist der detaillierte Inhalt vonSo verwenden Sie Cloud Assistant zur Automatisierung der Instanzverwaltung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!