Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten artykuł zawiera przykłady pokazujące, jak opracować skrypt wdrożenia w aplikacji Bicep.
Zasoby skryptu wdrożenia mogą mieć określony czas wdrażania. 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 skrypcie wdrażania określ następujące wartości tych właściwości:
tags: Określ tagi skryptu wdrożenia. Jeśli usługa skryptów wdrożeniowych tworzy dwa zasoby pomocnicze (konto magazynu danych i instancję kontenera), tagi są przekazywane obu zasobom. 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-01interfejsu 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-previewinterfejsu 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
identityusługa skryptów wywołujeConnect-AzAccount -Identityprzed 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:AzurePowerShellalboAzureCLI. Opróczkindnależy określić właściwośćazPowerShellVersionlubazCliVersion.storageAccountSettings: Określ ustawienia potrzebne do użycia istniejącego konta magazynu. Jeśli nie określonostorageAccountName, automatycznie zostanie utworzone konto magazynu. Aby uzyskać więcej informacji, zobacz Użyj istniejącego konta magazynu.containerSettings: Dostosuj nazwę wystąpienia kontenera Azure. Aby uzyskać informacje na temat konfigurowania nazwy grupy kontenerów, zobacz Konfigurowanie wystąpienia kontenera w dalszej części tego artykułu. Aby uzyskać informacje o konfigurowaniusubnetIdsuruchamiania 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 wdrożeniowy korzysta z dostępnych obrazów CLI z usługi Microsoft Artifact Registry. Zwykle certyfikacja obrazu CLI na potrzeby skryptu wdrożeniowego trwa około miesiąca. Nie używaj wersji CLI opublikowanych 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ę łańcuchów znaków, wywołując wywołanie systemowe CommandLineToArgvW. Ten krok jest niezbędny, ponieważ argumenty są przekazywane jako właściwość command w usłudze Azure Container Instances, a właściwość command jest tablicą ciągów.
Jeśli argumenty zawierają znaki ucieczki, zastosuj podwójne znaki ucieczki dla tych znaków. Na przykład w poprzednim przykładzie składni języka Bicep argumentem jest
-name \"John Dole\". Ciąg ucieczki to-name \\"John Dole\\".Aby przekazać parametr Bicep typu
objectjako argument, przekonwertuj obiekt na ciąg znaków przy użyciu funkcji string(), a następnie użyj funkcji replace(), aby zastąpić wszelkie cudzysłowy (") cudzysłowami z podwójnym znakiem ucieczki (\\"). 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 elemeciescriptContentlubprimaryScriptUri. 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żywasz funkcjinewGuid()lubutcNow(), możesz użyć jej tylko jako 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, czy dwa pomocnicze zasoby używane do wdrożenia (konto magazynu i wystąpienie kontenera) mają zostać wyczyszczone, gdy wykonywanie skryptu osiągnie stan końcowy. Ustawieniem domyślnym jestAlways, który wywołuje usunięcie zasobów pomocniczych niezależnie od stanu terminalu (Succeeded,FailedlubCanceled). 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, gdycleanupPreferencejest 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 programu Bicep użyj skryptu wdrożenia, aby utworzyć aplikację Microsoft Entra i nazwę główną usługi oraz wyprowadzić identyfikatory obiektów i identyfikator klienta.
Plik wbudowany a plik zewnętrzny
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 główne skrypty programu PowerShell z rozszerzeniem .ps1. W przypadku skryptów CLI główne skrypty mogą mieć dowolne prawidłowe rozszerzenie skryptu Bash lub nie mieć żadnego 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łuj się tylko do skryptów, którym ufasz.
Korzystanie ze skryptów pomocniczych
Skomplikowane logiki można oddzielić od jednego lub większej liczby plików skryptów pomocniczych. Użyj właściwości supportingScriptUris, aby w razie potrzeby określić tablicę identyfikatorów URI pomocniczych plików skryptów.
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 azscripts/azscriptinput w czasie działania. Użyj ścieżki względnej, aby odwoływać się do plików pomocniczych w skryptach wbudowanych i głównych plikach skryptowych.
Uzyskiwanie dostępu do zasobów platformy Azure
Aby uzyskać dostęp do zasobów platformy Azure, należy skonfigurować element identity. 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 się do platformy Azure jest teraz wbudowana w skrypt opakowujący. 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 skryptu, którego używasz— interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell.
Ważne
Dzienniki skryptów wdrożeń mogą zawierać treści napisane do Write-Host, echo, stdout, oraz stderr. Możesz pobrać te informacje za pośrednictwem punktu końcowego /deploymentScripts/logs lub powiązanych interfejsów API. Nie zapisuj wrażliwych informacji na wyjściu skryptu, w tym tokenów dostępu, tokenów nośników, tokenów SAS, łańcuchów połączeń, danych uwierzytelniających czy innych sekretów. Autorzy skryptów są odpowiedzialni za zapewnienie, że dzienniki skryptów wdrożeń nie ujawniają wrażliwych informacji.
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 wdrożeniowego w pliku Bicep powłoka Bash automatycznie ustawia 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 (CLI) | Wartość domyślna (PowerShell) | Zarezerwowane dla systemu |
|---|---|---|---|
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'
}
}
Użyj istniejącego konta magazynu
Aby uruchomić skrypt i umożliwić rozwiązywanie problemów, potrzebne są konto magazynu danych i instancja kontenera. Możesz albo wskazać istniejące konto magazynu, albo zezwolić usłudze skryptów na automatyczne utworzenie zarówno konta magazynu, jak i instancji 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
-SkuNamelub--sku. Kolumna obsługiwanych typów odwołuje się do parametru-Kindor--kind.Warstwa Obsługiwany typ Premium_LRSFileStoragePremium_ZRSFileStorageStandard_GRSStorage,StorageV2Standard_GZRSStorageV2Standard_LRSStorage,StorageV2Standard_RAGRSStorage,StorageV2Standard_RAGZRSStorageV2Standard_ZRSStorageV2Te kombinacje obsługują udziały plikowe. Aby uzyskać więcej informacji, zobacz Tworzenie udziału plików platformy Azure i Typy kont magazynu.
Reguły zapory dla kont magazynowych nie są jeszcze obsługiwane. Aby uzyskać więcej informacji, zobacz Konfigurowanie zapór i sieci wirtualnych usługi Azure Storage.
Podmiot wdrożeniowy musi mieć uprawnienia do zarządzania kontem magazynu, w tym uprawnienia do odczytywania, tworzenia i usuwania udziałów plikowych. Aby uzyskać więcej informacji, zobacz Konfigurowanie minimalnych uprawnień.
Właściwość
allowSharedKeyAccesskonta magazynu musi mieć wartośćtrue. Jedynym sposobem instalacji konta magazynu w usłudze Azure Container Instance (ACI) jest użycie klucza dostępu.
Ważne
Jeśli przypiszesz zarządzaną tożsamość z uprawnieniami przekraczającymi wymagania operacyjne skryptu, autor skryptu odpowiada za zapewnienie ochrony konta magazynowego przed niezamierzonym dostępem. Gdzie to możliwe, stosuj zasadę najmniejszych przywilejów.
Aby określić istniejące konto magazynu, dodaj do elementu właściwości Microsoft.Resources/deploymentScripts następujący kod Bicep:
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
}
}
}
Pełny przykład definicji Microsoft.Resources/deploymentScripts znajduje się w sekcji Składnia we wcześniejszej części tego artykułu.
Gdy używasz istniejącego konta magazynu, usługa skryptu tworzy udział plików o unikatowej nazwie. Aby dowiedzieć się, jak usługa skryptowa czyści zasób udziału plików, zobacz Czyszczenie zasobów skryptu wdrożenia w dalszej części tego artykułu.
Skonfiguruj wystąpienie 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 tej instancji kontenera wymagana jest dodatkowa konfiguracja. Aby uzyskać więcej informacji, zobacz Konfigurowanie minimalnych uprawnień.
Można również określić wartości subnetId do uruchomienia skryptu wdrożeniowego 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ę
deploymentScriptszasobu. Na przykład użyj funkcji utcNow jako nazwy zasobu lub jako części nazwy zasobu. Można używać funkcjiutcNowtylko jako wartości domyślnej parametru.Zmiana nazwy zasobu powoduje utworzenie nowego
deploymentScriptszasobu. Dobrze jest zachować historię wykonywania skryptu.Określ inną wartość we właściwości
forceUpdateTag. Na przykład użyjutcNowjako wartości.
Twórz skrypty wdrożeniowe tak, aby zapewnić idempotentność, dzięki czemu przypadkowe ponowne uruchomienia nie spowodują zmian w systemie. 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 wdrożeniowych Azure CLI, możesz używać poleceń z grupy poleceń az ad, aby pracować z aplikacjami, nazwami głównymi usług, 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 mogą istnieć dłużej niż zasób deploymentScript, chyba że awarie je usuną. Właściwość cleanupPreference steruje cyklem życia zasobów pomocniczych. Właściwość retentionInterval kontroluje cykl deploymentScript życia zasobu. Oto jak używać tych właściwości:
cleanupPreference: Określa preferencję usuwania dwóch zasobów pomocniczych, gdy wykonywanie skryptu osiągnie stan terminalny. Obsługiwane wartości to:Always: Usuń dwa zasoby pomocnicze po osiągnięciu przez wykonanie skryptu stanu końcowego. Jeśli używasz istniejącego konta magazynu danych, usługa skryptów usuwa udział plików utworzony przez tę usługę.deploymentScriptsPonieważ 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 skryptów czeka do wygaśnięcia wartości
retentionInterval, po czym usuwa zasoby pomocnicze, a następnie zasób skryptu wdrożenia.OnExpiration: Usuń dwa zasoby pomocnicze tylko wtedy, gdyretentionIntervalustawienie wygasło. Jeśli używasz istniejącego konta magazynu danych, usługa skryptów usuwa udział plikowy, ale zachowuje konto magazynu danych.
Wystąpienie kontenera i konto magazynowe są usuwane w zależności od wartości
cleanupPreference. Jeśli jednak skrypt nie powiedzie się icleanupPreferencenie zostanie ustawiony naAlways, proces wdrażania automatycznie pozostawia kontener uruchomiony przez 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ęciemdeploymentScriptzasobu.
Uwaga
Nie zalecamy używania konta magazynu danych i wystąpienia kontenera, które generuje usługa skryptów, 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: