Utveckla ett distributionsskript i Bicep
Den här artikeln innehåller exempel som visar hur du utvecklar ett distributionsskript i Bicep.
Distributionsskriptresurser kan ha en varaktighet för distributionen. För effektiv utveckling och testning av dessa skript bör du överväga att upprätta en dedikerad utvecklingsmiljö, till exempel en Azure-containerinstans (ACI) eller en Docker-instans. Mer information finns i Skapa en utvecklingsmiljö.
Syntax
Följande Bicep-fil är ett exempel på en distributionsskriptresurs. Mer information finns i det senaste distributionsskriptschemat.
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'
}
}
Ange följande egenskapsvärden i distributionsskriptet:
tags
: Ange taggar för distributionsskript. Om distributionsskripttjänsten skapar de två stödresurserna (ett lagringskonto och en containerinstans) skickas taggarna till båda resurserna. Du kan använda taggarna för att identifiera resurserna. Ett annat sätt att identifiera dessa stödresurser är genom deras suffix, som innehåller azscripts. Mer information finns i Övervaka och felsöka distributionsskript.identity
: För distributionsskriptets API-version2020-10-01
eller senare är en användartilldelad hanterad identitet valfri om du inte behöver utföra några Azure-specifika åtgärder i skriptet eller om du kör distributionsskriptet i ett privat nätverk. API-versionen2019-10-01-preview
kräver en hanterad identitet eftersom distributionsskripttjänsten använder den för att köra skripten.När du anger egenskapen
identity
anroparConnect-AzAccount -Identity
skripttjänsten innan du anropar användarskriptet. För närvarande stöds endast en användartilldelad hanterad identitet. Om du vill logga in med en annan identitet i distributionsskriptet kan du anropa Connect-AzAccount. Mer information finns i Konfigurera de minsta behörigheterna.kind
: Ange typ av skript, antingenAzurePowerShell
ellerAzureCLI
. Förutomkind
måste du angeazPowerShellVersion
egenskapen ellerazCliVersion
.storageAccountSettings
: Ange inställningarna för att använda ett befintligt lagringskonto. OmstorageAccountName
inte anges skapas ett lagringskonto automatiskt. Mer information finns i Använda ett befintligt lagringskonto.containerSettings
: Anpassa namnet på Azure-containerinstansen. Information om hur du konfigurerar containerns gruppnamn finns i Konfigurera en containerinstans senare i den här artikeln. Information om hur du konfigurerarsubnetIds
att köra distributionsskriptet i ett privat nätverk finns i Åtkomst till ett privat virtuellt nätverk.environmentVariables
: Ange de miljövariabler som ska skickas till skriptet.azPowerShellVersion
/azCliVersion
: Ange den modulversion som ska användas.Se en lista över Azure CLI-versioner som stöds.
Viktigt!
Distributionsskriptet använder tillgängliga CLI-avbildningar från Microsofts artefaktregister. Det tar vanligtvis ungefär en månad att certifiera en CLI-avbildning för ett distributionsskript. Använd inte CLI-versioner som har släppts under de senaste 30 dagarna. Information om hur du hittar versionsdatum för avbildningarna finns i Viktig information om Azure CLI. Om du använder en version som inte stöds visas de versioner som stöds i felmeddelandet.
arguments
: Ange parametervärdena. Värdena avgränsas med blanksteg.Distributionsskriptet delar upp argumenten i en matris med strängar genom att anropa systemanropet CommandLineToArgvW . Det här steget är nödvändigt eftersom argumenten skickas som en kommandoegenskap till Azure Container Instances och kommandoegenskapen är en matris med strängar.
Om argumenten innehåller undantagna tecken undfly du tecknen. I föregående exempel på Bicep-syntaxen är
-name \"John Dole\"
argumentet till exempel . Den undantagna strängen är-name \\"John Dole\\"
.Om du vill skicka en Bicep-parameter av typen
object
som ett argument konverterar du objektet till en sträng med hjälp av funktionen string() och använder sedan funktionen replace() för att ersätta citattecken ("
) med dubbla citattecken (\\"
). Till exempel:replace(string(parameters('tables')), '"', '\\"')
Mer information finns i Bicep-exempelfilen.
scriptContent
: Ange skriptinnehållet. Det kan vara ett infogat skript eller en extern skriptfil som du har importerat med hjälp av funktionen loadTextContent . Mer information finns i Infogad eller extern fil senare i den här artikeln. Om du vill köra ett externt skript använder duprimaryScriptUri
i stället.primaryScriptUri
: Ange en offentligt tillgänglig URL till det primära distributionsskriptet med filtillägg som stöds. Mer information finns i Använda externa skript senare i den här artikeln.supportingScriptUris
: Ange en matris med offentligt tillgängliga URL:er för stödfiler som anropas i antingenscriptContent
ellerprimaryScriptUri
. Mer information finns i Infogad eller extern fil senare i den här artikeln.timeout
: Ange den maximala tillåtna tiden för skriptkörning i ISO 8601-format. Standardvärdet ärP1D
.forceUpdateTag
: Om du ändrar det här värdet mellan Bicep-fildistributioner tvingar du distributionsskriptet att köras igen. Om du användernewGuid()
funktionen ellerutcNow()
kan du bara använda den i standardvärdet för en parameter. Mer information finns i Köra ett skript mer än en gång senare i den här artikeln.cleanupPreference
. Ange inställningen för att rensa de två stöddistributionsresurserna (lagringskontot och containerinstansen) när skriptkörningen hamnar i ett terminaltillstånd. Standardinställningen ärAlways
, som kräver borttagning av stödresurser oavsett terminaltillstånd (Succeeded
,Failed
ellerCanceled
). Mer information finns i Rensa resurser för distributionsskript senare i den här artikeln.retentionInterval
: Ange det intervall för vilket tjänsten behåller distributionsskriptresursen när körningen av distributionsskriptet når ett terminaltillstånd. Distributionsskriptresursen tas bort när den här varaktigheten upphör att gälla. Varaktigheten baseras på ISO 8601-mönstret. Kvarhållningsintervallet är mellan 1 timme (PT1H
) och 26 timmar (PT26H
). Du använder den här egenskapen närcleanupPreference
är inställd påOnExpiration
. Mer information finns i Rensa resurser för distributionsskript senare i den här artikeln.
Fler exempel
- Exempel 1: Skapa ett nyckelvalv och använd ett distributionsskript för att tilldela ett certifikat till nyckelvalvet.
- Exempel 2: Skapa en resursgrupp på prenumerationsnivå, skapa ett nyckelvalv i resursgruppen och använd sedan ett distributionsskript för att tilldela ett certifikat till nyckelvalvet.
- Exempel 3: Skapa en användartilldelad hanterad identitet, tilldela deltagarrollen till identiteten på resursgruppsnivå, skapa ett nyckelvalv och använd sedan ett distributionsskript för att tilldela ett certifikat till nyckelvalvet.
- Exempel 4: Skapa en användartilldelad hanterad identitet manuellt och tilldela den behörighet att använda Microsoft Graph API för att skapa Microsoft Entra-program. I Bicep-filen använder du ett distributionsskript för att skapa ett Microsoft Entra-program och tjänstens huvudnamn och för att mata ut objekt-ID:t och klient-ID:t.
Infogad eller extern fil
Ett distributionsskript kan finnas i en Bicep-fil, eller så kan du lagra det externt som en separat fil.
Använda ett infogat skript
Följande Bicep-fil visar hur du använder ett infogat skript.
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'
}
}
Inkludera set -e
i skriptet för att aktivera omedelbar utgång om ett kommando returnerar statusen nonzero. Den här metoden effektiviserar felsökningsprocesser för fel.
Läsa in en skriptfil
Använd funktionen loadTextContent för att hämta en skriptfil som en sträng. Med den här funktionen kan du underhålla skriptet i en extern fil och komma åt det som ett distributionsskript. Sökvägen som anges för skriptfilen är relativ till Bicep-filen.
Du kan extrahera det infogade skriptet från föregående Bicep-fil till en hello.sh fil och sedan placera filen i en undermapp som kallas skript.
output="Hello $1"
echo $output
Sedan kan du ändra föregående Bicep-fil som i följande exempel:
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'
}
}
Använda externa skript
Du kan använda externa skriptfiler i stället för infogade skript. Endast primära PowerShell-skript med .ps1-tillägget stöds. För CLI-skript kan primära skript ha giltiga Bash-skripttillägg eller har inget tillägg alls. Om du vill använda externa skriptfiler växlar du ut scriptContent
med 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'
}
}
De externa skriptfilerna måste vara tillgängliga. För att skydda dina skriptfiler som lagras i Azure Storage-konton genererar du en SAS-token (signatur för delad åtkomst) och inkluderar den i URI:n för mallen. Ange förfallodatum för att ge tillräckligt med tid för att slutföra distributionen. Mer information finns i Distribuera en privat ARM-mall med en SAS-token.
Du ansvarar för att säkerställa integriteten för skriptet som distributionsskriptet refererar till (antingen primaryScriptUri
eller supportingScriptUris
). Referera endast till skript som du litar på.
Använda stödskript
Du kan dela in komplicerade logik i en eller flera stödskriptfiler. Använd egenskapen supportingScriptUris
för att tillhandahålla en matris med URI:er till stödskriptfilerna om det behövs.
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'
}
}
Du kan anropa stödskriptfiler från både infogade skript och primära skriptfiler. Stöd för skriptfiler har inga begränsningar för filtillägget.
Stödfilerna kopieras till azscripts/azscriptinput vid körning. Använd en relativ sökväg för att referera till stödfilerna från infogade skript och primära skriptfiler.
Få åtkomst till Azure-resurser
För att få åtkomst till Azure-resurser måste du konfigurera elementet identity
. Följande Bicep-fil visar hur du hämtar en lista över Azure-nyckelvalv. Det är också nödvändigt att ge användartilldelningshanteringsidentiteten behörighet att komma åt nyckelvalvet.
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
Kommentar
Omprövningslogik för Azure-inloggning är nu inbyggd i omslutningsskriptet. Om du beviljar behörigheter i samma Bicep-fil som dina distributionsskript försöker distributionsskripttjänsten logga in igen i 10 minuter (med 10 sekunders intervall) tills den hanterade identitetens rolltilldelning replikeras.
Arbeta med utdata
Hur du hanterar utdata varierar beroende på vilken typ av skript du använder – Azure CLI eller Azure PowerShell.
Azure CLI-distributionsskriptet använder en miljövariabel med namnet AZ_SCRIPTS_OUTPUT_PATH
för att ange platsen för filen för skriptutdata. När du kör ett distributionsskript i en Bicep-fil konfigurerar Bash-gränssnittet automatiskt den här miljövariabeln åt dig. Dess fördefinierade värde anges som /mnt/azscripts/azscriptoutput/scriptoutputs.json
.
Utdata måste överensstämma med en giltig JSON-strängobjektstruktur. Filens innehåll ska formateras som ett nyckel/värde-par. Spara till exempel en matris med strängar som { "MyResult": [ "foo", "bar"] }
. Lagring av endast matrisresultat, till exempel [ "foo", "bar" ]
, är ogiltigt.
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
Föregående exempel använder jq för att konstruera utdata. JQ-verktyget levereras med containeravbildningarna. Mer information finns i Konfigurera en utvecklingsmiljö.
Använda miljövariabler
Skicka skyddade strängar till ett distributionsskript
Du kan ange miljövariabler (EnvironmentVariable
) i dina containerinstanser för att tillhandahålla dynamisk konfiguration av programmet eller skriptet som containern kör. Ett distributionsskript hanterar icke-skyddade miljövariabler på samma sätt som Azure Container Instances. Mer information finns i Ange miljövariabler i containerinstanser.
Den maximala tillåtna storleken för miljövariabler är 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'
}
}
Systemdefinierade miljövariabler
I följande tabell visas de systemdefinierade miljövariablerna:
Miljövariabel | Standardvärde (CLI) | Standardvärde (PowerShell) | Reserverat system |
---|---|---|---|
AZ_SCRIPTS_AZURE_ENVIRONMENT |
AzureCloud |
AzureCloud |
Nej |
AZ_SCRIPTS_CLEANUP_PREFERENCE |
Always |
Always |
Nej |
AZ_SCRIPTS_OUTPUT_PATH |
/mnt/azscripts/azscriptoutput/scriptoutputs.json |
Inte tillämpligt | Ja |
AZ_SCRIPTS_PATH_INPUT_DIRECTORY |
/mnt/azscripts/azscriptinput|/mnt/azscripts/azscriptinput |
Inte aktuellt | Ja |
AZ_SCRIPTS_PATH_OUTPUT_DIRECTORY |
/mnt/azscripts/azscriptoutput|/mnt/azscripts/azscriptoutput |
Inte aktuellt | Ja |
AZ_SCRIPTS_PATH_USER_SCRIPT_FILE_NAME |
userscript.sh |
userscript.ps1 |
Ja |
AZ_SCRIPTS_PATH_PRIMARY_SCRIPT_URI_FILE_NAME |
primaryscripturi.config |
primaryscripturi.config |
Ja |
AZ_SCRIPTS_PATH_SUPPORTING_SCRIPT_URI_FILE_NAME |
supportingscripturi.config |
supportingscripturi.config |
Ja |
AZ_SCRIPTS_PATH_SCRIPT_OUTPUT_FILE_NAME |
scriptoutputs.json |
scriptoutputs.json |
Ja |
AZ_SCRIPTS_PATH_EXECUTION_RESULTS_FILE_NAME |
executionresult.json |
executionresult.json |
Ja |
AZ_SCRIPTS_USER_ASSIGNED_IDENTITY |
Inte aktuellt | Inte aktuellt | Nej |
Ett exempel på hur du använder finns AZ_SCRIPTS_OUTPUT_PATH
i Arbeta med utdata tidigare i den här artikeln.
Använd följande kod för att komma åt miljövariablerna.
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'
}
}
Använda ett befintligt lagringskonto
För att skriptet ska kunna köras och tillåta felsökning behöver du ett lagringskonto och en containerinstans. Du kan antingen ange ett befintligt lagringskonto eller låta skripttjänsten skapa både lagringskontot och containerinstansen automatiskt.
Här följer kraven för att använda ett befintligt lagringskonto:
I följande tabell visas de kontotyper som stöds. Kolumnen för nivåer refererar till värdet för parametern
-SkuName
eller--sku
. Kolumnen för typer som stöds refererar till parametern-Kind
eller--kind
.Nivå Typ som stöds 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
Dessa kombinationer stöder filresurser. Mer information finns i Skapa en Azure-filresurs och typer av lagringskonton.
Brandväggsregler för lagringskonton stöds inte ännu. Mer information finns i Konfigurera Azure Storage-brandväggar och virtuella nätverk.
Distributionsobjektet måste ha behörighet att hantera lagringskontot, vilket omfattar läsning, skapande och borttagning av filresurser. Mer information finns i Konfigurera de minsta behörigheterna.
Egenskapen
allowSharedKeyAccess
för lagringskontot måste vara inställd påtrue
. Det enda sättet att montera ett lagringskonto i Azure Container Instance (ACI) är via en åtkomstnyckel.
Om du vill ange ett befintligt lagringskonto lägger du till följande Bicep-kod i egenskapselementet Microsoft.Resources/deploymentScripts
i :
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
}
}
}
Ett fullständigt Microsoft.Resources/deploymentScripts
definitionsexempel finns i Syntax tidigare i den här artikeln.
När du använder ett befintligt lagringskonto skapar skripttjänsten en filresurs som har ett unikt namn. Mer information om hur skripttjänsten rensar filresursen finns i Rensa distributionsskriptresurser senare i den här artikeln.
Konfigurera en containerinstans
Ett distributionsskript kräver en ny Azure-containerinstans. Du kan inte ange en befintlig containerinstans. Du kan dock anpassa containerns gruppnamn med hjälp containerGroupName
av . Om du inte anger ett gruppnamn genereras det automatiskt. Ytterligare konfigurationer krävs för att skapa den här containerinstansen. Mer information finns i Konfigurera de minsta behörigheterna.
Du kan också ange subnetId
värden för att köra distributionsskriptet i ett privat nätverk. Mer information finns i Åtkomst till ett privat virtuellt nätverk.
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
}
]
}
}
}
Köra ett skript mer än en gång
Körning av distributionsskript är en idempotent åtgärd. Om det inte finns några ändringar i någon av deploymentScripts
resursegenskaperna, inklusive det infogade skriptet, körs inte skriptet när du distribuerar om Bicep-filen.
Distributionsskripttjänsten jämför resursnamnen i Bicep-filen med befintliga resurser i samma resursgrupp. Det finns två alternativ om du vill köra samma distributionsskript flera gånger:
Ändra namnet på resursen
deploymentScripts
. Använd till exempel funktionen utcNow som resursnamn eller som en del av resursnamnet. Du kan bara användautcNow
funktionen i standardvärdet för en parameter.Om du ändrar resursnamnet skapas en ny
deploymentScripts
resurs. Det är bra för att behålla en historik över skriptkörning.Ange ett annat värde i egenskapen
forceUpdateTag
. Använd till exempelutcNow
som värde.
Skriv distributionsskript för att säkerställa idempotens, så oavsiktliga omkörningar resulterar inte i systemändringar. När du till exempel skapar en Azure-resurs via distributionsskriptet verifierar du dess frånvaro innan du skapar den för att säkerställa att skriptet antingen lyckas eller undviker att redundanta resurser skapas.
Använda Microsoft Graph i ett distributionsskript
Ett distributionsskript kan använda Microsoft Graph för att skapa och arbeta med objekt i Microsoft Entra-ID.
Kommandon
När du använder Azure CLI-distributionsskript kan du använda kommandon i az ad
kommandogruppen för att arbeta med program, tjänstens huvudnamn, grupper och användare. Du kan också anropa Microsoft Graph-API:er direkt med hjälp az rest
av kommandot .
När du använder Azure PowerShell-distributionsskript kan du använda cmdleten Invoke-RestMethod
för att direkt anropa Microsoft Graph-API:erna.
Behörigheter
Den identitet som distributionsskriptet använder måste ha behörighet att arbeta med Microsoft Graph-API:et med lämpliga behörigheter för de åtgärder som det utför. Du måste auktorisera identiteten utanför Bicep-filen, till exempel genom att skapa en användartilldelad hanterad identitet och tilldela den en approll för Microsoft Graph. Mer information finns i det här snabbstartsexemplet.
Rensa distributionsskriptresurser
De två automatiskt skapade stödresurserna kan aldrig överleva resursen deploymentScript
, såvida inte felen tar bort dem. Egenskapen cleanupPreference
styr livscykeln för de stödande resurserna. Egenskapen retentionInterval
styr resursens deploymentScript
livscykel. Så här använder du följande egenskaper:
cleanupPreference
: Ange rensningsinställningen för de två stödresurserna när skriptkörningen hamnar i ett terminaltillstånd. De värden som stöds är:Always
: Ta bort de två stödresurserna när skriptkörningen har ett terminaltillstånd. Om du använder ett befintligt lagringskonto tar skripttjänsten bort filresursen som tjänsten skapade. Eftersom resursendeploymentScripts
fortfarande kan finnas kvar när de stödjande resurserna har rensats, bevarar skripttjänsten skriptkörningsresultatet (till exempelstdout
), utdata och returvärde innan resurserna tas bort.OnSuccess
: Ta bara bort de två stödresurserna när skriptkörningen lyckas. Om du använder ett befintligt lagringskonto tar skripttjänsten bara bort filresursen när skriptkörningen lyckas.Om skriptkörningen inte lyckas väntar skripttjänsten tills värdet upphör att
retentionInterval
gälla innan det rensar de resurser som stöds och sedan resursen för distributionsskriptet.OnExpiration
: Ta bara bort de två stödresurserna när inställningenretentionInterval
har upphört att gälla. Om du använder ett befintligt lagringskonto tar skripttjänsten bort filresursen men behåller lagringskontot.
Containerinstansen och lagringskontot tas bort enligt
cleanupPreference
värdet. Men om skriptet misslyckas ochcleanupPreference
inte är inställt påAlways
håller distributionsprocessen automatiskt containern igång i en timme eller tills containern rensas. Du kan använda tiden för att felsöka skriptet.Om du vill att containern ska köras efter lyckade distributioner lägger du till ett vilosteg i skriptet. Du kan till exempel lägga till Start-Sleep i slutet av skriptet. Om du inte lägger till vilolägessteget är containern inställd på ett terminaltillstånd och kan inte nås även om du inte har tagit bort den ännu.
retentionInterval
: Ange tidsintervallet som endeploymentScript
resurs ska behållas innan den har upphört att gälla och tas bort.
Kommentar
Vi rekommenderar inte att du använder lagringskontot och containerinstansen som skripttjänsten genererar för andra ändamål. De två resurserna kan tas bort, beroende på skriptets livscykel.
Nästa steg
I den här artikeln har du lärt dig hur du skapar distributionsskriptresurser. Mer information: