Udostępnij za pośrednictwem


Tworzenie skryptu wdrażania w aplikacji Bicep

Ten artykuł zawiera przykłady pokazujące, jak opracować skrypt wdrożenia w aplikacji Bicep.

Zasoby skryptu wdrożenia mogą mieć czas trwania wdrożenia. Aby efektywnie opracowywać i testować te skrypty, rozważ utworzenie dedykowanego środowiska deweloperskiego, takiego jak wystąpienie kontenera platformy Azure (ACI) lub wystąpienie platformy Docker. Aby uzyskać więcej informacji, zobacz Tworzenie środowiska projektowego.

Składnia

Poniższy plik Bicep jest przykładem zasobu skryptu wdrożenia. Aby uzyskać więcej informacji, zobacz najnowszy schemat skryptu wdrażania.

resource <symbolic-name> 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: '<resource-name>'
  location: resourceGroup().location
  tags: {}
  identity: {
    type: 'UserAssigned'
    userAssignedIdentities: {
      '<user-assigned-identity-id>': {}
    }
  }
  kind: 'AzureCLI'
  properties: {
    storageAccountSettings: {
      storageAccountName: '<storage-account-name>'
      storageAccountKey: '<storage-account-key>'
    }
    containerSettings: {
      containerGroupName: '<container-group-name>'
      subnetIds: [
        {
          id: '<subnet-id>'
        }
      ]
    }
    environmentVariables: []
    azCliVersion: '2.52.0'
    arguments: '<script-arguments>'
    scriptContent: '''<azure-cli-or-azure-powershell-script>''' // or primaryScriptUri: 'https://raw.githubusercontent.com/Azure/azure-docs-bicep-samples/main/samples/deployment-script/inlineScript.ps1'
    supportingScriptUris: []
    timeout: 'P1D'
    cleanupPreference: 'OnSuccess'
    retentionInterval: 'P1D'
    forceUpdateTag: '1'
  }
}

W skry skrycie wdrażania określ następujące wartości właściwości:

  • tags: Określ tagi skryptu wdrożenia. Jeśli usługa skryptu wdrożenia tworzy dwa zasoby pomocnicze (konto magazynu i wystąpienie kontenera), tagi są przekazywane do obu zasobów. Możesz użyć tagów, aby zidentyfikować zasoby. Innym sposobem identyfikacji tych zasobów pomocniczych jest ich sufiksy, które zawierają azscripts. Aby uzyskać więcej informacji, zobacz Monitorowanie i rozwiązywanie problemów ze skryptami wdrażania.

  • identity: W przypadku wersji 2020-10-01 interfejsu API skryptu wdrażania lub nowszej tożsamość zarządzana przypisana przez użytkownika jest opcjonalna, chyba że musisz wykonać jakiekolwiek akcje specyficzne dla platformy Azure w skrycie lub uruchamiasz skrypt wdrażania w sieci prywatnej. Wersja 2019-10-01-preview interfejsu API wymaga tożsamości zarządzanej, ponieważ usługa skryptu wdrażania używa jej do uruchamiania skryptów.

    Po określeniu właściwości usługa skryptu identity wywołuje przed Connect-AzAccount -Identity wywołaniem skryptu użytkownika. Obecnie obsługiwana jest tylko tożsamość zarządzana przypisana przez użytkownika. Aby zalogować się przy użyciu innej tożsamości w skrypcie wdrażania, możesz wywołać metodę Connect-AzAccount. Aby uzyskać więcej informacji, zobacz Konfigurowanie minimalnych uprawnień.

  • kind: określ typ skryptu lub AzurePowerShell AzureCLI. Oprócz kindparametru azPowerShellVersion należy określić właściwość or azCliVersion .

  • storageAccountSettings: określ ustawienia, które mają być używane na istniejącym koncie magazynu. Jeśli storageAccountName nie zostanie określony, zostanie automatycznie utworzone konto magazynu. Aby uzyskać więcej informacji, zobacz Używanie istniejącego konta magazynu.

  • containerSettings: dostosuj nazwę wystąpienia kontenera platformy Azure. Aby uzyskać informacje na temat konfigurowania nazwy grupy kontenera, zobacz Konfigurowanie wystąpienia kontenera w dalszej części tego artykułu. Aby uzyskać informacje o konfigurowaniu subnetIds uruchamiania skryptu wdrażania w sieci prywatnej, zobacz Uzyskiwanie dostępu do prywatnej sieci wirtualnej.

  • environmentVariables: Określ zmienne środowiskowe, które mają być przekazywane do skryptu.

  • azPowerShellVersion/azCliVersion: określ wersję modułu do użycia.

    Zobacz listę obsługiwanych wersji interfejsu wiersza polecenia platformy Azure.

    Ważne

    Skrypt wdrażania używa dostępnych obrazów interfejsu wiersza polecenia z Rejestr Artefaktów Microsoft. Zwykle certyfikowanie obrazu interfejsu wiersza polecenia dla skryptu wdrożenia trwa około jednego miesiąca. Nie używaj wersji interfejsu wiersza polecenia, które zostały wydane w ciągu ostatnich 30 dni. Aby znaleźć daty wydania obrazów, zobacz Informacje o wersji interfejsu wiersza polecenia platformy Azure. Jeśli używasz nieobsługiwanej wersji, komunikat o błędzie zawiera listę obsługiwanych wersji.

  • arguments: Określ wartości parametrów. Wartości są oddzielone spacjami.

    Skrypt wdrażania dzieli argumenty na tablicę ciągów, wywołując wywołanie systemu CommandLineToArgvW . Ten krok jest niezbędny, ponieważ argumenty są przekazywane jako właściwość polecenia do usługi Azure Container Instances, a właściwość polecenia jest tablicą ciągów.

    Jeśli argumenty zawierają znaki ucieczki, należy dwukrotnie uniknić znaków. Na przykład w poprzedniej przykładowej składni Bicep argument to -name \"John Dole\". Ciąg ucieczki to -name \\"John Dole\\".

    Aby przekazać parametr Bicep typu object jako argument, przekonwertuj obiekt na ciąg przy użyciu funkcji string(), a następnie użyj funkcji replace(), aby zastąpić wszelkie cudzysłowy () znakami cudzysłowu () z podwójnymi znakami cudzysłowu ("\\"). Na przykład:

    replace(string(parameters('tables')), '"', '\\"')
    

    Aby uzyskać więcej informacji, zobacz przykładowy plik Bicep.

  • scriptContent: określ zawartość skryptu. Może to być wbudowany skrypt lub plik skryptu zewnętrznego zaimportowany przy użyciu funkcji loadTextContent . Aby uzyskać więcej informacji, zobacz Inline vs. external file w dalszej części tego artykułu. Aby uruchomić skrypt zewnętrzny, zamiast tego użyj polecenia primaryScriptUri .

  • primaryScriptUri: określ publicznie dostępny adres URL podstawowego skryptu wdrażania z obsługiwanymi rozszerzeniami plików. Aby uzyskać więcej informacji, zobacz Używanie skryptów zewnętrznych w dalszej części tego artykułu.

  • supportingScriptUris: określ tablicę publicznie dostępnych adresów URL do plików pomocniczych, które są wywoływane w elemecie scriptContent lub primaryScriptUri. Aby uzyskać więcej informacji, zobacz Inline vs. external file w dalszej części tego artykułu.

  • timeout: określ maksymalny dozwolony czas wykonywania skryptu w formacie ISO 8601. Domyślna wartość to P1D.

  • forceUpdateTag: zmiana tej wartości między wdrożeniami plików Bicep wymusza ponowne uruchomienie skryptu wdrożenia. Jeśli używasz newGuid() funkcji lub utcNow() , możesz jej użyć tylko w wartości domyślnej parametru. Aby dowiedzieć się więcej, zobacz Uruchamianie skryptu więcej niż raz w dalszej części tego artykułu.

  • cleanupPreference. Określ preferencję czyszczenia dwóch pomocniczych zasobów wdrażania (konta magazynu i wystąpienia kontenera), gdy wykonanie skryptu zostanie w stanie terminalu. Ustawieniem domyślnym jest Always, który wywołuje usunięcie zasobów pomocniczych niezależnie od stanu terminalu (Succeeded, Failedlub Canceled). Aby dowiedzieć się więcej, zobacz Czyszczenie zasobów skryptów wdrażania w dalszej części tego artykułu.

  • retentionInterval: określ interwał, dla którego usługa zachowuje zasób skryptu wdrożenia po osiągnięciu stanu terminalu przez wykonanie skryptu wdrożenia. Zasób skryptu wdrażania jest usuwany po wygaśnięciu tego czasu trwania. Czas trwania jest oparty na wzorcu ISO 8601. Interwał przechowywania wynosi od 1 godziny (PT1H) do 26 godzin (PT26H). Ta właściwość jest używana, gdy cleanupPreference jest ustawiona na OnExpiration. Aby dowiedzieć się więcej, zobacz Czyszczenie zasobów skryptów wdrażania w dalszej części tego artykułu.

Więcej przykładów

  • Przykład 1. Tworzenie magazynu kluczy i używanie skryptu wdrażania w celu przypisania certyfikatu do magazynu kluczy.
  • Przykład 2. Tworzenie grupy zasobów na poziomie subskrypcji, tworzenie magazynu kluczy w grupie zasobów, a następnie przypisywanie certyfikatu do magazynu kluczy za pomocą skryptu wdrażania.
  • Przykład 3. Tworzenie tożsamości zarządzanej przypisanej przez użytkownika, przypisywanie roli współautora do tożsamości na poziomie grupy zasobów, tworzenie magazynu kluczy, a następnie przypisywanie certyfikatu do magazynu kluczy za pomocą skryptu wdrażania.
  • Przykład 4: Ręcznie utwórz tożsamość zarządzaną przypisaną przez użytkownika i przypisz jej uprawnienie do tworzenia aplikacji Microsoft Entra przy użyciu interfejsu API programu Microsoft Graph. W pliku Bicep użyj skryptu wdrażania, aby utworzyć aplikację i jednostkę usługi Firmy Microsoft Entra oraz wyświetlić identyfikatory obiektów i identyfikatory klienta.

Wbudowany i zewnętrzny plik

Skrypt wdrożenia może znajdować się w pliku Bicep lub przechowywać go zewnętrznie jako oddzielny plik.

Korzystanie ze skryptu wbudowanego

Poniższy plik Bicep pokazuje, jak używać skryptu wbudowanego.

param name string = 'John Dole'
param location string = resourceGroup().location

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'inlineCLI'
  location: location
  kind: 'AzureCLI'
  properties: {
    azCliVersion: '2.52.0'
    arguments: name
    scriptContent: 'set -e; output="Hello $1"; echo $output'
    retentionInterval: 'P1D'
  }
}

Dołącz set -e do skryptu, aby włączyć natychmiastowe zakończenie, jeśli polecenie zwraca stan niezerowy. Ta praktyka usprawnia procesy debugowania błędów.

Ładowanie pliku skryptu

Użyj funkcji loadTextContent, aby pobrać plik skryptu jako ciąg. Ta funkcja umożliwia obsługę skryptu w pliku zewnętrznym i uzyskiwanie do niego dostępu jako skryptu wdrażania. Ścieżka określona dla pliku skryptu jest względna względem pliku Bicep.

Możesz wyodrębnić skrypt wbudowany z poprzedniego pliku Bicep do pliku hello.sh , a następnie umieścić plik w podfolderze nazywanym skryptami.

output="Hello $1"
echo $output

Następnie możesz skorygować powyższy plik Bicep, tak jak w poniższym przykładzie:

param name string = 'John Dole'
param location string = resourceGroup().location

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'loadTextContentCLI'
  location: location
  kind: 'AzureCLI'
  properties: {
    azCliVersion: '2.52.0'
    arguments: name
    scriptContent: loadTextContent('./scripts/hello.sh')
    retentionInterval: 'P1D'
  }
}

Używanie skryptów zewnętrznych

Zamiast wbudowanych skryptów można używać zewnętrznych plików skryptów. Obsługiwane są tylko podstawowe skrypty programu PowerShell z rozszerzeniem ps1 . W przypadku skryptów interfejsu wiersza polecenia skrypty podstawowe mogą przenosić dowolne prawidłowe rozszerzenia skryptu powłoki Bash lub w ogóle nie mają rozszerzenia. Aby stosować pliki skryptów zewnętrznych, zamień plik scriptContent na primaryScriptUri.

param name string = 'John Dole'
param location string = resourceGroup().location

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'externalScriptCLI'
  location: location
  kind: 'AzureCLI'
  properties: {
    azCliVersion: '2.52.0'
    primaryScriptUri: 'https://raw.githubusercontent.com/Azure/azure-docs-bicep-samples/main/samples/deployment-script/hello.sh'
    arguments: '-name ${name}'
    retentionInterval: 'P1D'
  }
}

Pliki skryptów zewnętrznych muszą być dostępne. Aby ułatwić zabezpieczanie plików skryptów przechowywanych na kontach usługi Azure Storage, wygeneruj token sygnatury dostępu współdzielonego (SAS) i dołącz go do identyfikatora URI szablonu. Ustaw wygaśnięcie, aby umożliwić wystarczającą ilość czasu na ukończenie wdrożenia. Aby uzyskać więcej informacji, zobacz Deploy a private ARM template with a SAS token (Wdrażanie prywatnego szablonu usługi ARM przy użyciu tokenu SAS).

Odpowiadasz za zapewnienie integralności skryptu, do którego odwołuje się skrypt wdrożenia ( primaryScriptUri lub supportingScriptUris). Odwołanie tylko do zaufanych skryptów.

Korzystanie ze skryptów pomocniczych

Skomplikowane logiki można oddzielić od jednego lub większej liczby plików skryptów pomocniczych. supportingScriptUris Użyj właściwości , aby w razie potrzeby udostępnić tablicę identyfikatorów URI do plików skryptów pomocniczych.

param name string = 'John Dole'
param location string = resourceGroup().location

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'supportingScriptCLI'
  location: location
  kind: 'AzureCLI'
  properties: {
    azCliVersion: '2.52.0'
    arguments: name
    scriptContent: 'output="Hello $1"; echo $output; ./hello.sh "$1"'
    supportingScriptUris: [
      'https://raw.githubusercontent.com/Azure/azure-docs-bicep-samples/master/samples/deployment-script/hello.sh'
    ]
    retentionInterval: 'P1D'
  }
}

Pliki skryptów pomocniczych można wywoływać zarówno z wbudowanych skryptów, jak i plików skryptów podstawowych. Pliki skryptów pomocniczych nie mają ograniczeń dotyczących rozszerzenia pliku.

Pliki pomocnicze są kopiowane do polecenia azscripts/azscriptinput w czasie wykonywania. Użyj ścieżki względnej, aby odwołać się do plików pomocniczych ze skryptów wbudowanych i podstawowych plików skryptów.

Uzyskiwanie dostępu do zasobów platformy Azure

Aby uzyskać dostęp do zasobów platformy identity Azure, należy skonfigurować element . Poniższy plik Bicep pokazuje, jak pobrać listę magazynów kluczy platformy Azure. Konieczne jest również przyznanie tożsamości zarządzania przypisaniem użytkownika w celu uzyskania dostępu do magazynu kluczy.

param identity string
param location string = resourceGroup().location

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'listKvCLI'
  location: location
  kind: 'AzureCLI'
  identity: {
    type: 'UserAssigned'
    userAssignedIdentities: {
      '${identity}': {}
    }
  }
  properties: {
    azCliVersion: '2.52.0'
    scriptContent: 'result=$(az keyvault list); echo $result | jq -c \'{Result: map({id: .id})}\' > $AZ_SCRIPTS_OUTPUT_PATH'
    retentionInterval: 'P1D'
  }
}

output result object = deploymentScript.properties.outputs

Uwaga

Logika ponawiania prób logowania do platformy Azure jest teraz wbudowana w skrypt otoki. Jeśli przyznasz uprawnienia w tym samym pliku Bicep co skrypty wdrażania, usługa skryptu wdrażania ponawia próbę logowania przez 10 minut (z 10-sekundowymi interwałami), dopóki przypisanie roli tożsamości zarządzanej nie zostanie zreplikowane.

Praca z danymi wyjściowymi

Podejście do obsługi danych wyjściowych różni się w zależności od typu używanego skryptu — interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell.

Skrypt wdrażania interfejsu wiersza polecenia platformy Azure używa zmiennej środowiskowej o nazwie AZ_SCRIPTS_OUTPUT_PATH , aby wskazać lokalizację pliku dla danych wyjściowych skryptu. Podczas uruchamiania skryptu wdrażania w pliku Bicep powłoka powłoki Bash automatycznie konfiguruje tę zmienną środowiskową. Jego wstępnie zdefiniowana wartość jest ustawiana jako /mnt/azscripts/azscriptoutput/scriptoutputs.json.

Dane wyjściowe muszą być zgodne z prawidłową strukturą obiektu ciągu JSON. Zawartość pliku powinna być sformatowana jako para klucz/wartość. Na przykład zapisz tablicę ciągów jako { "MyResult": [ "foo", "bar"] }. Przechowywanie tylko wyników tablicy, takich jak [ "foo", "bar" ], jest nieprawidłowe.

param name string = 'John Dole'
param location string = resourceGroup().location

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'outputCLI'
  location: location
  kind: 'AzureCLI'
  properties: {
    azCliVersion: '2.52.0'
    arguments: name
    scriptContent: 'jq -n -c --arg st "Hello ${name}" \'{"text": $st}\' > $AZ_SCRIPTS_OUTPUT_PATH'
    retentionInterval: 'P1D'
  }
}

output text string = deploymentScript.properties.outputs.text

W poprzednim przykładzie użyto języka jq do konstruowania danych wyjściowych. Narzędzie jq jest dostarczane z obrazami kontenerów. Aby uzyskać więcej informacji, zobacz Konfigurowanie środowiska programistycznego.

Używanie zmiennych środowiskowych

Przekazywanie zabezpieczonych ciągów do skryptu wdrożenia

Zmienne środowiskowe (EnvironmentVariable) można ustawić w wystąpieniach kontenera, aby zapewnić dynamiczną konfigurację aplikacji lub skryptu uruchamianego przez kontener. Skrypt wdrażania obsługuje niezabezpieczone i zabezpieczone zmienne środowiskowe w taki sam sposób, jak w przypadku usługi Azure Container Instances. Aby uzyskać więcej informacji, zobacz Ustawianie zmiennych środowiskowych w wystąpieniach kontenera.

Maksymalny dozwolony rozmiar zmiennych środowiskowych to 64 KB.

param location string = resourceGroup().location

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'passEnvVariablesCLI'
  location: location
  kind: 'AzureCLI'
  properties: {
    azCliVersion: '2.52.0'
    environmentVariables: [
      {
        name: 'UserName'
        value: 'jdole'
      }
      {
        name: 'Password'
        secureValue: 'jDolePassword'
      }
    ]
    scriptContent: 'echo "Username is :$Username"; echo "Password is: $Password"'
    retentionInterval: 'P1D'
  }
}

Zmienne środowiskowe zdefiniowane przez system

W poniższej tabeli wymieniono zmienne środowiskowe zdefiniowane przez system:

Zmienna środowiskowa Wartość domyślna (interfejs wiersza polecenia) Wartość domyślna (PowerShell) Zarezerwowana przez system
AZ_SCRIPTS_AZURE_ENVIRONMENT AzureCloud AzureCloud Nie
AZ_SCRIPTS_CLEANUP_PREFERENCE Always Always Nie.
AZ_SCRIPTS_OUTPUT_PATH /mnt/azscripts/azscriptoutput/scriptoutputs.json Nie dotyczy Tak
AZ_SCRIPTS_PATH_INPUT_DIRECTORY /mnt/azscripts/azscriptinput|/mnt/azscripts/azscriptinput Nie dotyczy Tak
AZ_SCRIPTS_PATH_OUTPUT_DIRECTORY /mnt/azscripts/azscriptoutput|/mnt/azscripts/azscriptoutput Nie dotyczy Tak
AZ_SCRIPTS_PATH_USER_SCRIPT_FILE_NAME userscript.sh userscript.ps1 Tak
AZ_SCRIPTS_PATH_PRIMARY_SCRIPT_URI_FILE_NAME primaryscripturi.config primaryscripturi.config Tak
AZ_SCRIPTS_PATH_SUPPORTING_SCRIPT_URI_FILE_NAME supportingscripturi.config supportingscripturi.config Tak
AZ_SCRIPTS_PATH_SCRIPT_OUTPUT_FILE_NAME scriptoutputs.json scriptoutputs.json Tak
AZ_SCRIPTS_PATH_EXECUTION_RESULTS_FILE_NAME executionresult.json executionresult.json Tak
AZ_SCRIPTS_USER_ASSIGNED_IDENTITY Nie dotyczy Nie dotyczy Nie.

Aby zapoznać się z przykładem użycia programu AZ_SCRIPTS_OUTPUT_PATH, zobacz Praca z danymi wyjściowymi we wcześniejszej części tego artykułu.

Aby uzyskać dostęp do zmiennych środowiskowych, użyj następującego kodu.

param location string = resourceGroup().location

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'listEnvVariablesCLI'
  location: location
  kind: 'AzureCLI'
  properties: {
    azCliVersion: '2.52.0'
    scriptContent: 'echo "AZ_SCRIPTS_AZURE_ENVIRONMENT is : $AZ_SCRIPTS_AZURE_ENVIRONMENT",echo "AZ_SCRIPTS_CLEANUP_PREFERENCE	is : $AZ_SCRIPTS_CLEANUP_PREFERENCE",echo "AZ_SCRIPTS_OUTPUT_PATH	is : $AZ_SCRIPTS_OUTPUT_PATH",echo "AZ_SCRIPTS_PATH_INPUT_DIRECTORY is : $AZ_SCRIPTS_PATH_INPUT_DIRECTORY",echo "AZ_SCRIPTS_PATH_OUTPUT_DIRECTORY is : $AZ_SCRIPTS_PATH_OUTPUT_DIRECTORY",echo "AZ_SCRIPTS_PATH_USER_SCRIPT_FILE_NAME is : $AZ_SCRIPTS_PATH_USER_SCRIPT_FILE_NAME",echo "AZ_SCRIPTS_PATH_PRIMARY_SCRIPT_URI_FILE_NAME	is : $AZ_SCRIPTS_PATH_PRIMARY_SCRIPT_URI_FILE_NAME",echo "AZ_SCRIPTS_PATH_SUPPORTING_SCRIPT_URI_FILE_NAME	is : $AZ_SCRIPTS_PATH_SUPPORTING_SCRIPT_URI_FILE_NAME",echo "AZ_SCRIPTS_PATH_SCRIPT_OUTPUT_FILE_NAME	is : $AZ_SCRIPTS_PATH_SCRIPT_OUTPUT_FILE_NAME",echo "AZ_SCRIPTS_PATH_EXECUTION_RESULTS_FILE_NAME	is : $AZ_SCRIPTS_PATH_EXECUTION_RESULTS_FILE_NAME",echo "AZ_SCRIPTS_USER_ASSIGNED_IDENTITY	is : $AZ_SCRIPTS_USER_ASSIGNED_IDENTITY"'
    retentionInterval: 'P1D'
  }
}

Korzystanie z istniejącego konta magazynu

Aby skrypt działał i umożliwiał rozwiązywanie problemów, potrzebne jest konto magazynu i wystąpienie kontenera. Możesz wyznaczyć istniejące konto magazynu lub zezwolić usłudze skryptu na automatyczne utworzenie konta magazynu i wystąpienia kontenera.

Poniżej przedstawiono wymagania dotyczące korzystania z istniejącego konta magazynu:

  • W poniższej tabeli wymieniono obsługiwane typy kont. Kolumna dla warstw odnosi się do wartości parametru -SkuName lub --sku . Kolumna obsługiwanych typów odwołuje się do parametru -Kind or --kind .

    Warstwa Obsługiwany typ
    Premium_LRS FileStorage
    Premium_ZRS FileStorage
    Standard_GRS Storage, StorageV2
    Standard_GZRS StorageV2
    Standard_LRS Storage, StorageV2
    Standard_RAGRS Storage, StorageV2
    Standard_RAGZRS StorageV2
    Standard_ZRS StorageV2

    Te kombinacje obsługują udziały plików. Aby uzyskać więcej informacji, zobacz Tworzenie udziału plików platformy Azure i typy kont magazynu.

  • Reguły zapory dla kont magazynu nie są jeszcze obsługiwane. Aby uzyskać więcej informacji, zobacz Konfigurowanie zapór i sieci wirtualnych usługi Azure Storage.

  • Jednostka wdrożenia musi mieć uprawnienia do zarządzania kontem magazynu, które obejmuje odczytywanie, tworzenie i usuwanie udziałów plików. Aby uzyskać więcej informacji, zobacz Konfigurowanie minimalnych uprawnień.

  • Właściwość allowSharedKeyAccess konta magazynu musi być ustawiona na true. Jedynym sposobem instalacji konta magazynu w usłudze Azure Container Instance (ACI) jest użycie klucza dostępu.

Aby określić istniejące konto magazynu, dodaj następujący kod Bicep do elementu właściwości :Microsoft.Resources/deploymentScripts

param storageAccountName string = 'myStorageAccount'

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  ...
  properties: {
    ...
    storageAccountSettings: {
      storageAccountName: storageAccountName
      storageAccountKey: listKeys(resourceId('Microsoft.Storage/storageAccounts', storageAccountName), '2023-01-01').keys[0].value
    }
  }
}

Aby zapoznać się z kompletnym Microsoft.Resources/deploymentScripts przykładem definicji, zobacz Składnia wcześniej w tym artykule.

Gdy używasz istniejącego konta magazynu, usługa skryptu tworzy udział plików o unikatowej nazwie. Aby dowiedzieć się, jak usługa skryptów czyści udział plików, zobacz Czyszczenie zasobów skryptu wdrożenia w dalszej części tego artykułu.

Konfigurowanie wystąpienia kontenera

Skrypt wdrażania wymaga nowego wystąpienia kontenera platformy Azure. Nie można określić istniejącego wystąpienia kontenera. Można jednak dostosować nazwę grupy kontenera przy użyciu polecenia containerGroupName. Jeśli nie określisz nazwy grupy, zostanie ona wygenerowana automatycznie. Do utworzenia tego wystąpienia kontenera są wymagane dodatkowe konfiguracje. Aby uzyskać więcej informacji, zobacz Konfigurowanie minimalnych uprawnień.

Można również określić subnetId wartości uruchamiania skryptu wdrażania w sieci prywatnej. Aby uzyskać więcej informacji, zobacz Access a private virtual network (Uzyskiwanie dostępu do prywatnej sieci wirtualnej).

param containerGroupName string = 'mycustomaci'
param subnetId string = '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myVnet/subnets/mySubnet'

resource deploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  ...
  properties: {
    ...
    containerSettings: {
      containerGroupName: containerGroupName
      subnetIds: [
        {
          id: subnetId
        }
      ]
    }
  }
}

Uruchamianie skryptu więcej niż raz

Wykonanie skryptu wdrażania jest operacją idempotentną. Jeśli nie ma żadnych zmian we właściwościach deploymentScripts zasobu, w tym skryptu wbudowanego, skrypt nie zostanie uruchomiony podczas ponownego wdrażania pliku Bicep.

Usługa skryptu wdrażania porównuje nazwy zasobów w pliku Bicep z istniejącymi zasobami w tej samej grupie zasobów. Istnieją dwie opcje wielokrotnego uruchamiania tego samego skryptu wdrażania:

  • Zmień nazwę deploymentScripts zasobu. Na przykład użyj funkcji utcNow jako nazwy zasobu lub jako części nazwy zasobu. Funkcji można używać utcNow tylko w wartości domyślnej parametru.

    Zmiana nazwy zasobu powoduje utworzenie nowego deploymentScripts zasobu. Dobrze jest zachować historię wykonywania skryptu.

  • Określ inną wartość we forceUpdateTag właściwości . Na przykład użyj utcNow wartości jako wartości.

Pisanie skryptów wdrażania w celu zapewnienia idempotencji, więc przypadkowe ponowne uruchomienia nie spowodują zmian systemowych. Na przykład podczas tworzenia zasobu platformy Azure za pomocą skryptu wdrażania zweryfikuj jego brak przed utworzeniem, aby upewnić się, że skrypt zakończy się powodzeniem lub uniknąć nadmiarowego tworzenia zasobów.

Używanie programu Microsoft Graph w skrycie wdrażania

Skrypt wdrażania może używać programu Microsoft Graph do tworzenia obiektów i pracy z obiektami w identyfikatorze Entra firmy Microsoft.

Polecenia

Korzystając ze skryptów wdrażania interfejsu wiersza polecenia platformy Azure, możesz użyć poleceń w az ad grupie poleceń do pracy z aplikacjami, jednostkami usługi, grupami i użytkownikami. Interfejsy API programu Microsoft Graph można również wywoływać bezpośrednio za pomocą az rest polecenia .

Jeśli używasz skryptów wdrażania programu Azure PowerShell, możesz użyć Invoke-RestMethod polecenia cmdlet , aby bezpośrednio wywołać interfejsy API programu Microsoft Graph.

Uprawnienia

Tożsamość używana przez skrypt wdrażania musi być autoryzowana do pracy z interfejsem API programu Microsoft Graph z odpowiednimi uprawnieniami dla wykonywanych operacji. Musisz autoryzować tożsamość spoza pliku Bicep, na przykład przez wstępnie utworzenie tożsamości zarządzanej przypisanej przez użytkownika i przypisanie jej roli aplikacji dla programu Microsoft Graph. Aby uzyskać więcej informacji, zobacz ten przykład z przewodnika Szybki start.

Czyszczenie zasobów skryptu wdrażania

Te dwa automatycznie utworzone zasoby pomocnicze nigdy nie przeżyją zasobu, chyba że błędy je usuną deploymentScript . Właściwość cleanupPreference kontroluje cykl życia zasobów pomocniczych. Właściwość retentionInterval kontroluje cykl deploymentScript życia zasobu. Oto jak używać tych właściwości:

  • cleanupPreference: określ preferencję czyszczenia dwóch zasobów pomocniczych, gdy wykonanie skryptu zostanie w stanie terminalu. Obsługiwane wartości to:

    • Always: Usuń dwa zasoby pomocnicze po wykonaniu skryptu jest w stanie terminalu. Jeśli używasz istniejącego konta magazynu, usługa skryptu usunie udział plików utworzony przez usługę. deploymentScripts Ponieważ zasób może być nadal obecny po wyczyszczeniu zasobów pomocniczych, usługa skryptu utrwala wyniki wykonywania skryptu (na przykład stdout), dane wyjściowe i wartość zwracaną przed usunięciem zasobów.

    • OnSuccess: Usuń dwa zasoby pomocnicze tylko wtedy, gdy wykonanie skryptu zakończy się pomyślnie. Jeśli używasz istniejącego konta magazynu, usługa skryptu usunie udział plików tylko wtedy, gdy wykonanie skryptu zakończy się pomyślnie.

      Jeśli wykonanie skryptu nie powiedzie się, usługa skryptu czeka, aż retentionInterval wartość wygaśnie, zanim wyczyści zasoby pomocnicze, a następnie zasób skryptu wdrażania.

    • OnExpiration: Usuń dwa zasoby pomocnicze tylko wtedy, gdy retentionInterval ustawienie wygasło. Jeśli używasz istniejącego konta magazynu, usługa skryptu usunie udział plików, ale zachowa konto magazynu.

    Wystąpienie kontenera i konto magazynu są usuwane zgodnie z wartością cleanupPreference . Jeśli jednak skrypt zakończy się niepowodzeniem i cleanupPreference nie zostanie ustawiony na Alwayswartość , proces wdrażania automatycznie przechowuje kontener uruchomiony przez jedną godzinę lub do momentu wyczyszczenia kontenera. Aby rozwiązać problemy ze skryptem, możesz użyć czasu.

    Jeśli chcesz zachować działanie kontenera po pomyślnych wdrożeniach, dodaj krok uśpienia do skryptu. Na przykład dodaj pozycję Start-Sleep na końcu skryptu. Jeśli nie dodasz kroku uśpienia, kontener zostanie ustawiony na stan terminalu i nie będzie można uzyskać do niego dostępu, nawet jeśli jeszcze go nie usunięto.

  • retentionInterval: określ interwał czasu, który zostanie zachowany przed wygaśnięciem i usunięciem deploymentScript zasobu.

Uwaga

Nie zalecamy używania konta magazynu i wystąpienia kontenera generowanego przez usługę skryptu do innych celów. Te dwa zasoby mogą zostać usunięte w zależności od cyklu życia skryptu.

Następne kroki

W tym artykule przedstawiono sposób tworzenia zasobów skryptu wdrażania. Dodatkowe informacje: