Udostępnij za pośrednictwem


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

Zarządzane polecenie uruchomienia jest obecnie dostępne w Azure CLI, programie PowerShell i interfejsie API. Funkcjonalność portalu jest na etapie planowania.

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.

Zarządzane polecenie Run Command używa tego samego kanału agenta maszyny wirtualnej do wykonywania skryptów i oferuje następujące ulepszenia w porównaniu do oryginalnego akcyjnego polecenia Run Command:

  • Obsługa zaktualizowanego polecenia Uruchom poprzez szablon wdrażania 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 Agent Gościa systemu Linux to wersja 2.4.0.2. Starsze wersje nie obsługują funkcjonalności Managed RunCommand.

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

Dostępne polecenia

Identyfikator polecenia Opis
ifconfig Pobiera konfigurację wszystkich interfejsów sieciowych. Aby uzyskać informacje o użyciu, zobacz Uruchamianie skryptów

Uwaga

Powyższe identyfikatory poleceń mają zastosowanie do zarządzanych poleceń uruchamiania dla maszyn wirtualnych z systemem Linux. Wszystkie identyfikatory poleceń można wyświetlić przy użyciu polecenia "Get-AzVMRunCommandDocument -Location {RegionName}".

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 systemu Linux platformy Azure.

Wykonywanie skryptu przy użyciu maszyny wirtualnej

To polecenie dostarcza skrypt do maszyny wirtualnej, wykonuje go i zwraca 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 zwraca 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 pobiera bieżący postęp wykonywania, w tym najnowsze wyniki, czas rozpoczęcia/zakończenia, kod zakończenia i stan końcowy 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łnego wyniku i błędu, możesz przesłać dane wyjściowe oraz dane błędów do obiektów blob w magazynie uzupełniania przy użyciu parametrów -outputBlobUri i -errorBlobUri podczas wykonywania polecenia Uruchom używając 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 dostarcza skrypt do maszyny wirtualnej, wykonuje go i zwraca 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>”

Wykonywanie długotrwałego polecenia uruchamiania na maszynie wirtualnej

Czas wykonywania powinien trwać dłużej niż domyślny limit 90 minut. Powinien działać przez 100 minut (należy odwołać się do parametru -TimeoutInSecond z wartością 6000 sekund), jeżeli oczekuje się, że skrypt będzie działał tak długo. Po 100 minutach wykonanie skryptu powinno zostać zatrzymane.

Set-AzVMRunCommand -ResourceGroupName MyRG -VMName MyVM -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri> -AsyncExecution -TimeoutInSecond 6000

Wyświetlanie listy wszystkich wdrożonych zasobów RunCommand na maszynie wirtualnej

To polecenie zwraca 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 pobiera bieżący postęp wykonywania, w tym najnowsze wyniki, czas rozpoczęcia/zakończenia, kod zakończenia i stan końcowy 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 być pełnym adresem URL sygnatury dostępu współdzielonego lub publicznym adresem URL obiektu magazynu blob.

Uwaga

Adres URL sygnatury dostępu współdzielonego musi zapewnić dostęp do odczytu do obiektu blob. Zaleca się 24-godzinny czas wygaśnięcia dla adresu URL SAS. Adresy URL sygnatur SAS można wygenerować w portalu Azure, korzystając z opcji obiektu blob lub tokenu SAS przy użyciu polecenia New-AzStorageBlobSASToken. W przypadku generowania tokenu SAS przy użyciu New-AzStorageBlobSASToken, twój adres URL SAS to "podstawowy adres URL obiektu blob" + "?" + "Token SAS z użyciem polecenia New-AzStorageBlobSASToken"

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptURI>

Pobierz widok instancji polecenia uruchomienia dla maszyny wirtualnej po utworzeniu lub zaktualizowaniu polecenia uruchomienia.

Pobierz polecenie Run dla maszyny wirtualnej z widokiem instancji. 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 zakończenia (ExitCode) różny od zera wskazuje na 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 - Status skryptu polecenia "Uruchom" użytkownika. Sprawdź ten stan, aby dowiedzieć się, czy skrypt zakończył się pomyślnie.

ProvisioningState — Status całkowitej aprowizacji rozszerzeń (czy platforma rozszerzenia była w stanie wyzwolić skrypt polecenia 'Uruchom').

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 ;, 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. 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 oraz uzupełnialnych obiektów blob błędów

Utwórz lub zaktualizuj polecenie uruchomienia na maszynie wirtualnej i przesyłaj strumieniowo standardowe dane wyjściowe i standardowe błędy do uzupełnialnych obiektów blob dla danych wyjściowych i błędów.

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. Zaleca się 24-godzinny czas wygaśnięcia dla adresu URL SAS. Jeśli obiekt blob danych wyjściowych lub blob błędu 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-AzStorageBlobSASTokenadresu 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 elementy RunA działały prawidłowo, skontaktuj się z administratorem maszyny wirtualnej i upewnij się, że użytkownik jest dodawany do maszyny 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 uruchamiania w zasobie zestawu skalowania maszyn wirtualnych, używając identyfikatora SourceScriptUri (adresu URL SAS obiektu blob w magazynie).

Utwórz lub zaktualizuj polecenie 'Uruchom' w zasobie zestawu skali maszyn wirtualnych przy użyciu SAS URL (adresu URL sygnatury dostępu współdzielonego) obiektu magazynowego blob zawierającego skrypt powłoki Bash.

Set-AzVmssVMRunCommand -ResourceGroupName MyRG0 -VMScaleSetName MyVMSS -InstanceId 0 -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>

Uwaga

Uwaga: SAS URL musi zapewniać dostęp do odczytu obiektu blob. Sugerowany czas wygaśnięcia dla adresu URL SAS to 24 godziny. 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 ich wartości są ustawione w konfiguracji środowiska, która powinna być dostępna w .sh skrypcie. W przypadku argumentów bez nazwy przekaż pusty ciąg znaków jako nazwa wejściowa. 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"

API REST

Aby wdrożyć nowe polecenie Run Command, wykonaj operację PUT bezpośrednio na maszynie wirtualnej i określ unikatową nazwę instancji dla polecenia Run Command.

PUT /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ć skrypt inline, URI skryptu lub wbudowany skrypt identyfikator polecenia jako źródło wejściowe. Identyfikator URI skryptu jest albo identyfikatorem URI obiektu blob magazynu z sygnaturą dostępu współdzielonego do odczytu, albo 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 secondRunCommand zostanie wykonane po 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
         }
      }
   ]
}

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.