Uruchamianie skryptów na maszynie wirtualnej z systemem Linux przy użyciu zarządzanej funkcji Uruchamianie poleceń
Dotyczy: ✔️ Maszyny wirtualne z systemem Linux — elastyczne zestawy skalowania ✔️
Ważne
Polecenie zarządzanego uruchomienia jest obecnie dostępne w interfejsie wiersza polecenia platformy Azure, programie PowerShell i interfejsie API. Funkcje portalu będą wkrótce dostępne.
Funkcja Uruchom polecenie używa agenta maszyny wirtualnej do uruchamiania skryptów na maszynie wirtualnej z systemem Linux platformy Azure. Za pomocą tych skryptów można ogólnie zarządzać maszynami lub aplikacjami. Mogą one ułatwić szybkie diagnozowanie i korygowanie problemów z dostępem do maszyny wirtualnej i siecią oraz powrót maszyny wirtualnej do dobrego stanu.
Zaktualizowane polecenie przebiegu zarządzanego używa tego samego kanału agenta maszyny wirtualnej do wykonywania skryptów i zapewnia następujące ulepszenia dotyczące oryginalnego polecenia uruchamiania akcji:
- Obsługa zaktualizowanej funkcji Uruchamianie polecenia za pośrednictwem szablonu wdrażania usługi ARM
- Równoległe wykonywanie wielu skryptów
- Sekwencyjne wykonywanie skryptów
- Określany przez użytkownika limit czasu skryptu
- Obsługa długotrwałych skryptów (wykonywanych przez godziny/dni)
- Przekazywanie wpisów tajnych (parametrów, haseł) w bezpieczny sposób
Wymagania wstępne
Ważne
Minimalna obsługiwana wersja agenta gościa systemu Linux to wersja 2.4.0.2 Starsze wersje nie obsługują zarządzanego polecenia
Obsługiwane dystrybucje systemu Linux
Dystrybucja systemu Linux | x64 | ARM64 |
---|---|---|
Alma Linux | 9.x+ | Nieobsługiwany |
Debian | Ponad 10 | Nieobsługiwany |
Flatcar Linux | 3374.2.x+ | Nieobsługiwany |
Azure Linux | 2.x | Nieobsługiwany |
openSUSE | 12.3+ | Nieobsługiwany |
Oracle Linux | 6.4+, 7.x+, 8.x+ | Nieobsługiwany |
Red Hat Enterprise Linux | 6.7+, 7.x+, 8.x+ | Nieobsługiwany |
Rocky Linux | 9.x+ | Nieobsługiwany |
SLES | 12.x+, 15.x+ | Nieobsługiwany |
Ubuntu | 18.04+, 20.04+, 22.04+ | Nieobsługiwany |
Ograniczanie dostępu do uruchamiania polecenia
Wyświetlenie listy poleceń uruchamiania lub wyświetlenie szczegółów polecenia wymaga Microsoft.Compute/locations/runCommands/read
uprawnienia na poziomie subskrypcji. Wbudowana rola Czytelnik i wyższe poziomy mają to uprawnienie.
Uruchomienie polecenia wymaga Microsoft.Compute/virtualMachines/runCommand/write
uprawnienia. Rola Współautor maszyny wirtualnej i wyższe poziomy mają to uprawnienie.
Możesz użyć jednej z wbudowanych ról lub utworzyć rolę niestandardową, aby użyć polecenia Uruchom.
Interfejs wiersza polecenia platformy Azure
W poniższych przykładach użyto polecenia az vm run-command , aby uruchomić skrypt powłoki na maszynie wirtualnej z systemem Linux platformy Azure.
Wykonywanie skryptu przy użyciu maszyny wirtualnej
To polecenie dostarczy skrypt do maszyny wirtualnej, wykona go i zwróci przechwycone dane wyjściowe.
az vm run-command create --name "myRunCommand" --vm-name "myVM" --resource-group "myRG" --script "echo Hello World!"
Wyświetlanie listy wszystkich wdrożonych zasobów RunCommand na maszynie wirtualnej
To polecenie zwróci pełną listę wcześniej wdrożonych poleceń uruchamiania wraz z ich właściwościami.
az vm run-command list --vm-name "myVM" --resource-group "myRG"
Uzyskiwanie stanu wykonania i wyników
To polecenie pobierze bieżący postęp wykonywania, w tym najnowsze dane wyjściowe, godzinę rozpoczęcia/zakończenia, kod zakończenia i stan terminalu wykonania.
az vm run-command show --name "myRunCommand" --vm-name "myVM" --resource-group "myRG" --expand instanceView
Uwaga
Pola danych wyjściowych i błędów w programie instanceView
są ograniczone do ostatnich 4 KB.
Jeśli chcesz uzyskać dostęp do pełnych danych wyjściowych i błędów, możesz przekazać dane wyjściowe i dane błędów do uzupełnialnych obiektów blob magazynu przy użyciu parametrów i -errorBlobUri
podczas wykonywania polecenia Uruchom przy użyciu -outputBlobUri
polecenia Set-AzVMRunCommand
lub Set-AzVMssRunCommand
.
Usuń zasób RunCommand z maszyny wirtualnej
Usuń zasób RunCommand wcześniej wdrożony na maszynie wirtualnej. Jeśli wykonywanie skryptu jest nadal w toku, wykonanie zostanie zakończone.
az vm run-command delete --name "myRunCommand" --vm-name "myVM" --resource-group "myRG"
PowerShell
Wykonywanie skryptu przy użyciu maszyny wirtualnej
To polecenie dostarczy skrypt do maszyny wirtualnej, wykona go i zwróci przechwycone dane wyjściowe.
Set-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -Location "EastUS" -RunCommandName "RunCommandName" –SourceScript "echo Hello World!"
Wykonywanie skryptu na maszynie wirtualnej przy użyciu parametru SourceScriptUri
OutputBlobUri
i ErrorBlobUri
są parametrami opcjonalnymi.
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>”
Wyświetlanie listy wszystkich wdrożonych zasobów RunCommand na maszynie wirtualnej
To polecenie zwróci pełną listę wcześniej wdrożonych poleceń uruchamiania wraz z ich właściwościami.
Get-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM"
Uzyskiwanie stanu wykonania i wyników
To polecenie pobierze bieżący postęp wykonywania, w tym najnowsze dane wyjściowe, godzinę rozpoczęcia/zakończenia, kod zakończenia i stan terminalu wykonania.
Get-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -RunCommandName "RunCommandName" -Expand instanceView
Tworzenie lub aktualizowanie polecenia uruchamiania na maszynie wirtualnej przy użyciu identyfikatora SourceScriptURI (adres URL sygnatury dostępu współdzielonego obiektu blob magazynu)
Utwórz lub zaktualizuj polecenie Uruchom na maszynie wirtualnej z systemem Windows przy użyciu adresu URL sygnatury dostępu współdzielonego obiektu blob magazynu zawierającego skrypt programu PowerShell. SourceScriptUri
może to być pełny adres URL sygnatury dostępu współdzielonego lub publiczny adres URL obiektu blob magazynu.
Uwaga
Adres URL sygnatury dostępu współdzielonego musi zapewnić dostęp do odczytu do obiektu blob. Sugerowany jest czas wygaśnięcia 24 godzin dla adresu URL sygnatury dostępu współdzielonego. Adresy URL sygnatur dostępu współdzielonego można wygenerować w witrynie Azure Portal przy użyciu opcji obiektu blob lub tokenu SAS przy użyciu polecenia New-AzStorageBlobSASToken
. W przypadku generowania tokenu SAS przy użyciu adresu New-AzStorageBlobSASToken
URL sygnatury dostępu współdzielonego = "podstawowy adres URL obiektu blob" + "?" + "Token SAS z polecenia New-AzStorageBlobSASToken"
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptURI>
Pobieranie widoku wystąpienia polecenia uruchamiania dla maszyny wirtualnej po utworzeniu lub zaktualizowaniu polecenia przebiegu
Pobierz polecenie uruchom dla maszyny wirtualnej z widokiem wystąpienia. Widok wystąpienia zawiera stan wykonywania polecenia uruchomienia (powodzenie, niepowodzenie itp.), kod zakończenia, standardowe dane wyjściowe i standardowy błąd wygenerowany przez wykonanie skryptu przy użyciu polecenia Uruchom. Kod exitCode inny niż zero wskazuje nieudane wykonanie.
$x = Get-AzVMRunCommand -ResourceGroupName MyRG -VMName MyVM -RunCommandName MyRunCommand -Expand InstanceView
$x.InstanceView
Oczekiwane dane wyjściowe:
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
- Stan skryptu uruchom polecenie użytkownika. Zapoznaj się z tym stanem, aby dowiedzieć się, czy skrypt zakończył się pomyślnie, czy nie.
ProvisioningState
— Stan ogólnego zakończenia aprowizacji rozszerzeń (czy platforma rozszerzenia była w stanie wyzwolić skrypt uruchom polecenie, czy nie).
Tworzenie lub aktualizowanie polecenia uruchamiania na maszynie wirtualnej przy użyciu skryptu SourceScript (tekst skryptu)
Utwórz lub zaktualizuj polecenie Uruchom na maszynie wirtualnej przekazując zawartość skryptu bezpośrednio do parametru -SourceScript. Użyj ;
polecenia , aby oddzielić wiele poleceń.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVML -RunCommandName MyRunCommand2 -Location EastUS2EUAP -SourceScript "id; echo HelloWorld"
Tworzenie lub aktualizowanie polecenia uruchamiania na maszynie wirtualnej przy użyciu identyfikatora SourceCommandId
Utwórz lub zaktualizuj polecenie Uruchom na maszynie wirtualnej przy użyciu istniejącego commandId
wcześniej polecenia . Dostępne identyfikatory poleceń można pobrać przy użyciu polecenia Get-AzVMRunCommandDocument.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceCommandId ipconfig
Tworzenie lub aktualizowanie polecenia uruchamiania na maszynie wirtualnej przy użyciu parametru OutputBlobUri, ErrorBlobUri w celu przesyłania strumieniowego standardowych danych wyjściowych i standardowych komunikatów o błędach do danych wyjściowych i błędów uzupełnialnych obiektów blob
Utwórz lub zaktualizuj polecenie uruchom na maszynie wirtualnej i przesyłaj strumieniowo standardowe komunikaty o błędach i komunikaty o błędach do danych wyjściowych i uzupełnialnych obiektów blob.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVML -RunCommandName MyRunCommand3 -Location EastUS2EUAP EastUS2EUAP -SourceScriptUri <SourceScriptUri> -OutputBlobUri <OutputBlobUri> -ErrorBlobUri <errorbloburi>
Uwaga
Obiekty blob danych wyjściowych i błędów muszą być typu AppendBlob
, a ich adresy URL sygnatur dostępu współdzielonego muszą zapewniać dostęp do odczytu, dołączania, tworzenia, zapisu do obiektu blob. Sugerowany jest czas wygaśnięcia 24 godzin dla adresu URL sygnatury dostępu współdzielonego. Jeśli obiekt blob danych wyjściowych lub błąd nie istnieje, zostanie utworzony obiekt blob typu AppendBlob. Adresy URL sygnatur dostępu współdzielonego można wygenerować w witrynie Azure Portal przy użyciu opcji obiektu blob lub tokenu SAS przy użyciu polecenia New-AzStorageBlobSASToken. W przypadku generowania tokenu SAS przy użyciu New-AzStorageBlobSASToken
adresu URL sygnatury dostępu współdzielonego = podstawowy adres URL obiektu blob + "?" + token SAS z .New-AzStorageBlobSASToken
Utwórz lub zaktualizuj polecenie Uruchom na maszynie wirtualnej, uruchom polecenie Uruchom jako inny użytkownik przy użyciu parametrów RunAsUser i RunAsPassword
Utwórz lub zaktualizuj polecenie Uruchom na maszynie wirtualnej, uruchom polecenie Uruchom jako inny użytkownik przy użyciu parametrów RunAsUser
i .RunAsPassword
Aby działało prawidłowo, skontaktuj się z administratorem maszyny wirtualnej i upewnij się, że użytkownik został dodany na maszynie wirtualnej, użytkownik ma dostęp do zasobów, do których uzyskuje dostęp za pomocą polecenia uruchom (katalogi, pliki, sieć itp.), a w przypadku maszyny wirtualnej z systemem Windows usługa "Logowanie pomocnicze" jest uruchomiona na maszynie wirtualnej.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP EastUS2EUAP -SourceScriptUri <SourceScriptUri> -RunAsUser myusername -RunAsPassword mypassword
Utwórz lub zaktualizuj polecenie Uruchom w zasobie zestawów skalowania maszyn wirtualnych przy użyciu identyfikatora SourceScriptUri (adresu URL sygnatury dostępu współdzielonego obiektu blob magazynu).
Utwórz lub zaktualizuj polecenie Uruchom w zasobie zestawów skalowania maszyn wirtualnych przy użyciu adresu URL sygnatury dostępu współdzielonego obiektu blob magazynu zawierającego skrypt powłoki Bash.
Set-AzVmssVMRunCommand -ResourceGroupName MyRG0 -VMScaleSetName MyVMSS -InstanceId 0 -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>
Uwaga
Uwaga Adres URL sygnatury dostępu współdzielonego musi zapewnić dostęp do odczytu do obiektu blob. Sugerowany jest czas wygaśnięcia 24 godzin dla adresu URL sygnatury dostępu współdzielonego. Adresy URL sygnatur dostępu współdzielonego można wygenerować w witrynie Azure Portal przy użyciu opcji obiektu blob lub tokenu SAS przy użyciu polecenia New-AzStorageBlobSASToken. W przypadku generowania tokenu SAS przy użyciu polecenia New-AzStorageBlobSASToken adres URL sygnatury dostępu współdzielonego = podstawowy adres URL obiektu blob + "?" + token SAS z .New-AzStorageBlobSASToken
Tworzenie lub aktualizowanie polecenia uruchamiania w wystąpieniu maszyny wirtualnej przy użyciu parametrów i parametrów ProtectedParameter (parametry publiczne i chronione do skryptu)
$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
Służy ProtectedParameter
do przekazywania wszelkich poufnych danych wejściowych do skryptu, takiego jak hasła, klucze itp.
- Windows: parametry i chronioneparametry są przekazywane do skryptu, ponieważ argumenty są przekazywane do skryptu i uruchamiane w następujący sposób
myscript.ps1 -publicParam1 publicParam1value -publicParam2 publicParam2value -secret1 secret1value -secret2 secret2value
- Linux: nazwane parametry i jego wartości są ustawione na konfigurację środowiska, która powinna być dostępna w
.sh
skrycie. W przypadku argumentów bez nazw przekaż pusty ciąg do nazwy wejściowej. Argumenty bez nazw są przekazywane do skryptu i uruchamiane w następujący sposób :myscript.sh publicParam1value publicParam2value secret1value secret2value
Usuń zasób RunCommand z maszyny wirtualnej
Usuń zasób RunCommand wcześniej wdrożony na maszynie wirtualnej. Jeśli wykonywanie skryptu jest nadal w toku, wykonanie zostanie zakończone.
Remove-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -RunCommandName "RunCommandName"
Interfejs API REST
Aby wdrożyć nowe polecenie uruchamiania, wykonaj polecenie PUT na maszynie wirtualnej bezpośrednio i określ unikatową nazwę wystąpienia uruchom polecenie.
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 >"
}
}
Uwagi
- Możesz podać wbudowany skrypt, identyfikator URI skryptu lub wbudowany identyfikator polecenia skryptu jako źródło wejściowe. Identyfikator URI skryptu to identyfikator URI sygnatury dostępu współdzielonego obiektu blob magazynu z dostępem do odczytu lub publicznym identyfikatorem URI.
- Tylko jeden typ danych wejściowych źródłowych jest obsługiwany dla jednego wykonywania polecenia.
- Polecenie Run obsługuje zapisywanie danych wyjściowych i błędów w obiektach blob usługi Storage przy użyciu parametrów outputBlobUri i errorBlobUri, które mogą służyć do przechowywania dużych danych wyjściowych skryptu. Użyj identyfikatora URI sygnatury dostępu współdzielonego uzupełnialnych obiektów blob magazynu z dostępem do odczytu, dodawania, tworzenia i zapisu. Obiekt blob powinien być typu AppendBlob. Zapisywanie danych wyjściowych skryptu lub błędu obiektu blob nie powiodło się w przeciwnym razie. Obiekt blob zostanie zastąpiony, jeśli już istnieje. Zostanie on utworzony, jeśli nie istnieje.
Wyświetlanie listy uruchomionych wystąpień polecenia uruchamiania na maszynie wirtualnej
GET /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands?api-version=2019-12-01
Pobieranie szczegółów danych wyjściowych dla określonego wdrożenia polecenia uruchamiania
GET /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands/<runCommandName>?$expand=instanceView&api-version=2019-12-01
Usuwanie określonego wdrożenia polecenia uruchomień
Usuwanie wystąpienia polecenia uruchomień
DELETE /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands/<runCommandName>?api-version=2019-12-01
Wdrażanie skryptów w uporządkowanej kolejności
Aby wdrożyć skrypty sekwencyjnie, użyj szablonu wdrożenia, określając relację dependsOn
między skryptami sekwencyjnymi.
{
"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
}
}
Sekwencyjnie wykonaj wiele uruchomień poleceń
Domyślnie w przypadku wdrożenia wielu zasobów RunCommand przy użyciu szablonu wdrożenia zostaną one wykonane jednocześnie na maszynie wirtualnej. Jeśli masz zależność od skryptów i preferowanej kolejności wykonywania, możesz użyć dependsOn
właściwości , aby były uruchamiane sekwencyjnie.
W tym przykładzie polecenie secondRunCommand zostanie wykonane po pierwszymRunCommand.
{
"$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
}
}
]
}
Następne kroki
Aby dowiedzieć się więcej o innych sposobach zdalnego uruchamiania skryptów i poleceń na maszynie wirtualnej, zobacz Uruchamianie skryptów na maszynie wirtualnej z systemem Linux.