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 wersji2020-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. Wersja2019-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 przedConnect-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 lubAzurePowerShell
AzureCLI
. Opróczkind
parametruazPowerShellVersion
należy określić właściwość orazCliVersion
.storageAccountSettings
: określ ustawienia, które mają być używane na istniejącym koncie magazynu. JeślistorageAccountName
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 konfigurowaniusubnetIds
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 poleceniaprimaryScriptUri
.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 elemeciescriptContent
lubprimaryScriptUri
. 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ść toP1D
.forceUpdateTag
: zmiana tej wartości między wdrożeniami plików Bicep wymusza ponowne uruchomienie skryptu wdrożenia. Jeśli używasznewGuid()
funkcji lubutcNow()
, 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 jestAlways
, który wywołuje usunięcie zasobów pomocniczych niezależnie od stanu terminalu (Succeeded
,Failed
lubCanceled
). 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, gdycleanupPreference
jest ustawiona naOnExpiration
. 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 natrue
. 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żyjutcNow
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ładstdout
), 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, gdyretentionInterval
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 icleanupPreference
nie zostanie ustawiony naAlways
wartość , 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ęciemdeploymentScript
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: