Exécution de commandes sur une instance

Vous pouvez configurer, gérer et dépanner les instances de calcul à distance en exécutant des scripts dans l'instance à l'aide de la fonctionnalité d'exécution de commande.

Par exemple, la fonctionnalité d'exécution de commande peut vous aider à automatiser des tâches telles que la configuration de cartes d'interface réseau virtuelles secondaires, l'attachement d'instances à un fournisseur d'identités, le dépannage de la connectivité SSH ou la réponse à des scénarios de récupération après sinistre entre régions.

Vous pouvez exécuter des commandes sur une instance même si celle-ci ne dispose d'aucun accès SSH ou port entrant ouvert.

La fonctionnalité d'exécution de commande utilise le module d'extension d'exécution de commandes sur les instances de calcul qui est géré par le logiciel d'agent Oracle Cloud.

Attention

N'utilisez pas la fonctionnalité d'exécution de commande pour fournir ou extraire des mots de passe, des clés secrètes ou d'autres informations confidentielles en texte brut. Pour fournir et extraire des informations confidentielles en toute sécurité, utilisez un emplacement de présentation d'Object Storage afin de stocker le fichier de script et la réponse. Utilisez Oracle Cloud Infrastructure Vault pour gérer les clés et les informations d'identification de clé secrète.

Pour obtenir les droits d'accès, reportez-vous à Stratégie IAM requise pour l'utilisation des instances.

Images prises en charge

La fonctionnalité d'exécution de commande est prise en charge sur les instances de calcul qui utilisent les images de plate-forme suivantes:

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

Les images personnalisées basées sur une image de plate-forme prise en charge prennent également en charge la fonctionnalité d'exécution de commande.

Limites et remarques

  • Sur les instances Linux, le script s'exécute dans un shell de type bash par défaut. Pour exécuter le script avec un autre programme, utilisez #!/<path_to_program> comme première ligne du script.
  • Sur les instances Windows, le script s'exécute dans un shell en batch par défaut. Pour exécuter le script avec PowerShell, utilisez #ps1 comme première ligne du script.

    Voir un exemple de script PowerShell

    L'exemple suivant utilise PowerShell pour interroger le service de métadonnées d'instance et imprimer l'OCID d'instance :

    #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 taille maximale d'un fichier de script téléchargé directement vers une instance en texte brut est de 4 ko. Pour fournir un fichier plus volumineux, enregistrez ce dernier dans un emplacement Object Storage.
  • La sortie d'un script renvoyée en texte brut est limitée au dernier kilo-octet. Pour enregistrer une réponse plus volumineuse, enregistrez la sortie dans un emplacement Object Storage.
  • Lorsque vous utilisez un emplacement Object Storage pour enregistrer le fichier de script ou la réponse, l'instance doit disposer d'une connectivité sortante, telle qu'une passerelle NAT (Network Access Translation), une passerelle de service ou une passerelle Internet. L'instance doit également autoriser le trafic sortant sur le port 443 pour le logiciel d'agent Oracle Cloud, Object Storage et IAM.
  • Par défaut, deux scripts à la fois peuvent être exécutés. Pour modifier la valeur par défaut, mettez à jour le fichier de configuration de commande d'exécution :

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

    Définissez les paramètres suivants :

    logDir: /var/log/oracle-cloud-agent/plugins/runcommand
    commandExecutionMaxWorkers: <number-of-parallel-scripts>
  • Un maximum de cinq scripts peuvent être en attente de traitement à la fois. Un script est considéré comme en attente de traitement s'il a été reçu par le module d'extension d'exécution de commandes sur les instances de calcul, mais pas encore supprimé de la file d'attente.
  • Pour effectuer des tâches longues, utilisez la fonctionnalité d'exécution de commande afin de programmer un travail CRON sur l'instance. L'orchestration des commandes n'est pas prise en charge.
  • Chaque script s'exécute une fois. Pour qu'un script soit exécuté plusieurs fois, utilisez CRON afin de configurer une programmation pour ce script.
  • Les scripts qui demandent des informations ne sont pas pris en charge. Toutefois, vous pouvez utiliser le service de métadonnées d'instance (IMDS) pour extraire par programmation des informations concernant l'instance sur laquelle le script est exécuté.
  • Lorsque vous créez une instance à partir d'une image personnalisée qui dispose déjà de droits d'accès pour le module d'extension d'exécution de commandes sur les instances de calcul configuré, remplacez 101-oracle-cloud-agent-run-command par 100-oracle-cloud-agent-run-command dans le fichier de configuration.
  • Les codes de sortie renvoyés sont des codes d'erreur Linux standard. Le code de sortie 0 indique un succès.
  • Si vous appliquez un délai d'expiration facultatif pour un script, la valeur par défaut est d'une heure. Le maximum est de 24 heures.
  • La durée maximale d'exécution d'un script est d'un jour.
  • Pour surveiller les ressources consommées par les scripts, telles que l'utilisation de l'UC, employez des mesures.
  • Les tentatives d'annulation de script n'aboutissent pas forcément. Les commandes ne peuvent pas être annulées si elles ont déjà été exécutées ou si elles ont expiré.
  • Les fichiers de script et les réponses enregistrés en texte brut sont conservés pendant sept jours. Les fichiers de script et les réponses enregistrés dans un emplacement Object Storage sont conservés jusqu'à ce que vous les supprimiez.
  • N'exécutez pas de script qui entraîne l'arrêt du logiciel d'agent Oracle Cloud ou du module d'extension d'exécution de commandes sur les instances de calcul.

Exécution de commandes avec des privilèges d'administrateur

Si une commande requiert des droits d'accès administrateur, vous devez les accorder au module d'extension Exécution de commandes sur les instances de calcul pour pouvoir exécuter la commande. Le module d'extension s'exécute en tant qu'utilisateur ocarun.

Vous pouvez utiliser cloud-init (cloudbase-init sous Windows) pour configurer les droits d'accès lors du lancement de l'instance, ou vous connecter à une instance après son lancement et configurer les droits d'accès manuellement. Les étapes permettant d'octroyer des droits d'accès d'administrateur dépendent du système d'exploitation.

Procédure d'octroi de droits d'accès sudo sur les instances Linux

  1. Sur l'instance, créez un fichier de configuration sudoers pour le module d'extension d'exécution de commandes sur les instances de calcul :

    vi ./101-oracle-cloud-agent-run-command
  2. Pour autoriser l'utilisateur ocarun à exécuter toutes les commandes en tant que sudo, ajoutez la ligne suivante au fichier de configuration :

    ocarun ALL=(ALL) NOPASSWD:ALL

    Vous pouvez également répertorier des commandes spécifiques. Pour plus d'informations, reportez-vous à la page de manuel Linux pour sudoers.

  3. Vérifiez que la syntaxe du fichier de configuration est correcte :

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

    Si la syntaxe est correcte, le message suivant est renvoyé :

    ./101-oracle-cloud-agent-run-command: parsed OK
  4. Ajoutez le fichier de configuration à /etc/sudoers.d :

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

Procédure d'octroi de droits d'accès d'administrateur sur les instances Windows

  1. Sur l'instance, exécutez la commande suivante dans PowerShell :

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

Avant de commencer

  • Le module d'extension d'exécution de commandes sur les instances de calcul doit être activé sur l'instance et les modules d'extension doivent être en cours d'exécution. Pour plus d'informations sur l'activation et l'exécution des modules d'extension, reportez-vous à Agent Oracle Cloud.
  • Vous avez préparé le script à exécuter. Nous vous recommandons de tester la commande dans un environnement de non-production avant de la déployer sur des instances exécutant des workflows de production.
  • Pour fournir le fichier de script à partir d'un emplacement Object Storage, télez-le vers un bucket Object Storage de la région de l'instance cible. Notez le nom du bucket et du fichier, ou l'URL Object Storage du fichier. Pour utiliser la même commande dans toutes les locations, créez une URL de demande pré-authentifiée pointant vers le fichier.
  • Pour enregistrer la sortie de commande dans un emplacement Object Storage, créez un bucket dans lequel l'enregistrer, dans la région de l'instance cible. Notez le nom ou l'URL Object Storage du bucket. Vous pouvez éventuellement enregistrer la sortie de commande à l'aide d'une demande pré-authentifiée pointant vers un emplacement Object Storage.
  • Pour les images de plate-forme publiées avant octobre 2020, le logiciel d'agent Oracle Cloud doit être mis à jour vers une version prenant en charge le module d'extension d'exécution de commandes sur les instances de calcul (version 1.5.1 ou ultérieure).

Utilisation de la console

Procédure de création d'une commande à exécuter sur une instance
  1. Ouvrez le menu de navigation et cliquez sur Compute. Sous Compute, cliquez sur Instances.
  2. Cliquez sur l'instance qui vous intéresse.
  3. Sous Ressources, cliquez sur Commande d'exécution.
  4. Cliquez sur Créer, commande.
  5. Entrez le nom de la commande. Evitez de saisir des informations confidentielles.
  6. Dans la zone Délai d'expiration (en secondes), entrez le temps à allouer au module d'extension d'exécution de commandes sur les instances de calcul pour l'exécution de la commande sur l'instance. Le décompte démarre lorsque le module d'extension commence l'exécution de la commande. Pour ne pas définir de délai d'expiration, entrez 0.
  7. Dans la section Ajouter un script, téléchargez le script que le module d'extension d'exécution de commandes sur les instances de calcul doit exécuter sur l'instance. Sélectionnez l'une des options suivantes :

    • Coller le script : collez la commande dans la zone.
    • Sélectionner un fichier : téléchargez le script en tant que fichier texte (.txt). Accédez au fichier à télécharger ou glissez-déplacez le fichier dans la zone.
    • Importer à partir d'un bucket Object Storage : sélectionnez le bucket contenant le fichier de script. Dans la zone Nom d'objet, entrez le nom du fichier.
    • Importer à partir d'une URL Object Storage : entrez l'URL Object Storage du fichier de script.
  8. Dans la section Type de sortie, sélectionnez l'emplacement dans lequel enregistrer la sortie de la commande :

    • Sortie au format texte : la sortie est enregistrée en texte brut. Vous pouvez consulter la sortie sur la page Détails de l'instance.
    • Sortie vers un bucket Object Storage : la sortie est enregistrée dans un bucket Object Storage. Sélectionnez un bucket. Dans la zone Nom d'objet, saisissez le nom du fichier de sortie. Evitez de saisir des informations confidentielles.
    • Sortie vers une URL Object Storage : la sortie est enregistrée dans une URL Object Storage. Entrez l'URL.
  9. Cliquez sur Créer, commande.
Procédure de visualisation de la sortie d'une commande

Si la sortie de commande a été enregistrée dans un emplacement Object Storage, téléchargez l'objet de réponse à partir du bucket où il a été enregistré ou accédez à l'URL de demande pré-authentifiée Object Storage.

Si la sortie de commande a été enregistrée en tant que fichier en texte brut, procédez comme suit :

  1. Ouvrez le menu de navigation et cliquez sur Compute. Sous Compute, cliquez sur Instances.
  2. Cliquez sur l'instance qui vous intéresse.
  3. Sous Ressources, cliquez sur Commande d'exécution.
  4. Recherchez la commande dans la liste, cliquez sur le menu Actions (Menu Actions), puis sur Afficher les détails de la commande.
Procédure d'annulation d'une commande
  1. Ouvrez le menu de navigation et cliquez sur Compute. Sous Compute, cliquez sur Instances.
  2. Cliquez sur l'instance qui vous intéresse.
  3. Sous Ressources, cliquez sur Commande d'exécution.
  4. Recherchez la commande dans la liste, cliquez sur le menu Actions (Menu Actions), puis sur Annuler la commande. Confirmez lorsque vous y êtes invité.

Utilisation de l'API

Pour plus d'informations sur l'utilisation de l'API et la signature des demandes, reportez-vous à la documentation relative à l'API REST et à Informations d'identification de sécurité. Pour plus d'informations sur les kits SDK, reportez-vous à Kits SDK et interface de ligne de commande.

Utilisez ces opérations d'API pour utiliser la fonctionnalité d'exécution de commande :

Dépannage du module d'extension d'exécution de commandes sur les instances de calcul

Pour dépanner le module d'extension d'exécution de commandes sur les instances de calcul, vous pouvez visualiser les journaux générés par le module d'extension. Connectez-vous à l'instance, puis utilisez la commande suivante :

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

Pour bénéficier d'une meilleure visibilité des opérations du module d'extension sans devoir vous connecter à l'instance, vous pouvez créer des journaux personnalisés à l'aide du service Oracle Cloud Infrastructure Logging.

Erreurs du journal

Cette section décrit comment résoudre les erreurs figurant dans le fichier journal.

Echec de la recherche

Si le module d'extension d'exécution de commandes sur les instances de calcul échoue lors de la recherche des commandes, vous pouvez voir l'erreur suivante dans le fichier journal :

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

Cette erreur peut se produire si la stratégie de groupe dynamique de la fonctionnalité d'exécution de commande n'est pas activée ou que l'instance a récemment été ajoutée au groupe dynamique. Les instances n' appartiennent pas à des groupes d'administrateurs de location par défaut. Vous devez donc définir explicitement des droits d'accès de groupe dynamique pour l'instance.

Si vous créez une instance que vous ajoutez ensuite à un groupe dynamique, l'instance commence à rechercher des commandes au bout de 30 minutes maximum. Si vous créez d'abord le groupe dynamique, puis l'instance, celle-ci commence à rechercher des commandes dès qu'elle est créée.

Pour tester la stratégie de groupe dynamique dès que vous ajoutez l'instance à un groupe dynamique, redémarrez le service manuellement à l'aide de l'une des commandes suivantes :

Oracle Linux 6.x

sudo initctl restart oracle-cloud-agent

Oracle Linux 7.x et Oracle Linux 8.x

sudo systemctl restart oracle-cloud-agent

Windows Server

net restart ocarun