Een implementatiescript ontwikkelen in Bicep
Dit artikel bevat voorbeelden om u te laten zien hoe u een implementatiescript ontwikkelt in Bicep.
Resources voor implementatiescripts hebben mogelijk een implementatieduur. Voor een efficiënte ontwikkeling en het testen van deze scripts kunt u overwegen een toegewezen ontwikkelomgeving te maken, zoals een Azure-containerinstantie (ACI) of een Docker-exemplaar. Zie Een ontwikkelomgeving maken voor meer informatie.
Syntaxis
Het volgende Bicep-bestand is een voorbeeld van een implementatiescriptresource. Zie het meest recente schema voor implementatiescripts voor meer informatie.
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'
}
}
Geef in uw implementatiescript deze eigenschapswaarden op:
tags
: Geef scripttags voor implementatie op. Als de implementatiescriptservice de twee ondersteunende resources (een opslagaccount en een containerinstantie) maakt, worden de tags doorgegeven aan beide resources. U kunt de tags gebruiken om de resources te identificeren. Een andere manier om deze ondersteunende resources te identificeren, is via hun achtervoegsels, die azscripts bevatten. Zie Implementatiescripts bewaken en problemen oplossen voor meer informatie.identity
: Voor implementatiescript-API-versie2020-10-01
of hoger is een door de gebruiker toegewezen beheerde identiteit optioneel, tenzij u Azure-specifieke acties in het script moet uitvoeren of als u het implementatiescript uitvoert in een privénetwerk. API-versie2019-10-01-preview
vereist een beheerde identiteit omdat de implementatiescriptservice deze gebruikt om de scripts uit te voeren.Wanneer u de
identity
eigenschap opgeeft, roeptConnect-AzAccount -Identity
de scriptservice aan voordat u het gebruikersscript aanroept. Op dit moment wordt alleen een door de gebruiker toegewezen beheerde identiteit ondersteund. Als u zich wilt aanmelden met een andere identiteit in het implementatiescript, kunt u Connect-AzAccount aanroepen. Zie De minimale machtigingen configureren voor meer informatie.kind
: Geef het type script op, ofAzurePowerShell
AzureCLI
. Daarnaastkind
moet u deazPowerShellVersion
ofazCliVersion
eigenschap opgeven.storageAccountSettings
: Geef de instellingen op voor het gebruik van een bestaand opslagaccount. AlsstorageAccountName
dit niet is opgegeven, wordt automatisch een opslagaccount gemaakt. Zie Een bestaand opslagaccount gebruiken voor meer informatie.containerSettings
: Pas de naam van de Azure-containerinstantie aan. Zie Een containerinstantie configureren verderop in dit artikel voor meer informatie over het configureren van de groepsnaam van de container. Zie Access a private virtual network voor informatie over het configurerensubnetIds
van het implementatiescript in een particulier netwerk.environmentVariables
: Geef de omgevingsvariabelen op die moeten worden doorgegeven aan het script.azPowerShellVersion
/azCliVersion
: Geef de moduleversie op die moet worden gebruikt.Bekijk een lijst met ondersteunde Azure CLI-versies.
Belangrijk
Het implementatiescript maakt gebruik van de beschikbare CLI-installatiekopieën uit Microsoft-artefactregister. Het duurt doorgaans ongeveer één maand om een CLI-installatiekopieën voor een implementatiescript te certificeren. Gebruik geen CLI-versies die in de afgelopen 30 dagen zijn uitgebracht. Raadpleeg de releaseopmerkingen van Azure CLI om de releasedatums voor de installatiekopieën te vinden. Als u een niet-ondersteunde versie gebruikt, worden in het foutbericht de ondersteunde versies vermeld.
arguments
: Geef de parameterwaarden op. De waarden worden gescheiden door een spatie.Het implementatiescript splitst de argumenten in een matrix met tekenreeksen door de aanroep van het CommandLineToArgvW-systeem aan te roepen. Deze stap is nodig omdat de argumenten worden doorgegeven als een opdrachteigenschap aan Azure Container Instances en de opdrachteigenschap een matrix met tekenreeksen is.
Als de argumenten escape-tekens bevatten, moet u de tekens dubbel escapen. In de vorige bicep-syntaxis van het vorige voorbeeld is
-name \"John Dole\"
het argument bijvoorbeeld . De escape-tekenreeks is-name \\"John Dole\\"
.Als u een Bicep-parameter van het type
object
als argument wilt doorgeven, converteert u het object naar een tekenreeks met behulp van de functie string() en gebruikt u vervolgens de functie replace() om aanhalingstekens ("
) te vervangen door dubbele escaped aanhalingstekens (\\"
). Voorbeeld:replace(string(parameters('tables')), '"', '\\"')
Zie het Bicep-voorbeeldbestand voor meer informatie.
scriptContent
: Geef de scriptinhoud op. Het kan een inlinescript of een extern scriptbestand zijn dat u hebt geïmporteerd met behulp van de functie loadTextContent . Zie Inline versus extern bestand verderop in dit artikel voor meer informatie. Als u een extern script wilt uitvoeren, gebruiktprimaryScriptUri
u in plaats daarvan.primaryScriptUri
: Geef een openbaar toegankelijke URL op naar het primaire implementatiescript met ondersteunde bestandsextensies. Zie Externe scripts verderop in dit artikel gebruiken voor meer informatie.supportingScriptUris
: Geef een matrix van openbaar toegankelijke URL's op voor ondersteunende bestanden die worden aangeroepen in ofscriptContent
primaryScriptUri
. Zie Inline versus extern bestand verderop in dit artikel voor meer informatie.timeout
: Geef de maximale toegestane tijd op voor het uitvoeren van scripts, in ISO 8601-indeling. De standaardwaarde isP1D
.forceUpdateTag
: Als u deze waarde wijzigt tussen bicep-bestandsimplementaties, wordt het implementatiescript opnieuw uitgevoerd. Als u denewGuid()
ofutcNow()
functie gebruikt, kunt u deze alleen gebruiken in de standaardwaarde voor een parameter. Zie Een script meer dan één keer uitvoeren verderop in dit artikel voor meer informatie.cleanupPreference
. Geef de voorkeur op voor het opschonen van de twee ondersteunende implementatieresources (het opslagaccount en de containerinstantie) wanneer de uitvoering van het script in een terminalstatus terechtkomt. De standaardinstelling isAlways
, die het verwijderen van ondersteunende resources aanroept, ongeacht de terminalstatus (Succeeded
,Failed
ofCanceled
). Zie Resources voor implementatiescripts opschonen verderop in dit artikel voor meer informatie.retentionInterval
: Geef het interval op waarvoor de service de implementatiescriptresource behoudt nadat de uitvoering van het implementatiescript een terminalstatus heeft bereikt. De implementatiescriptresource wordt verwijderd wanneer deze duur verloopt. De duur is gebaseerd op het ISO 8601-patroon. Het bewaarinterval ligt tussen 1 uur (PT1H
) en 26 uur (PT26H
). U gebruikt deze eigenschap wanneercleanupPreference
deze is ingesteld opOnExpiration
. Zie Resources voor implementatiescripts opschonen verderop in dit artikel voor meer informatie.
Meer voorbeelden
- Voorbeeld 1: Een sleutelkluis maken en een implementatiescript gebruiken om een certificaat toe te wijzen aan de sleutelkluis.
- Voorbeeld 2: Maak een resourcegroep op abonnementsniveau, maak een sleutelkluis in de resourcegroep en gebruik vervolgens een implementatiescript om een certificaat toe te wijzen aan de sleutelkluis.
- Voorbeeld 3: Maak een door de gebruiker toegewezen beheerde identiteit, wijs de rol inzender toe aan de identiteit op het niveau van de resourcegroep, maak een sleutelkluis en gebruik vervolgens een implementatiescript om een certificaat toe te wijzen aan de sleutelkluis.
- Voorbeeld 4: Maak handmatig een door de gebruiker toegewezen beheerde identiteit en wijs deze machtiging toe om de Microsoft Graph API te gebruiken om Microsoft Entra-toepassingen te maken. Gebruik in het Bicep-bestand een implementatiescript om een Microsoft Entra-toepassing en service-principal te maken en om de object-id's en client-id uit te voeren.
Inline versus extern bestand
Een implementatiescript kan zich in een Bicep-bestand bevinden of u kunt het extern opslaan als een afzonderlijk bestand.
Een inlinescript gebruiken
In het volgende Bicep-bestand ziet u hoe u een inlinescript gebruikt.
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'
}
}
Neem set -e
op in uw script om direct afsluiten in te schakelen als een opdracht een niet-nulstatus retourneert. Deze procedure stroomlijnt foutopsporingsprocessen.
Een scriptbestand laden
Gebruik de functie loadTextContent om een scriptbestand op te halen als een tekenreeks. Met deze functie kunt u het script in een extern bestand onderhouden en openen als een implementatiescript. Het pad dat is opgegeven voor het scriptbestand, is relatief ten opzichte van het Bicep-bestand.
U kunt het inlinescript uit het voorgaande Bicep-bestand uitpakken in een hello.sh-bestand en het bestand vervolgens in een submap met de naam scripts plaatsen.
output="Hello $1"
echo $output
Vervolgens kunt u het voorgaande Bicep-bestand aanpassen, zoals in het volgende voorbeeld:
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'
}
}
Externe scripts gebruiken
U kunt externe scriptbestanden gebruiken in plaats van inlinescripts. Alleen primaire PowerShell-scripts met de extensie .ps1 worden ondersteund. Voor CLI-scripts kunnen primaire scripts alle geldige Bash-scriptextensies bevatten of helemaal geen extensie hebben. Als u externe scriptbestanden wilt gebruiken, wisselt u met scriptContent
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 externe scriptbestanden moeten toegankelijk zijn. U kunt uw scriptbestanden die zijn opgeslagen in Azure-opslagaccounts beveiligen door een SAS-token (Shared Access Signature) te genereren en op te nemen in de URI voor de sjabloon. Stel de vervaldatum in om voldoende tijd te geven om de implementatie te voltooien. Zie Een persoonlijke ARM-sjabloon implementeren met een SAS-token voor meer informatie.
U bent verantwoordelijk voor de integriteit van het script waarnaar het implementatiescript verwijst (of primaryScriptUri
supportingScriptUris
). Verwijs alleen naar scripts die u vertrouwt.
Ondersteunende scripts gebruiken
U kunt ingewikkelde logica scheiden in een of meer ondersteunende scriptbestanden. Gebruik de supportingScriptUris
eigenschap om zo nodig een matrix met URI's op te geven voor de ondersteunende scriptbestanden.
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'
}
}
U kunt ondersteunende scriptbestanden aanroepen vanuit zowel inlinescripts als primaire scriptbestanden. Ondersteunende scriptbestanden hebben geen beperkingen voor de bestandsextensie.
De ondersteunende bestanden worden tijdens runtime gekopieerd naar azscripts/azscriptinput . Gebruik een relatief pad om te verwijzen naar de ondersteunende bestanden van inlinescripts en primaire scriptbestanden.
Toegang tot Azure-resources
Voor toegang tot Azure-resources moet u het identity
element configureren. Het volgende Bicep-bestand laat zien hoe u een lijst met Azure-sleutelkluizen ophaalt. Het verlenen van de machtiging voor het beheer van gebruikerstoewijzingen voor toegang tot de sleutelkluis is ook nodig.
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
Notitie
Aanmeldingslogica voor Azure is nu ingebouwd in het wrapper-script. Als u machtigingen verleent in hetzelfde Bicep-bestand als uw implementatiescripts, probeert de implementatiescriptservice zich tien minuten (met intervallen van tien seconden) opnieuw aan te melden totdat de roltoewijzing van de beheerde identiteit wordt gerepliceerd.
Werken met uitvoer
De aanpak voor het verwerken van uitvoer varieert op basis van het type script dat u gebruikt: de Azure CLI of Azure PowerShell.
Het Azure CLI-implementatiescript maakt gebruik van een omgevingsvariabele met de naam AZ_SCRIPTS_OUTPUT_PATH
om de locatie van het bestand voor scriptuitvoer aan te geven. Wanneer u een implementatiescript uitvoert in een Bicep-bestand, configureert de Bash-shell deze omgevingsvariabele automatisch voor u. De vooraf gedefinieerde waarde wordt ingesteld als /mnt/azscripts/azscriptoutput/scriptoutputs.json
.
De uitvoer moet voldoen aan een geldige JSON-tekenreeksobjectstructuur. De inhoud van het bestand moet worden opgemaakt als sleutel-waardepaar. Sla bijvoorbeeld een matrix met tekenreeksen op als { "MyResult": [ "foo", "bar"] }
. Het opslaan van alleen de matrixresultaten, zoals [ "foo", "bar" ]
, is ongeldig.
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
In het voorgaande voorbeeld wordt jq gebruikt voor het maken van uitvoer. Het hulpprogramma jq wordt geleverd met de containerinstallatiekopieën. Zie Een ontwikkelomgeving configureren voor meer informatie.
Omgevingsvariabelen gebruiken
Beveiligde tekenreeksen doorgeven aan een implementatiescript
U kunt omgevingsvariabelen (EnvironmentVariable
) instellen in uw containerinstanties om dynamische configuratie te bieden van de toepassing of het script dat door de container wordt uitgevoerd. Een implementatiescript verwerkt niet-beveiligde en beveiligde omgevingsvariabelen op dezelfde manier als Azure Container Instances. Zie Omgevingsvariabelen instellen in containerinstanties voor meer informatie.
De maximale toegestane grootte voor omgevingsvariabelen is 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'
}
}
Door het systeem gedefinieerde omgevingsvariabelen
De volgende tabel bevat de door het systeem gedefinieerde omgevingsvariabelen:
Omgevingsvariabele | Standaardwaarde (CLI) | Standaardwaarde (PowerShell) | Systeem gereserveerd |
---|---|---|---|
AZ_SCRIPTS_AZURE_ENVIRONMENT |
AzureCloud |
AzureCloud |
Nee |
AZ_SCRIPTS_CLEANUP_PREFERENCE |
Always |
Always |
Nr. |
AZ_SCRIPTS_OUTPUT_PATH |
/mnt/azscripts/azscriptoutput/scriptoutputs.json |
Niet van toepassing | Ja |
AZ_SCRIPTS_PATH_INPUT_DIRECTORY |
/mnt/azscripts/azscriptinput|/mnt/azscripts/azscriptinput |
Niet van toepassing | Ja |
AZ_SCRIPTS_PATH_OUTPUT_DIRECTORY |
/mnt/azscripts/azscriptoutput|/mnt/azscripts/azscriptoutput |
Niet van toepassing | 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 |
Niet van toepassing | Niet van toepassing | Nee |
Zie Werken met uitvoer eerder in dit artikel voor een voorbeeld van het gebruikAZ_SCRIPTS_OUTPUT_PATH
.
Gebruik de volgende code om toegang te krijgen tot de omgevingsvariabelen.
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'
}
}
Een bestaand opslagaccount gebruiken
U hebt een opslagaccount en een containerinstantie nodig om het script uit te voeren en problemen op te lossen. U kunt een bestaand opslagaccount aanwijzen of de scriptservice zowel het opslagaccount als het containerexemplaren automatisch laten maken.
Dit zijn de vereisten voor het gebruik van een bestaand opslagaccount:
De volgende tabel bevat de ondersteunde accounttypen. De kolom voor lagen verwijst naar de waarde van de
-SkuName
of--sku
parameter. De kolom voor ondersteunde typen verwijst naar de-Kind
of--kind
parameter.Laag Ondersteund type 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
Deze combinaties ondersteunen bestandsshares. Zie Een Azure-bestandsshare en typen opslagaccounts maken voor meer informatie.
Firewallregels voor opslagaccounts worden nog niet ondersteund. Raadpleeg Firewalls en virtuele netwerken voor Azure Storage configureren voor meer informatie.
De implementatie-principal moet machtigingen hebben voor het beheren van het opslagaccount, waaronder het lezen, maken en verwijderen van bestandsshares. Zie De minimale machtigingen configureren voor meer informatie.
De
allowSharedKeyAccess
eigenschap van het opslagaccount moet worden ingesteld optrue
. De enige manier om een opslagaccount te koppelen in Azure Container Instance (ACI) is via een toegangssleutel.
Als u een bestaand opslagaccount wilt opgeven, voegt u de volgende Bicep-code toe aan het eigenschapselement van 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
}
}
}
Zie Syntaxis eerder in dit artikel voor een volledig Microsoft.Resources/deploymentScripts
definitievoorbeeld.
Wanneer u een bestaand opslagaccount gebruikt, maakt de scriptservice een bestandsshare met een unieke naam. Zie Resources voor implementatiescripts verderop in dit artikel voor meer informatie over hoe de scriptservice de bestandsshare opschoont.
Een containerinstantie configureren
Voor een implementatiescript is een nieuwe Azure-containerinstantie vereist. U kunt geen bestaande containerinstantie opgeven. U kunt de groepsnaam van de container echter aanpassen met behulp van containerGroupName
. Als u geen groepsnaam opgeeft, wordt deze automatisch gegenereerd. Er zijn aanvullende configuraties vereist voor het maken van dit containerexemplaren. Zie De minimale machtigingen configureren voor meer informatie.
U kunt ook waarden opgeven subnetId
voor het uitvoeren van het implementatiescript in een particulier netwerk. Zie Access a private virtual network (Toegang tot een virtueel particulier netwerk) voor meer informatie.
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
}
]
}
}
}
Een script meer dan één keer uitvoeren
De uitvoering van het implementatiescript is een idempotente bewerking. Als er geen wijzigingen zijn in een van de deploymentScripts
resource-eigenschappen, inclusief het inlinescript, wordt het script niet uitgevoerd wanneer u het Bicep-bestand opnieuw implementeert.
De implementatiescriptservice vergelijkt de resourcenamen in het Bicep-bestand met de bestaande resources in dezelfde resourcegroep. Er zijn twee opties als u hetzelfde implementatiescript meerdere keren wilt uitvoeren:
Wijzig de naam van uw
deploymentScripts
resource. Gebruik bijvoorbeeld de functie utcNow als de resourcenaam of als onderdeel van de resourcenaam. U kunt deutcNow
functie alleen gebruiken in de standaardwaarde voor een parameter.Als u de resourcenaam wijzigt, wordt er een nieuwe
deploymentScripts
resource gemaakt. Het is goed om een geschiedenis van het uitvoeren van scripts bij te houden.Geef een andere waarde op in de
forceUpdateTag
eigenschap. Gebruik bijvoorbeeldutcNow
als waarde.
Schrijf implementatiescripts om idempotentie te garanderen, dus onbedoeld opnieuw uitvoeren leidt niet tot systeemwijzigingen. Wanneer u bijvoorbeeld een Azure-resource maakt via het implementatiescript, valideert u de afwezigheid voordat u het maakt om ervoor te zorgen dat het script slaagt of het maken van redundante resources voorkomt.
Microsoft Graph gebruiken binnen een implementatiescript
Een implementatiescript kan Microsoft Graph gebruiken om objecten in Microsoft Entra-id te maken en ermee te werken.
Opdracht
Wanneer u Azure CLI-implementatiescripts gebruikt, kunt u opdrachten in de az ad
opdrachtgroep gebruiken om te werken met toepassingen, service-principals, groepen en gebruikers. U kunt ook rechtstreeks Microsoft Graph API's aanroepen met behulp van de az rest
opdracht.
Wanneer u Azure PowerShell-implementatiescripts gebruikt, kunt u de Invoke-RestMethod
cmdlet gebruiken om de Microsoft Graph-API's rechtstreeks aan te roepen.
Machtigingen
De identiteit die door uw implementatiescript wordt gebruikt, moet worden geautoriseerd om te werken met de Microsoft Graph API, met de juiste machtigingen voor de bewerkingen die worden uitgevoerd. U moet de identiteit buiten uw Bicep-bestand autoriseren, bijvoorbeeld door een door de gebruiker toegewezen beheerde identiteit vooraf te maken en deze toe te wijzen aan een app-rol voor Microsoft Graph. Zie dit snelstartvoorbeeld voor meer informatie.
Resources voor implementatiescripts opschonen
De twee automatisch gemaakte ondersteunende resources kunnen de deploymentScript
resource nooit overleven, tenzij ze door fouten worden verwijderd. De cleanupPreference
eigenschap bepaalt de levenscyclus van de ondersteunende resources. De retentionInterval
eigenschap bepaalt de levenscyclus van de deploymentScript
resource. U kunt deze eigenschappen als volgt gebruiken:
cleanupPreference
: Geef de opschoningsvoorkeur op van de twee ondersteunende resources wanneer de scriptuitvoering een terminalstatus krijgt. De ondersteunde waarden zijn:Always
: Verwijder de twee ondersteunende resources nadat de uitvoering van het script een terminalstatus heeft. Als u een bestaand opslagaccount gebruikt, verwijdert de scriptservice de bestandsshare die door de service is gemaakt. Omdat dedeploymentScripts
resource nog steeds aanwezig is nadat de ondersteunende resources zijn opgeschoond, blijft de scriptservice de resultaten van de uitvoering van het script behouden (bijvoorbeeldstdout
), uitvoer en retourwaarde voordat de resources worden verwijderd.OnSuccess
: Verwijder de twee ondersteunende resources alleen wanneer de uitvoering van het script is geslaagd. Als u een bestaand opslagaccount gebruikt, verwijdert de scriptservice de bestandsshare alleen wanneer de uitvoering van het script is geslaagd.Als de uitvoering van het script niet lukt, wacht de scriptservice totdat de
retentionInterval
waarde verloopt voordat de ondersteunende resources worden opgeschoond en vervolgens de implementatiescriptresource.OnExpiration
: Verwijder de twee ondersteunende resources alleen wanneer deretentionInterval
instelling is verlopen. Als u een bestaand opslagaccount gebruikt, verwijdert de scriptservice de bestandsshare, maar behoudt het opslagaccount.
Het containerexemplaren en het opslagaccount worden verwijderd op basis van de
cleanupPreference
waarde. Als het script echter mislukt encleanupPreference
niet is ingesteldAlways
op, wordt de container automatisch gedurende één uur uitgevoerd door het implementatieproces of totdat de container is opgeschoond. U kunt de tijd gebruiken om problemen met het script op te lossen.Als u de container na geslaagde implementaties actief wilt houden, voegt u een slaapstandstap toe aan uw script. Voeg bijvoorbeeld Start-Sleep toe aan het einde van uw script. Als u de slaapstandstap niet toevoegt, wordt de container ingesteld op een terminalstatus en kan deze niet worden geopend, zelfs niet als u deze nog niet hebt verwijderd.
retentionInterval
: Geef het tijdsinterval op dat eendeploymentScript
resource wordt bewaard voordat deze is verlopen en verwijderd.
Notitie
We raden u niet aan het opslagaccount en het containerexemplaren te gebruiken dat de scriptservice voor andere doeleinden genereert. De twee resources kunnen worden verwijderd, afhankelijk van de levenscyclus van het script.
Volgende stappen
In dit artikel hebt u geleerd hoe u resources voor implementatiescripts maakt. Zie voor meer informatie: