Uruchamianie skryptów na maszynie wirtualnej z systemem Linux przy użyciu zarządzanej funkcji Uruchamianie poleceń

Uwaga

W tym artykule odwołuje się do systemu CentOS — dystrybucji systemu Linux, która zbliża się do stanu zakończenia życia (EOL). Rozważ odpowiednie użycie i zaplanuj. Aby uzyskać więcej informacji, zobacz wskazówki dotyczące zakończenia życia systemu CentOS.

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

Obsługiwane dystrybucje systemu Linux

Linuksa x64 ARM64
Alma Linux 9.x+ Nieobsługiwany
CentOS 7.x+, 8.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-AzStorageBlobSASTokenURL 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 commandIdwcześ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-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 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.