Befehle auf einer Instanz ausführen

Sie können Compute-Instanzen remote konfigurieren und verwalten sowie Fehler damit beheben, indem Sie Skripte innerhalb der Instanz mit dem Befehlsausführungsfeature ausführen.

Beispiel: Mit dem Befehlsausführungsfeature können Sie Aufgaben wie das Konfigurieren sekundärer virtueller Netzwerkschnittstellenkarten (VNICs), das Verbinden von Instanzen mit einem Identitätsprovider, die Fehlerbehebung von SSH-Konnektivität oder die Reaktion auf regionsübergreifende Disaster-Recovery-Szenarios automatisieren.

Sie können Befehle auch dann auf einer Instanz ausführen, wenn die Instanz keinen SSH-Zugriff oder keine geöffneten eingehenden Ports aufweist.

Das Befehlsausführungsfeature verwendet das Compute Instance Run Command-Plug-in, das von der Oracle Cloud Agent-Software verwaltet wird.

Achtung

Verwenden Sie das Befehlsausführungsfeature nicht, um Kennwörter, Secrets oder andere vertrauliche Informationen in Klartext anzugeben oder abzurufen. Mit einem Überblick über Object Storage-Verzeichnis können Sie die Skriptdatei und -antwort sicher angeben und abrufen. Verwalten Sie Schlüssel und geheime Zugangsdaten mit Oracle Cloud Infrastructure Vault.

Informationen zu Berechtigungen finden Sie unter Erforderliche IAM-Policy für das Arbeiten mit Instanzen.

Unterstützte Images

Das Befehlsausführungsfeature wird auf Compute-Instanzen unterstützt, die die folgenden Plattformimages verwenden:

  • Oracle Autonomous Linux
  • Oracle Linux
  • CentOS
  • Windows Server

Unterstützte Images, die auf einem unterstützten Plattformimage basieren, unterstützen das Befehlsausführungsfeature ebenfalls.

Einschränkungen und Überlegungen

  • Bei Linux-Instanzen wird das Skript standardmäßig in einer Bash-Shell ausgeführt. Um das Skript mit einem anderen Programm auszuführen, verwenden Sie #!/<path_to_program> als erste Zeile des Skripts.
  • Bei Windows-Instanzen wird das Skript standardmäßig in einer Batchshell ausgeführt. Um das Skript mit PowerShell auszuführen, verwenden Sie #ps1 als erste Zeile des Skripts.

    Beispiel für PowerShell-Skript anzeigen

    Das folgende Beispiel verwendet PowerShell, um den Instanzmetadatenservice abzufragen und die Instanz-OCID auszugeben:

    #ps1
    $instance = Invoke-RestMethod -Headers @{'Authorization' = 'Bearer Oracle'} -Uri http://169.254.169.254/opc/v2/instance/
    Write-Host ('Instance OCID is ' + $($instance.id))
  • Die maximale Größe für eine Skriptdatei, die Sie direkt im Klartext in eine Instanz hochladen, beträgt 4 KB. Um eine größere Datei bereitzustellen, speichern Sie die Datei in einem Object Storage-Speicherort.
  • Die Ausgabe eines Skripts als Klartext ist auf die letzten 1 KB beschränkt. Um eine größere Antwort zu speichern, speichern Sie die Ausgabe in einem Object Storage-Speicherort.
  • Wenn Sie einen Object Storage-Speicherort zum Speichern der Skriptdatei oder -antwort verwenden, muss die Instanz über ausgehende Konnektivität verfügen, wie ein Network Access Translation-(NAT-)Gateway, ein Servicegateway oder ein Internetgateway. Die Instanz muss auch Egress-Traffic auf Port 443 für die Oracle Cloud Agent-Software, Object Storage und IAM zulassen.
  • Standardmäßig können jeweils zwei Skripte gleichzeitig ausgeführt werden. Um die Standardeinstellung zu ändern, aktualisieren Sie die Konfigurationsdatei des Ausführungsbefehls:

    cat /etc/oracle-cloud-agent/plugins/runcommand/config.yml

    Legen Sie die folgenden Parameter fest:

    logDir: /var/log/oracle-cloud-agent/plugins/runcommand
    commandExecutionMaxWorkers: <number-of-parallel-scripts>
  • Maximal fünf Skripte können gleichzeitig aktiv sein. Ein Skript gilt als aktiv, wenn es vom Compute Instance Run Command-Plug-in empfangen, aber noch nicht aus der Queue gelöscht wurde.
  • Um Aufgaben mit langer Ausführungszeit auszuführen, verwenden Sie das Befehlsausführungsfeature, um einen Cron-Job auf der Instanz zu planen. Befehlsorchestrierung wird nicht unterstützt.
  • Jedes Skript wird einmal ausgeführt. Wenn ein Skript mehrmals ausgeführt werden soll, konfigurieren Sie mit Cron einen Zeitplan für das Skript.
  • Skripte, die Prompts zur Eingabe von Informationen enthalten, werden nicht unterstützt. Mit dem Instance Metadata Service (IMDS) können Sie jedoch programmgesteuert Informationen zur Instanz abrufen, auf der das Skript ausgeführt wird.
  • Wenn Sie eine Instanz aus einem benutzerdefinierten Image erstellen, für das bereits Berechtigungen für das Compute-Instanzausführungsbefehl-Plug-in konfiguriert wurden, ersetzen Sie 101-oracle-cloud-agent-run-command durch 100-oracle-cloud-agent-run-command in der Konfigurationsdatei.
  • Die zurückgegebenen Exitcodes sind Standard-Linux-Fehlercodes. Der Exitcode 0 gibt einen erfolgreichen Vorgang an.
  • Wenn Sie einen optionalen Timeout für ein Skript anwenden, ist der Standardwert 1 Stunde. Der Höchstwert beträgt 24 Stunden.
  • Die maximale Ausführungszeit für ein Skript beträgt 1 Tag.
  • Verwenden Sie Metriken, um die von Skripten verbrauchten Ressourcen zu überwachen, wie die CPU-Auslastung.
  • Das Abbrechen eines Skripts kann nicht immer erfolgreich abgeschlossen werden. Befehle können nicht abgebrochen werden, nachdem sie abgeschlossen wurden oder abgelaufen sind.
  • Skriptdateien und Antworten, die im Klartext gespeichert werden, werden sieben Tage lang aufbewahrt. Skriptdateien und Antworten, die in einem Object Storage-Speicherort gespeichert sind, werden beibehalten, bis Sie sie löschen.
  • Führen Sie kein Skript aus, das dazu führt, dass die Oracle Cloud Agent-Software oder das Compute Instance Run Command-Plug-in gestoppt wird.

Befehle mit Administratorberechtigungen ausführen

Wenn ein Befehl Administratorberechtigungen erfordert, müssen Sie dem Compute Instance Run Command-Plug-in Administratorberechtigungen erteilen, um den Befehl ausführen zu können. Das Plug-in wird als Benutzer ocarun ausgeführt.

Sie können cloud-init (cloudbase-init unter Windows) verwenden, um Berechtigungen beim Instanzstart zu konfigurieren, oder eine Verbindung zu einer Instanz herstellen, nachdem sie gestartet wurde, und Berechtigungen manuell konfigurieren. Die Schritte zum Erteilen von Administratorberechtigungen hängen vom Betriebssystem ab.

So erteilen Sie sudo-Berechtigungen für Linux-Instanzen

  1. Erstellen Sie auf der Instanz eine sudoers-Konfigurationsdatei für das Compute Instance Run Command-Plug-in:

    vi ./101-oracle-cloud-agent-run-command
  2. Ermöglichen Sie dem Benutzer ocarun, alle Befehle als sudo auszuführen, indem Sie der Konfigurationsdatei die folgende Zeile hinzufügen:

    ocarun ALL=(ALL) NOPASSWD:ALL

    Sie können optional bestimmte Befehle auflisten. Weitere Informationen finden Sie auf der Linux-Manpage für sudoers.

  3. Prüfen Sie, ob die Syntax in der Konfigurationsdatei korrekt ist:

    visudo -cf ./101-oracle-cloud-agent-run-command

    Wenn die Syntax korrekt ist, wird die folgende Meldung zurückgegeben:

    ./101-oracle-cloud-agent-run-command: parsed OK
  4. Fügen Sie die Konfigurationsdatei zu /etc/sudoers.d hinzu:

    sudo cp ./101-oracle-cloud-agent-run-command /etc/sudoers.d/

So erteilen Sie Administratorberechtigungen für Windows-Instanzen

  1. Führen Sie den folgenden Befehl in PowerShell auf der Instanz aus:

    Add-LocalGroupMember -Group "Administrators" -Member "NT SERVICE\OCARUN" | Restart-Service -Name OCARUN -Force

Bevor Sie beginnen

  • Das Compute Instance Run Command-Plug-in muss auf der Instanz aktiviert sein, und Plug-ins müssen ausgeführt werden. Weitere Informationen zum Aktivieren und Ausführen von Plug-ins finden Sie unter Oracle Cloud Agent.
  • Sie haben das auszuführende Skript vorbereitet. Wir empfehlen, den Befehl in einer Nicht-Produktionsumgebung zu testen, bevor Sie ihn auf Instanzen bereitstellen, die Produktionsworkflows ausführen.
  • Um die Skriptdatei aus einem Object Storage-Speicherort bereitzustellen, laden Sie die Imagedatei in einen Object Storage-Bucket in derselben Region wie die Zielinstanz hoch. Notieren Sie sich den Bucket- und Dateinamen oder die Object Storage-URL für die Datei. Um denselben Befehl mandantenübergreifend zu verwenden, erstellen Sie eine vorab authentifizierte Anforderungs-URL, die auf die Datei zeigt.
  • Um die Befehlsausgabe in einem Object Storage-Speicherort zu speichern, erstellen Sie einen Bucket zum Speichern in derselben Region wie die Zielinstanz. Notieren Sie sich den Bucket-Namen oder die Object Storage-URL für den Bucket. Optional können Sie die Befehlsausgabe mit einer vorab authentifizierten Anforderung speichern, die auf einen Object Storage-Speicherort verweist.
  • Für Plattformimages, die vor Oktober 2020 freigegeben wurden, muss die Oracle Cloud Agent-Software auf eine Version aktualisiert werden, die das Compute Instance Run Command-Plug-in unterstützt (Version 1.5.1 oder höher).

Konsole verwenden

So erstellen Sie einen Befehl zur Ausführung auf einer Instanz
  1. Öffnen Sie das Navigationsmenü, und klicken Sie auf Compute. Klicken Sie unter Compute auf Instanzen.
  2. Klicken Sie auf die gewünschte Instanz.
  3. Klicken Sie unter Ressourcen auf Befehl ausführen.
  4. Klicken Sie auf Befehl erstellen.
  5. Geben Sie einen Namen für den Befehl ein. Vermeiden Sie die Eingabe von vertraulichen Informationen.
  6. Geben Sie im Feld Timeout in Sekunden die Zeitspanne ein, die dem Compute Instance Run Command-Plug-in zur Ausführung des Befehls auf der Instanz vor dem Timeout eingeräumt werden soll. Der Timer beginnt, wenn das Plug-in den Befehl startet. Geben Sie 0 ein, um keinen Timeout festzulegen.
  7. Laden Sie im Abschnitt Skript hinzufügen das Skript hoch, das das Compute Instance Run Command-Plug-in auf der Instanz ausführen soll. Wählen Sie eine der folgenden Optionen aus:

    • Skript einfügen: Fügen Sie den Befehl in das Feld ein.
    • Datei auswählen: Laden Sie das Skript als Textdatei (.txt) hoch. Navigieren Sie zur Datei, die Sie hochladen möchten, oder verschieben Sie die Datei per Drag-and-Drop in das Feld.
    • Aus Objektspeicher-Bucket importieren: Wählen Sie den Bucket aus, der die Skriptdatei enthält. Geben Sie im Feld Objektname den Dateinamen ein.
    • Aus Objektspeicher-URL importieren: Geben Sie die Objektspeicher-URL für die Skriptdatei ein.
  8. Wählen Sie im Abschnitt Ausgabetyp den Speicherort aus, in dem die Ausgabe des Befehls gespeichert werden soll:

    • Als Text ausgeben: Die Ausgabe wird als Klartext gespeichert. Sie können die Ausgabe auf der Seite "Instanzdetails" prüfen.
    • An Objektspeicher-Bucket ausgeben: Die Ausgabe wird in einem Object Storage-Bucket gespeichert. Wählen Sie einen Bucket aus. Geben Sie im Feld Objektname einen Namen für die Ausgabedatei ein. Vermeiden Sie die Eingabe von vertraulichen Informationen.
    • An Objektspeicher-URL ausgeben: Die Ausgabe wird in einer Objektspeicher-URL gespeichert. Geben Sie die URL ein.
  9. Klicken Sie auf Befehl erstellen.
