Dela via


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-version 2020-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-versionen 2019-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 anropar Connect-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, antingen AzurePowerShell eller AzureCLI. Förutom kindmåste du ange azPowerShellVersion egenskapen eller azCliVersion .

  • storageAccountSettings: Ange inställningarna för att använda ett befintligt lagringskonto. Om storageAccountName 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 konfigurerar subnetIds 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 du primaryScriptUri 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 antingen scriptContent eller primaryScriptUri. 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 är P1D.

  • forceUpdateTag: Om du ändrar det här värdet mellan Bicep-fildistributioner tvingar du distributionsskriptet att köras igen. Om du använder newGuid() funktionen eller utcNow() 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 är Always, som kräver borttagning av stödresurser oavsett terminaltillstånd (Succeeded, Failedeller Canceled). 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är cleanupPreference ä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_PATHi 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/deploymentScriptsi :

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 containerGroupNameav . 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ända utcNow 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 exempel utcNow 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 resursen deploymentScripts fortfarande kan finnas kvar när de stödjande resurserna har rensats, bevarar skripttjänsten skriptkörningsresultatet (till exempel stdout), 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ällningen retentionInterval 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 och cleanupPreference inte är inställt på Alwayshå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 en deploymentScript 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: