Exécuter des scripts dans votre machine virtuelle Linux à l’aide de commandes d’exécution managées
S’applique à : ✔️ Machines virtuelles Linux ✔️ Groupes identiques flexibles
Important
La fonctionnalité Run Command managée est actuellement disponible dans Azure CLI, PowerShell et API. Les fonctionnalités du portail seront bientôt disponibles.
La fonctionnalité Run Command utilise l’agent de machine virtuelle pour exécuter des scripts au sein d’une machine virtuelle Linux Azure. Vous pouvez utiliser ces scripts pour la gestion générale des ordinateurs ou des applications. Ils peuvent vous aider à diagnostiquer et corriger rapidement les problèmes de réseau et d’accès aux machines virtuelles et à rétablir l’état de la machine virtuelle.
La commande Run Command managée mise à jour utilise le même canal d’agent de machine virtuelle pour exécuter les scripts et fournit les améliorations suivantes par rapport à la commande Run Command orientée vers l’action d’origine :
- Prise en charge des commandes Run Command mises à jour via le modèle de déploiement ARM
- Exécution parallèle de plusieurs scripts
- Exécution séquentielle de scripts
- Délai d’expiration du script spécifié par l’utilisateur
- Prise en charge des scripts de longue durée (heures/jours)
- Transmission de secrets (paramètres, mots de passe) de manière sécurisée
Prérequis
Important
L’agent(e) invité(e) Linux minimum pris en charge est la version 2.4.0.2 Les versions antérieures ne prennent pas en charge Managed RunCommand
Distributions Linux prises en charge
Distribution Linux | x64 | ARM64 |
---|---|---|
Alma Linux | 9.x + | Non pris en charge |
Debian | > 10 | Non pris en charge |
Flatcar Linux | 3374.2.x+ | Non pris en charge |
Linux Azure | 2.x | Non pris en charge |
OpenSUSE | 12.3+ | Non pris en charge |
Oracle Linux | 6.4+, 7.x+, 8.x+ | Non pris en charge |
Red Hat Enterprise Linux | 6.7+, 7.x+, 8.x+ | Non pris en charge |
Rocky Linux | 9.x + | Non pris en charge |
SLES | 12.x+, 15.x+ | Non pris en charge |
Ubuntu | 18.04+, 20.04+, 22.04+ | Non pris en charge |
Limitation de l’accès à la commande Run
Le listage des commandes d’exécution ou l’affichage des détails d’une commande nécessite l’autorisation Microsoft.Compute/locations/runCommands/read
au niveau de l’abonnement. Le rôle intégré Lecteur et les niveaux supérieurs disposent de cette autorisation.
L’exécution d’une commande nécessite l’autorisation Microsoft.Compute/virtualMachines/runCommand/write
. Le rôle Contributeur de machines virtuelles et les niveaux supérieurs disposent de cette autorisation.
Vous pouvez utiliser un des rôles intégrés ou créer un rôle personnalisé afin d’exécuter Run Command.
Azure CLI
L’exemple suivant utilise la commande az vm run-command pour exécuter un script shell sur une machine virtuelle Linux Azure.
Exécuter un script avec la machine virtuelle
Cette commande remet le script à la machine virtuelle, l’exécute et retourne la sortie capturée.
az vm run-command create --name "myRunCommand" --vm-name "myVM" --resource-group "myRG" --script "echo Hello World!"
Répertorier toutes les ressources RunCommand déployées sur une machine virtuelle
Cette commande retourne une liste complète des commandes Run Command précédemment déployées, ainsi que leurs propriétés.
az vm run-command list --vm-name "myVM" --resource-group "myRG"
Obtenir l’état et les résultats de l’exécution
Cette commande permet de récupérer la progression de l’exécution actuelle, y compris la dernière sortie, l’heure de début/fin, le code de sortie et l’état terminal de l’exécution.
az vm run-command show --name "myRunCommand" --vm-name "myVM" --resource-group "myRG" --expand instanceView
Notes
Les champs de sortie et d’erreur dans instanceView
sont limités à 4 Ko.
Si vous souhaitez accéder à la sortie et à l’erreur complètes, vous avez la possibilité de transférer les données de sortie et d’erreur vers des objets blob d’ajout de stockage à l’aide des paramètres -outputBlobUri
et -errorBlobUri
lors de l’exécution de la commande Exécuter à l’aide de Set-AzVMRunCommand
ou Set-AzVMssRunCommand
.
Supprimer la ressource RunCommand de la machine virtuelle
Supprimez la ressource RunCommand précédemment déployée sur la machine virtuelle. Si l’exécution du script est toujours en cours, l’exécution se termine.
az vm run-command delete --name "myRunCommand" --vm-name "myVM" --resource-group "myRG"
PowerShell
Exécuter un script avec la machine virtuelle
Cette commande remet le script à la machine virtuelle, l’exécute et retourne la sortie capturée.
Set-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -Location "EastUS" -RunCommandName "RunCommandName" –SourceScript "echo Hello World!"
Exécuter un script sur la machine virtuelle à l’aide du paramètre SourceScriptUri
OutputBlobUri
et ErrorBlobUri
sont des paramètres facultatifs.
Set-AzVMRunCommand -ResourceGroupName -VMName -RunCommandName -SourceScriptUri “< SAS URI of a storage blob with read access or public URI>" -OutputBlobUri “< SAS URI of a storage append blob with read, add, create, write access>” -ErrorBlobUri “< SAS URI of a storage append blob with read, add, create, write access>”
Répertorier toutes les ressources RunCommand déployées sur une machine virtuelle
Cette commande retourne une liste complète des commandes Run Command précédemment déployées, ainsi que leurs propriétés.
Get-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM"
Obtenir l’état et les résultats de l’exécution
Cette commande permet de récupérer la progression de l’exécution actuelle, y compris la dernière sortie, l’heure de début/fin, le code de sortie et l’état terminal de l’exécution.
Get-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -RunCommandName "RunCommandName" -Expand instanceView
Créer ou mettre à jour Run Command sur une machine virtuelle à l’aide de SourceScriptURI (URL SAP d’objet blob de stockage)
Créez ou mettez à jour Run Command sur une machine virtuelle Windows à l’aide d’une URL SAP d’un objet blob de stockage qui contient un script PowerShell. SourceScriptUri
peut être l’URL SAP complète ou l’URL publique d’un objet blob de stockage.
Notes
L’URL SAP doit fournir un accès en lecture à l’objet blob. Un délai d’expiration de 24 heures est suggéré pour l’URL SAP. Les URL SAP peuvent être générées sur le Portail Azure à l’aide des options de l’objet blob ou d’un jeton SAP à l’aide de New-AzStorageBlobSASToken
. Si vous générez un jeton SAP à l’aide de New-AzStorageBlobSASToken
, votre URL SAP = « URL d’objet blob de base » + « ? » + « Jeton SAP de New-AzStorageBlobSASToken »
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptURI>
Obtenir une vue d’instance Run Command pour une machine virtuelle après la création ou la mise à jour de Run Command
Obtenir une instance Run Command pour une machine virtuelle avec la vue Instance. La vue d’instance contient l’état d’exécution de Run Command (Réussite, Échec, etc.), le code de sortie, la sortie standard et l’erreur standard générées par l’exécution du script à l’aide de la commande Run Command. Un ExitCode différent de zéro indique une exécution infructueuse.
$x = Get-AzVMRunCommand -ResourceGroupName MyRG -VMName MyVM -RunCommandName MyRunCommand -Expand InstanceView
$x.InstanceView
Sortie attendue :
ExecutionState : Succeeded
ExecutionMessage :
ExitCode : 0
Output :
output : uid=0(root) gid=0(root) groups=0(root)
HelloWorld
Error :
StartTime : 10/27/2022 9:10:52 PM
EndTime : 10/27/2022 9:10:55 PM
Statuses :
InstanceView.ExecutionState
- État du script Run Command de l’utilisateur. Reportez-vous à cet état pour savoir si votre script a réussi ou non.
ProvisioningState
- État du provisionnement général des extensions de bout en bout (si la plateforme d’extension a pu déclencher ou non le script Run Command).
Créer ou mettre à jour Run Command exécution sur une machine virtuelle à l’aide de SourceScript (texte de script)
Créez ou mettez à jour Run Command sur une machine virtuelle en passant le contenu du script directement au paramètre -SourceScript. Utilisez ;
pour séparer plusieurs commandes.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVML -RunCommandName MyRunCommand2 -Location EastUS2EUAP -SourceScript "id; echo HelloWorld"
Créer ou mettre à jour Run Command sur une machine virtuelle à l’aide de SourceCommandId
Créez ou mettez à jour Run Command sur une machine virtuelle à l’aide de commandId
. Les commandId disponibles peuvent être récupérés à l’aide de Get-AzVMRunCommandDocument.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceCommandId ipconfig
Créer ou mettre à jour Run Command sur une machine virtuelle à l’aide de OutputBlobUri, ErrorBlobUri pour diffuser en continu des messages d’erreur standard vers des objets blob d’ajout de sortie et d’erreurs
Créez ou mettez à jour Run Command sur une machine virtuelle pour diffuser en continu des messages d’erreur standard vers des objets blob d’ajout de sortie et d’erreurs.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVML -RunCommandName MyRunCommand3 -Location EastUS2EUAP EastUS2EUAP -SourceScriptUri <SourceScriptUri> -OutputBlobUri <OutputBlobUri> -ErrorBlobUri <errorbloburi>
Notes
Les objets blob de sortie et d’erreur doivent être de type AppendBlob
et leurs URL SAP doivent fournir un accès en lecture, ajout, création et écriture sur l’objet blob. Un délai d’expiration de 24 heures est suggéré pour l’URL SAP. Si l’objet blob de sortie ou d’erreur n’existe pas, un objet blob de type AppendBlob est créé. Les URL SAP peuvent être générées sur le Portail Azure à l’aide des options de l’objet blob ou d’un jeton SAP à l’aide de New-AzStorageBlobSASToken. Si vous générez un jeton SAP à l’aide de New-AzStorageBlobSASToken
, SAP URL = URL d’objet blob de base + « ? » + jeton SAP à partir de New-AzStorageBlobSASToken
.
Créer ou mettre à jour Run Command sur une machine virtuelle, exécuter Run Command en tant qu’utilisateur différent à l’aide des paramètres RunAsUser et RunAsPassword
Créez ou mettez à jour Run Command sur une machine virtuelle, exécutez Run Command en tant qu’utilisateur différent à l’aide des paramètres RunAsUser
et RunAsPassword
. Pour que le compte d’identification fonctionne correctement, contactez l’administrateur de la machine virtuelle et vérifiez que l’utilisateur est ajouté sur la machine virtuelle, qu’il a accès aux ressources accessibles par Run Command (répertoires, fichiers, réseau, etc.) et, dans le cas d’une machine virtuelle Windows, que le service « Ouverture de session secondaire » est en cours d’exécution sur la machine virtuelle.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP EastUS2EUAP -SourceScriptUri <SourceScriptUri> -RunAsUser myusername -RunAsPassword mypassword
Créez ou mettez à jour Run Command sur une ressource Virtual Machine Scale Sets à l’aide de SourceScriptUri (URL SAP d’objet blob de stockage).
Créez ou mettez à jour Run Command sur une ressource Virtual Machine Scale Sets à l’aide d’une URL SAP d’un objet blob de stockage qui contient un script bash.
Set-AzVmssVMRunCommand -ResourceGroupName MyRG0 -VMScaleSetName MyVMSS -InstanceId 0 -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>
Notes
Remarque : L’URL SAP doit fournir un accès en lecture à l’objet blob. Un délai d’expiration de 24 heures est suggéré pour l’URL SAS. Les URL SAP peuvent être générées sur le Portail Azure à l’aide des options de l’objet blob ou d’un jeton SAP à l’aide de New-AzStorageBlobSASToken. Si vous générez un jeton SAP à l’aide de New-AzStorageBlobSASToken, URL SAP = URL d’objet blob de base + « ? » + jeton SAP à partir de New-AzStorageBlobSASToken
.
Créer ou mettre à jour Run Command sur une instance de machine virtuelle à l’aide des paramètres Parameter et ProtectedParameter (paramètres publics et protégés pour le script)
$PublicParametersArray = @([Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='publicParam1';value='publicParam1value'},
>> [Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='publicParam2';value='publicParam2value'})
$ProtectedParametersArray = @([Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='secret1';value='secret1value'},
>> [Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='secret2';value='secret2value'})
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri> -Parameter $PublicParametersArray -ProtectedParameter $ProtectedParametersArray
Utilisez ProtectedParameter
pour passer toutes les entrées sensibles au script, comme les mots de passe, les clés, etc.
- Windows : Les paramètres Parameters et ProtectedParameters sont passés au script en tant qu’arguments et s’exécutent comme suit :
myscript.ps1 -publicParam1 publicParam1value -publicParam2 publicParam2value -secret1 secret1value -secret2 secret2value
- Linux : Les paramètres nommés et leurs valeurs sont définis sur la configuration de l’environnement, qui doit être accessible dans le script
.sh
. Pour les arguments sans nom, passez une chaîne vide pour nommer l’entrée. Les arguments sans nom sont passés au script et s’exécutent comme suit :myscript.sh publicParam1value publicParam2value secret1value secret2value
Supprimer la ressource RunCommand de la machine virtuelle
Supprimez la ressource RunCommand précédemment déployée sur la machine virtuelle. Si l’exécution du script est toujours en cours, l’exécution se termine.
Remove-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -RunCommandName "RunCommandName"
API REST
Pour déployer une nouvelle commande Run Command, exécutez une commande PUT directement sur la machine virtuelle et spécifiez un nom unique pour l’instance Run Command.
GET /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands?api-version=2019-12-01
{
"location": "<location>",
"properties": {
"source": {
"script": "Write-Host Hello World!",
"scriptUri": "<SAS URI of a storage blob with read access or public URI>",
"commandId": "<Id>"
},
"parameters": [
{
"name": "param1",
"value": "value1"
},
{
"name": "param2",
"value": "value2"
}
],
"protectedParameters": [
{
"name": "secret1",
"value": "value1"
},
{
"name": "secret2",
"value": "value2"
}
],
"runAsUser": "userName",
"runAsPassword": "userPassword",
"timeoutInSeconds": 3600,
"outputBlobUri": "< SAS URI of a storage append blob with read, add, create, write access>",
"errorBlobUri": "< SAS URI of a storage append blob with read, add, create, write access >"
}
}
Notes
- Vous pouvez fournir un script inline, un URI de script ou un ID de commande de script intégré en tant que source d’entrée. L’URI de script est un URI SAS d’objet blob de stockage avec un URI accessible en lecture ou un URI public.
- Un seul type d’entrée source est pris en charge pour une exécution de commande.
- Run Command prend en charge l’écriture de la sortie et de l’erreur dans les objets blob de stockage à l’aide des paramètres outputBlobUri et errorBlobUri, qui permettent de stocker les sorties de script volumineuses. Utilisez l’URI SAS d’un objet blob d’ajout au stockage disposant d’un accès pour les opérations de lecture, d’ajout, de création et d’écriture. L’objet blob doit être de type AppendBlob. Sinon, l’écriture de la sortie du script ou de l’objet blob d’erreur échoue. L’objet blob est remplacé, s’il existe déjà. Il sera créé s'il n'existe pas.
Répertorier les instances en cours d’exécution de la commande Run Command sur une machine virtuelle
GET /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands?api-version=2019-12-01
Obtenir les détails de sortie d’un déploiement Run Command spécifique
GET /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands/<runCommandName>?$expand=instanceView&api-version=2019-12-01
Supprimer un déploiement Run Command spécifique
Supprimer l’instance Run Command
DELETE /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands/<runCommandName>?api-version=2019-12-01
Déployer des scripts dans une séquence ordonnée
Pour déployer des scripts de manière séquentielle, utilisez un modèle de déploiement, en spécifiant une relation dependsOn
entre les scripts séquentiels.
{
"type":"Microsoft.Compute/virtualMachines/runCommands",
"name":"secondRunCommand",
"apiVersion":"2019-12-01",
"location":"[parameters('location')]",
"dependsOn":<full resourceID of the previous other Run Command>,
"properties":{
"source":{
"script":"echo Hello World!"
},
"timeoutInSeconds":60
}
}
Exécuter plusieurs commandes Run Command de manière séquentielle
Par défaut, si vous déployez plusieurs ressources RunCommand à l’aide du modèle de déploiement, elles sont exécutées simultanément sur la machine virtuelle. Si vous avez une dépendance sur les scripts et un ordre d’exécution par défaut, vous pouvez utiliser la propriété dependsOn
pour les faire s’exécuter de manière séquentielle.
Dans cet exemple, secondRunCommand s’exécute après firstRunCommand.
{
"$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion":"1.0.0.0",
"resources":[
{
"type":"Microsoft.Compute/virtualMachines/runCommands",
"name":"[concat(parameters('vmName'),'/firstRunCommand')]",
"apiVersion":"2019-12-01",
"location":"[parameters('location')]",
"dependsOn":[
"[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'))]"
],
"properties":{
"source":{
"script":"echo First: Hello World!"
},
"parameters":[
{
"name":"param1",
"value":"value1"
},
{
"name":"param2",
"value":"value2"
}
],
"timeoutInSeconds":20
}
},
{
"type":"Microsoft.Compute/virtualMachines/runCommands",
"name":"[concat(parameters('vmName'),'/secondRunCommand')]",
"apiVersion":"2019-12-01",
"location":"[parameters('location')]",
"dependsOn":[
"[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'),'runcommands/firstRunCommand')]"
],
"properties":{
"source":{
"scriptUri":"http://github.com/myscript.ps1"
},
"timeoutInSeconds":60
}
}
]
}
Étapes suivantes
Pour en savoir plus sur les autres méthodes d’exécution à distance des commandes et des scripts dans votre machine virtuelle, consultez Exécuter des scripts dans votre machine virtuelle Linux.