Exécution de commandes sur une instance
Vous pouvez configurer, gérer et dépanner à distance les instances de calcul en exécutant des scripts au sein de l'instance à l'aide de la fonction d'exécution de commande.
Par exemple, la fonction d'exécution de commande peut vous aider à automatiser des tâches telles que la configuration de cartes d'interface réseau virtuelle (vNIC) secondaires, l'attachement d'instances à un fournisseur d'identité, le dépannage de la connectivité SSH ou la réponse à des scénarios de récupération après sinistre interrégionaux.
Vous pouvez exécuter des commandes sur une instance même si l'instance ne dispose pas de l'accès SSH ou ouvrir des ports entrants.
La fonction d'exécution de commande utilise le plugiciel d'exécution de commandes dans une instance de calcul géré par le logiciel Oracle Cloud Agent.
N'utilisez pas la fonction 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 Aperçu du service de stockage d'objets pour stocker le fichier et la réponse de script. Utilisez le service Chambre forte pour Oracle Cloud Infrastructure afin pour gérer les clés et les données d'identification de clé secrète.
Pour les autorisations, voir Politique IAM requise pour l'utilisation des instances.
Images prises en charge
La fonction 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 fonction d'exécution de commande.
Régions prises en charge
La fonction d'exécution de commande est prise en charge dans toutes les régions du domaine commercial Oracle Cloud Infrastructure.
Limites et points à considérer
- Sur les instances Linux, le script est exécuté par défaut dans un interpréteur de commandes Bash. 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 est exécuté par défaut dans un interpréteur de commandes par lots. Pour exécuter le script avec PowerShell, utilisez
#ps1
comme première ligne du script.Voir un exemple de script PowerShellL'exemple suivant utilise PowerShell pour interroger le service de métadonnées d'instance et imprimer l'OCID de l'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 que vous chargez directement dans une instance en texte brut est de 4 Ko. Pour un fichier plus grand, enregistrez le fichier dans un emplacement du service Stockage d'objets.
- La sortie d'un script retourné en texte brut est limitée au dernier Ko. Pour enregistrer une réponse plus importante, enregistrez la sortie dans un emplacement du service Stockage d'objets.
- Lorsque vous utilisez un emplacement du service Stockage d'objets pour enregistrer le fichier ou la réponse de script, l'instance doit avoir une connectivité sortante telle qu'une passerelle de traduction d'adresses de réseau (NAT), une passerelle de service ou une passerelle Internet. L'instance doit également autoriser le trafic sortant sur le port 443 pour le logiciel Oracle Cloud Agent, le service Stockage d'objets et le service Gestion des identités et des accès.
-
Deux scripts peuvent être exécutés à la fois par défaut. Pour modifier la configuration par défaut, mettez à jour le fichier de configuration d'exécution de commande :
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 cours à la fois. Un script est considéré en cour s'il a été reçu par le plugiciel d'exécution de commande pour les instances de calcul, mais pas encore supprimé de la file d'attente.
- Pour exécuter des tâches de longue durée, utilisez la fonction d'exécution de commande pour planifier une tâche cron sur l'instance. L'orchestration des commandes n'est pas prise en charge.
- Chaque script est exécuté une seule fois. Pour qu'un script s'exécute plusieurs fois, utilisez cron pour configurer une programmation du script.
- Les scripts qui demandent des informations ne sont pas pris en charge. Vous pouvez cependant utiliser le service de métadonnées d'instance (IMDS), pour extraire par programmation des informations sur l'instance sur laquelle le script s'exécute.
- Lorsque vous créez une instance à partir d'une image personnalisée qui dispose déjà des autorisations pour le plugiciel Exécution de commandes dans l'instance de calcul, remplacez
101-oracle-cloud-agent-run-command
par100-oracle-cloud-agent-run-command
dans le fichier de configuration. - Les codes de sortie retournés sont des codes d'erreur Linux standard. Le code de sortie
0
indique le succès. - Si vous appliquez une temporisation facultative 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 d'UC, utilisez des mesures.
- L'annulation d'un script est une tentative au mieux. Les commandes ne peuvent pas être annulées après leur exécution ou si elles ont expiré.
- Les fichiers et les réponses de script enregistrés en texte brut sont conservés pendant sept jours. Les fichiers et les réponses de script enregistrés dans un emplacement du service Stockage d'objets sont conservés jusqu'à ce que vous les supprimiez.
- N'exécutez pas de script qui provoque l'arrêt du logiciel Oracle Cloud Agent ou du plugiciel d'exécution de commande pour les instances de calcul.
Exécution de commandes avec des privilèges d'administrateur
Si une commande nécessite des autorisations d'administrateur, vous devez les accorder au plugiciel d'exécution de commande dans une instance de calcul pour qu'il puisse exécuter la commande. Le plugiciel est exécuté en tant qu'utilisateur ocarun
.
Vous pouvez utiliser cloud-init (cloudbase-init sur Windows) pour configurer les autorisations lors du lancement de l'instance ou vous connecter à une instance après son lancement et configurer manuellement les autorisations. Les étapes visant à accorder les autorisations d'administrateur dépendent du système d'exploitation.
Pour accorder des autorisations de superutilisateur sur les instances Linux
-
Sur l'instance, créez un fichier de configuration sudoers pour le plugiciel d'exécution de commandes dans une instance de calcul :
vi ./101-oracle-cloud-agent-run-command
-
Autorisez l'utilisateur
ocarun
à exécuter toutes les commandes en tant que superutilisateur en ajoutant la ligne suivante au fichier de configuration :ocarun ALL=(ALL) NOPASSWD:ALL
Vous pouvez facultativement lister des commandes spécifiques. Voir la page man de Linux sur le fichier
sudoers
pour plus d'informations. -
Confirmez 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 retourné :
./101-oracle-cloud-agent-run-command: parsed OK
-
Ajoutez le fichier de configuration à
/etc/sudoers.d
:sudo cp ./101-oracle-cloud-agent-run-command /etc/sudoers.d/
Pour accorder des autorisations d'administrateur sur les instances Windows
-
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 plugiciel d'exécution de commandes dans une instance de calcul doit être activé sur l'instance, et les plugiciels doivent être en cours d'exécution. Pour plus d'informations sur l'activation et l'exécution des plugiciels, voir Oracle Cloud Agent.
- Vous avez préparé le script que vous souhaitez exécuter. Nous vous recommandons de tester la commande dans un environnement hors production avant de la déployer sur les instances qui exécutent des flux de travail de production.
- Pour fournir le fichier de script à partir d'un emplacement du service de stockage d'objets, chargez le fichier d'image dans un seau du service de stockage d'objets dans la même région que l'instance cible. Notez le nom du seau et du fichier ou l'URL du service Stockage d'objets pour le fichier. Pour utiliser la même commande pour toutes les locations, créez une URL de demande préauthentifiée qui pointe vers le fichier.
- Pour enregistrer la sortie de commande dans un emplacement du service Stockage d'objets, créez un seau dans lequel l'enregistrer, dans la même région que l'instance cible. Notez le nom du seau ou l'URL du service Stockage d'objets pour le seau. Vous pouvez éventuellement enregistrer la sortie de commande à l'aide d'une demande préauthentifiée qui pointe vers un emplacement du service Stockage d'objets.
- Pour les images de plate-forme qui ont été lancées avant octobre 2020, le logiciel Oracle Cloud Agent doit être mis à jour à une version prenant en charge le plugiciel d'exécution de commandes dans une instance de calcul (version 1.5.1 ou version ultérieure).
Utilisation de la console
- Ouvrez le menu de navigation et sélectionnez Calcul. Sous Calcul, sélectionnez Instances.
- Cliquez sur l'instance qui vous intéresse.
- Sous Ressources, cliquez sur Exécuter une commande.
- Cliquez sur Créer une commande.
- Entrez le nom de la commande. Évitez d'entrer des informations confidentielles.
- Dans la zone Temporisation en secondes, entrez le temps nécessaire à accorder au plugiciel d'exécution de commandes dans une instance de calcul pour exécuter la commande sur l'instance avant la temporisation. Le temporisateur démarre lorsque le plugiciel démarre la commande. Pour ne pas utiliser de temporisation, entrez 0.
-
Dans la section Ajouter un script, chargez le script que le plugiciel d'exécution de commandes dans une instance de calculdoit exécuter sur l'instance. Sélectionnez une des options suivantes :
- Coller le script : Collez la commande dans la zone.
- Sélectionner un fichier : Chargez le script en tant que fichier texte (. txt). Naviguez jusqu'au fichier à charger ou glissez-déposez-le dans la zone.
- Importer depuis un seau de stockage d'objets : Sélectionnez le seau qui contient le fichier de script.. Dans la zone Nom de l'objet, entrez le nom du fichier.
- Importer depuis une URL de stockage d'objets : Entrez l'URL du service Stockage d'objets pour le fichier de script.
-
Dans la section Type de sortie, sélectionnez l'emplacement pour enregistrer la sortie de la commande :
- Sortie sous forme de texte : La sortie est enregistrée sous forme de texte brut. Vous pouvez vérifier la sortie dans la page Détails de l'instance.
- Sortie dans un seau de stockage d'objets : La sortie est enregistrée dans un seau du service Stockage d'objets. Sélectionnez un seau. Dans la zone Nom de l'objet, entrez le nom du fichier de sortie. Évitez d'entrer des informations confidentielles.
- Sortir vers une URL de stockage d'objets : La sortie est enregistrée vers une URL du service Stockage d'objets. Entrer l'URL.
- Cliquez sur Créer une commande.
Si la sortie de commande a été enregistrée dans un emplacement du service Stockage d'objets, téléchargez l'objet de réponse à partir du seau où il a été enregistré ou accédez à l'URL de la demande préauthentifiée du service Stockage d'objets.
Si la sortie de commande a été enregistrée en tant que fichier texte brut, procédez de la façon suivante :
- Ouvrez le menu de navigation et sélectionnez Calcul. Sous Calcul, sélectionnez Instances.
- Cliquez sur l'instance qui vous intéresse.
- Sous Ressources, cliquez sur Exécuter une commande.
- Recherchez la commande dans la liste, dans le menu d'actions (3 points), sélectionnez Voir les détails de la commande.
- Ouvrez le menu de navigation et sélectionnez Calcul. Sous Calcul, sélectionnez Instances.
- Cliquez sur l'instance qui vous intéresse.
- Sous Ressources, cliquez sur Exécuter une commande.
- Recherchez la commande dans la liste, dans le menu d'actions (3 points), sélectionnez Annuler la commande. Confirmez l'opération à l'invite.
Utilisation de l'API
Pour plus d'informations sur l'utilisation de l'API et sur les demandes de signature, voir la documentation de l'API REST et Données d'identification de sécurité. Pour plus d'informations sur les trousses SDK, voir Trousses SDK et interface de ligne de commande.
Utilisez ces opérations d'API pour utiliser la fonction d'exécution de commande :
Dépannage du plugiciel d'exécution de commandes dans une instance de calcul
Pour dépanner le plugiciel d'exécution de commandes dans une instance de calcul, vous pouvez voir les journaux que le plugiciel génère. Connectez-vous à l'instance, puis utilisez la commande suivante :
tail -f /var/log/oracle-cloud-agent/plugins/runcommand/runcommand.log
Pour faciliter la visibilité des opérations du plugiciel sans avoir à vous connecter à l'instance, vous pouvez créer des journaux personnalisés à l'aide du service Journalisation pour Oracle Cloud Infrastructure.
Erreurs de journal
Cette section explique comment résoudre les erreurs qui apparaissent dans le fichier journal.
Échec de la scrutation
Si le plugiciel d'exécution de commandes dans une instance de calcul échoue dans la scrutation 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 survenir lorsque la politique de groupe dynamique pour la fonction d'exécution de commande n'est pas activée ou si l'instance a été récemment ajoutée au groupe dynamique. Les instances n'appartiennent pas aux groupes d'administrateurs de location par défaut, vous devez donc explicitement définir les autorisations de groupe dynamique pour l'instance.
Lorsque vous créez une instance, puis l'ajoutez à un groupe dynamique, il faut compter 30 minutes pour que l'instance commence à scruter les commandes. Si vous créez d'abord le groupe dynamique, puis l'instance, l'instance commence à scruter les commandes dès qu'elle est créée.
Pour tester la politique 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 7.x et Oracle Linux 8.x
sudo systemctl restart oracle-cloud-agent
Windows Server
net restart ocarun