Esecuzione dei comandi in un'istanza

Puoi configurare, gestire e risolvere in remoto i problemi delle istanze di computazione eseguendo script all'interno dell'istanza utilizzando la funzione di esecuzione dei comandi.

Ad esempio, la funzione di esecuzione dei comandi può aiutare ad automatizzare task quali la configurazione di schede VNIC (Virtual Network Interface Card) secondarie, l'unione delle istanze a un provider di identità, la risoluzione dei problemi di connettività SSH o la risposta a scenari di disaster recovery tra più aree.

È possibile eseguire comandi su un'istanza anche quando l'istanza non dispone dell'accesso SSH o non apre porte in entrata.

La funzione di esecuzione dei comandi utilizza il plugin Comando di esecuzione dell'istanza di computazione gestito dal software Oracle Cloud Agent.

Attenzione

Non utilizzare la funzione di esecuzione dei comandi per fornire o recuperare password, segreti o altre informazioni riservate in testo normale. Per fornire e recuperare in modo sicuro informazioni riservate, utilizzare una posizione Panoramica dello storage degli oggetti per memorizzare il file di script e la risposta. Utilizza Oracle Cloud Infrastructure Vault per gestire le chiavi e le credenziali segrete.

Per le autorizzazioni, vedere Criteri IAM necessari per l'utilizzo delle istanze.

Immagini supportate

La funzione di esecuzione dei comandi è supportata sulle istanze di computazione che utilizzano le immagini della piattaforma riportate di seguito.

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

Le immagini personalizzate basate su un'immagine della piattaforma supportata supportano anche la funzione di esecuzione dei comandi.

Limitazioni e considerazioni

  • Nelle istanze Linux, lo script viene eseguito in una shell Bash per impostazione predefinita. Per eseguire lo script con un altro programma, usare #!/<path_to_program> come prima riga dello script.
  • Nelle istanze di Windows, lo script viene eseguito in una shell batch per impostazione predefinita. Per eseguire lo script con PowerShell, usare #ps1 come prima riga dello script.

    Vedere uno script PowerShell di esempio

    L'esempio seguente utilizza PowerShell per eseguire una query sul servizio di metadati dell'istanza e stampare l'OCID dell'istanza:

    #ps1
    $instance = Invoke-RestMethod -Headers @{'Authorization' = 'Bearer Oracle'} -Uri http://169.254.169.254/opc/v2/instance/
    Write-Host ('Instance OCID is ' + $($instance.id))
  • La dimensione massima per un file di script caricato direttamente in un'istanza in testo semplice è di 4 KB. Per fornire un file di dimensioni maggiori, salvare il file in una posizione di storage degli oggetti.
  • L'output di uno script restituito come testo normale è limitato agli ultimi 1 KB. Per salvare una risposta più ampia, salvare l'output in una posizione di storage degli oggetti.
  • Quando si utilizza una posizione di storage degli oggetti per salvare il file di script o la risposta, l'istanza deve disporre di connettività in uscita, ad esempio un gateway NAT (Network Access Translation), un gateway di servizi o un gateway Internet. L'istanza deve inoltre consentire il traffico in uscita sulla porta 443 per il software Oracle Cloud Agent, lo storage degli oggetti e l'IAM.
  • Per impostazione predefinita, è possibile eseguire due script alla volta. Per modificare l'impostazione predefinita, aggiornare il file di configurazione del comando di esecuzione:

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

    Impostare i parametri riportati di seguito.

    logDir: /var/log/oracle-cloud-agent/plugins/runcommand
    commandExecutionMaxWorkers: <number-of-parallel-scripts>
                            
  • È possibile eseguire un massimo di cinque script alla volta. Uno script viene considerato in esecuzione se è stato ricevuto dal plugin Comando di esecuzione istanza di computazione, ma non ancora eliminato dalla coda.
  • Per eseguire task con tempi di esecuzione lunghi, utilizzare la funzione Esegui comando per pianificare un job cron sull'istanza. Orchestrazione dei comandi non supportata.
  • Ogni script viene eseguito una volta. Se si desidera che uno script venga eseguito più volte, utilizzare cron per configurare una pianificazione per lo script.
  • Gli script che richiedono informazioni non sono supportati. È tuttavia possibile utilizzare il servizio IMDS (instance Metadata Service) per recuperare a livello di programmazione le informazioni sull'istanza in cui viene eseguito lo script.
  • Quando si crea un'istanza da un'immagine personalizzata che dispone già delle autorizzazioni per il plugin Comando di esecuzione dell'istanza di computazione configurato, sostituire 101-oracle-cloud-agent-run-command con 100-oracle-cloud-agent-run-command nel file di configurazione.
  • I codici di uscita restituiti sono codici di errore standard di Linux. Un codice di uscita 0 indica la riuscita.
  • Se si applica un timeout facoltativo per uno script, l'impostazione predefinita è un'ora. Il massimo è di 24 ore.
  • Il tempo massimo di esecuzione di uno script è di un giorno.
  • Per monitorare le risorse utilizzate dagli script, ad esempio l'utilizzo della CPU, utilizzare le metriche.
  • L'annullamento di uno script è un tentativo ottimale. I comandi non possono essere annullati dopo aver terminato l'esecuzione o se sono scaduti.
  • I file di script e le risposte salvate in testo semplice vengono conservati per sette giorni. I file di script e le risposte salvate in una posizione di storage degli oggetti vengono conservati fino a quando non vengono eliminati.
  • Non eseguire uno script che causi l'arresto del software Oracle Cloud Agent o del plugin Comando di esecuzione istanza di computazione.

Esecuzione dei comandi con privilegi di amministratore

Se un comando richiede le autorizzazioni di amministratore, è necessario concedere le autorizzazioni di amministratore al plugin Comando di esecuzione istanza di computazione per poter eseguire il comando. Il plugin viene eseguito come utente ocarun.

È possibile utilizzare cloud-init (cloudbase-init su Windows) per configurare le autorizzazioni all'avvio dell'istanza oppure connettersi a un'istanza dopo aver avviato e configurato le autorizzazioni manualmente. I passi per concedere le autorizzazioni di amministratore dipendono dal sistema operativo.

Per concedere autorizzazioni sudo sulle istanze Linux

  1. Nell'istanza, creare un file di configurazione sudoers per il plugin Comando di esecuzione istanza di computazione:

    vi ./101-oracle-cloud-agent-run-command
  2. Consentire all'utente ocarun di eseguire tutti i comandi come sudo aggiungendo la riga seguente al file di configurazione:

    ocarun ALL=(ALL) NOPASSWD:ALL

    Facoltativamente, è possibile elencare comandi specifici. Per ulteriori informazioni, vedere la pagina man Linux per sudoers.

  3. Verificare che la sintassi nel file di configurazione sia corretta:

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

    Se la sintassi è corretta, viene restituito il seguente messaggio:

    ./101-oracle-cloud-agent-run-command: parsed OK
  4. Aggiungere il file di configurazione a /etc/sudoers.d:

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

Per concedere le autorizzazioni di amministratore per le istanze Windows

  1. Nell'istanza, eseguire il comando seguente in PowerShell:

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

Prima di iniziare

  • Il plugin Comando di esecuzione istanza di computazione deve essere abilitato nell'istanza e i plugin devono essere in esecuzione. Per ulteriori informazioni su come abilitare ed eseguire i plugin, vedere Agente Oracle Cloud.
  • È stato preparato lo script che si desidera eseguire. Si consiglia di eseguire il test del comando in un ambiente non di produzione prima di distribuirlo nelle istanze che eseguono i flussi di lavoro di produzione.
  • Per fornire il file di script da una posizione di storage degli oggetti, Caricare il file immagine in un bucket di storage degli oggetti nella stessa area dell'istanza di destinazione. Prendere nota del nome del bucket e del file o dell'URL di storage degli oggetti per il file. Per utilizzare lo stesso comando tra le tenancy, creare un URL di richiesta preautenticata che punti al file.
  • Per salvare l'output del comando in una posizione di storage degli oggetti, creare un bucket in cui salvarlo, nella stessa area dell'istanza di destinazione. Prendere nota del nome del bucket o dell'URL di storage degli oggetti per il bucket. Facoltativamente, puoi salvare l'output del comando utilizzando una richiesta preautenticata che punta a una posizione di storage degli oggetti.
  • Per le immagini della piattaforma rilasciate prima di ottobre 2020, è necessario aggiornare il software di Oracle Cloud Agent a una versione che supporta il plugin Comando di esecuzione dell'istanza di computazione (versione 1.5.1 o successiva).

Uso della console

Per creare un comando da eseguire su un'istanza
  1. Apri il menu di navigazione e seleziona Computazione. In Computazione, selezionare Istanze.
  2. Fare clic sull'istanza a cui si è interessati.
  3. In Risorse, fare clic sul comando Esegui.
  4. Fare clic su Create command.
  5. Immettere un nome per il comando. Evitare di fornire informazioni riservate.
  6. Nella casella Timeout in secondi immettere il periodo di tempo necessario per concedere al plugin Comando di esecuzione istanza di computazione di eseguire il comando sull'istanza prima del timeout. Il timer si avvia quando il plugin avvia il comando. Per nessun timeout, immettere 0.
  7. Nella sezione Aggiungi script caricare lo script che si desidera che il plugin Comando esecuzione istanza di computazione esegua sull'istanza. Selezionare una delle opzioni seguenti.

    • Incolla script: incollare il comando nella casella.
    • Selezionare un file: caricare lo script come file di testo (.txt). Passare al file che si desidera caricare oppure trascinare la selezione del file nella casella.
    • Importa da un bucket di storage degli oggetti: selezionare il bucket che contiene il file di script. Nella casella Nome oggetto immettere il nome del file.
    • Importa da un URL dello storage degli oggetti: immettere l'URL dello storage degli oggetti per il file di script.
  8. Nella sezione Tipo di output selezionare la posizione in cui salvare l'output del comando:

    • Output come testo: l'output viene salvato come testo non codificato. È possibile esaminare l'output nella pagina Dettagli istanza.
    • Output in un bucket di storage degli oggetti: l'output viene salvato in un bucket di storage degli oggetti. Selezionare un bucket. Nella casella Nome oggetto, immettere un nome per il file di output. Evitare di fornire informazioni riservate.
    • Output in un URL di storage degli oggetti: l'output viene salvato nell'URL di storage degli oggetti. Immettere l'URL.
  9. Fare clic su Create command.
Per visualizzare l'output di un comando

Se l'output del comando è stato salvato in una posizione di storage degli oggetti, scaricare l'oggetto di risposta dal bucket in cui è stato salvato o passare all'URL della richiesta preautenticata dello storage degli oggetti.

Se l'output del comando è stato salvato come file di testo non codificato, effettuare le operazioni riportate di seguito.

  1. Apri il menu di navigazione e seleziona Computazione. In Computazione, selezionare Istanze.
  2. Fare clic sull'istanza a cui si è interessati.
  3. In Risorse, fare clic sul comando Esegui.
  4. Trovare il comando nell'elenco, dal menu Azioni (tre punti) selezionare Visualizza dettagli comando.
Per annullare un comando
  1. Apri il menu di navigazione e seleziona Computazione. In Computazione, selezionare Istanze.
  2. Fare clic sull'istanza a cui si è interessati.
  3. In Risorse, fare clic sul comando Esegui.
  4. Trovare il comando nell'elenco, dal menu Actions (three dots) selezionare Cancel command. Confermare quando richiesto.

Risoluzione dei problemi relativi al plugin di comando Esegui istanza di computazione

Per risolvere i problemi relativi al plugin del comando di esecuzione dell'istanza di computazione, è possibile visualizzare i log generati dal plugin. Connettersi all'istanza, quindi utilizzare quanto riportato di seguito.

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

Per una maggiore visibilità sulle operazioni del plugin senza dover connettersi all'istanza, puoi creare log personalizzati utilizzando il servizio Oracle Cloud Infrastructure Logging.

Errori registrati

In questa sezione viene descritto come risolvere gli errori visualizzati nel file di log.

Impossibile eseguire il polling

Se il plugin Comando di esecuzione istanza di computazione non riesce a eseguire il polling dei comandi, nel file di log potrebbe essere visualizzato il seguente errore:

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

Questo errore può verificarsi quando il criterio del gruppo dinamico per la funzione Esegui comando non è abilitato o se l'istanza è stata aggiunta di recente al gruppo dinamico. Le istanze non appartengono ai gruppi di amministratori della tenancy per impostazione predefinita, pertanto è necessario impostare le autorizzazioni dei gruppi dinamici in modo esplicito per l'istanza.

Quando crei un'istanza e la aggiungi a un gruppo dinamico, sono necessari fino a 30 minuti prima che l'istanza inizi a eseguire il polling dei comandi. Se si crea prima il gruppo dinamico e quindi l'istanza, l'istanza inizia a eseguire il polling dei comandi non appena viene creata l'istanza.

Per eseguire il test del criterio del gruppo dinamico non appena si aggiunge l'istanza a un gruppo dinamico, riavviare il servizio manualmente utilizzando uno dei comandi seguenti:

Oracle Linux 7.x e Oracle Linux 8.x

sudo systemctl restart oracle-cloud-agent

Windows Server

net restart ocarun