So zeigen Sie die Ausgabe eines Befehls an

Wenn die Befehlsausgabe in einem Object Storage-Speicherort gespeichert wurde, laden Sie das Antwortobjekt aus dem Bucket herunter, in dem es gespeichert wurde, oder navigieren Sie zur vorab authentifizierten Object Storage-Anforderungs-URL.

Wenn die Befehlsausgabe als Klartextdatei gespeichert wurde, gehen Sie wie folgt vor:

  1. Öffnen Sie das Navigationsmenü, und klicken Sie auf Compute. Klicken Sie unter Compute auf Instanzen.
  2. Klicken Sie auf die gewünschte Instanz.
  3. Klicken Sie unter Ressourcen auf Befehl ausführen.
  4. Klicken Sie in der Liste auf das Aktionsmenü (Aktionsmenü) und dann auf Befehlsdetails anzeigen.
So brechen Sie einen Befehl ab
  1. Öffnen Sie das Navigationsmenü, und klicken Sie auf Compute. Klicken Sie unter Compute auf Instanzen.
  2. Klicken Sie auf die gewünschte Instanz.
  3. Klicken Sie unter Ressourcen auf Befehl ausführen.
  4. Suchen Sie den Befehl in der Liste, klicken Sie auf das Aktionsmenü (Aktionsmenü) und dann auf Befehl abbrechen. Bestätigen Sie den Vorgang, wenn Sie dazu aufgefordert werden.

Fehlerbehebung mit dem Compute Instance Run Command-Plug-in

Um Fehler mit dem Compute Instance Run Command-Plug-in zu beheben, können Sie die vom Plug-in generierten Logs anzeigen. Stellen Sie eine Verbindung zur Instanz her, und verwenden Sie dann Folgendes:

tail -f /var/log/oracle-cloud-agent/plugins/runcommand/runcommand.log

Um eine einfachere Sicht auf die Vorgänge des Plug-ins zu erhalten, ohne eine Verbindung zur Instanz herstellen zu müssen, können Sie benutzerdefinierte Logs mit dem Oracle Cloud Infrastructure Logging-Service erstellen.

Logfehler

In diesem Abschnitt wird beschrieben, wie Sie Fehler in der Logdatei beheben.

Polling nicht erfolgreich

Wenn das Compute Instance Run Command-Plug-in kein Polling von Befehlen durchführt, wird möglicherweise der folgende Fehler in der Logdatei angezeigt:

poll command err: circuitbreaker:[pollCommand] is open, last err:Service error:NotAuthorizedOrNotFound. Authorization failed or requested resource not found. http status code: 404.

Dieser Fehler kann auftreten, wenn die dynamische Gruppen-Policy für das Befehlsausführungsfeature nicht aktiviert ist oder wenn die Instanz erst vor Kurzem der dynamischen Gruppe hinzugefügt wurde. Instanzen gehören standardmäßig zu Mandantenadministratorgruppen. Daher müssen Sie explizit dynamische Gruppenberechtigungen für die Instanz festlegen.

Wenn Sie eine Instanz erstellen und dann einer dynamischen Gruppe hinzufügen, dauert es bis zu 30 Minuten, bis die Instanz mit dem Polling von Befehlen beginnt. Wenn Sie die dynamische Gruppe zuerst und dann die Instanz erstellen, beginnt die Instanz direkt nach ihrer Erstellung mit dem Polling von Befehlen.

Um die dynamische Gruppen-Policy zu testen, sobald Sie die Instanz einer dynamischen Gruppe hinzufügen, starten Sie den Service mit einem der folgenden Befehle manuell neu:

Oracle Linux 6.x

sudo initctl restart oracle-cloud-agent

Oracle Linux 7.x und Oracle Linux 8.x

sudo systemctl restart oracle-cloud-agent

Windows Server

net restart ocarun