Utiliser des scripts de déploiement dans Bicep
La ressource deploymentScripts vous permet d’exécuter des scripts dans des déploiements Bicep et de passer en revue les résultats d’exécution. Vous pouvez utiliser ces scripts pour effectuer des étapes personnalisées telles que les suivantes :
- Ajouter des utilisateurs à un annuaire ;
- Effectuer des opérations de plan de données (par exemple, copier des objets blob ou alimenter une base de données)
- Rechercher et valider une clé de licence ;
- Créez un certificat auto-signé.
- Créer un objet dans Microsoft Entra ID
- Rechercher des blocs d’adresses IP à partir d’un système personnalisé
Parmi les avantages des scripts de déploiement, citons les suivants :
- Ils sont faciles à coder, à utiliser et à déboguer. Vous pouvez développer des scripts de déploiement dans vos environnements de développement préférés. Les scripts peuvent être incorporés aux fichiers Bicep ou dans des fichiers de script externe.
- Vous pouvez spécifier le langage de script et la plateforme. À l’heure actuelle, les scripts de déploiement Azure PowerShell et Azure CLI dans l’environnement Linux sont pris en charge.
- Vous pouvez autoriser le passage d’arguments de ligne de commande au script.
- Vous pouvez spécifier des sorties de script et les repasser au déploiement.
La ressource de script de déploiement n’est disponible que dans les régions où Azure Container Instances est disponible. Pour plus d’informations, consultez Disponibilité des ressources pour Azure Container Instances dans les régions Azure.
Avertissement
Le service de script de déploiement nécessite deux ressources supplémentaires pour exécuter et dépanner des scripts : un compte de stockage et une instance de conteneur. En général, le service nettoie ces ressources une fois le script de déploiement terminé. Tant qu’elles ne sont pas supprimées, ces ressources engendrent des frais.
Pour plus d’informations sur les prix, consultez Tarification Container Instances et Tarification Stockage Azure. Pour plus d’informations, consultez Nettoyer les ressources de script de déploiement.
Ressources de formation
Si vous préférez découvrir les scripts de déploiement grâce à une aide pas à pas, consultez Étendre des modèles ARM et des fichiers Bicep avec des scripts de déploiement.
Configurer les autorisations minimales
Pour l’API de script de déploiement version 2020-10-01
ou ultérieure, deux principaux sont impliqués dans l’exécution d’un script de déploiement :
Principal de déploiement : ce principal est utilisé pour déployer le fichier Bicep. Il crée les ressources sous-jacentes nécessaires à l’exécution de la ressource de script de déploiement : un compte de stockage et une instance de conteneur Azure. Pour configurer les autorisations de privilège minimum, affectez un rôle personnalisé avec les propriétés suivantes au principal de déploiement :
{ "roleName": "deployment-script-minimum-privilege-for-deployment-principal", "description": "Configure least privilege for the deployment principal in deployment script", "type": "customRole", "IsCustom": true, "permissions": [ { "actions": [ "Microsoft.Storage/storageAccounts/*", "Microsoft.ContainerInstance/containerGroups/*", "Microsoft.Resources/deployments/*", "Microsoft.Resources/deploymentScripts/*" ], } ], "assignableScopes": [ "[subscription().id]" ] }
Si les fournisseurs de ressources Stockage Azure et Azure Container Instances n’ont pas été inscrits, veillez à ajouter
Microsoft.Storage/register/action
etMicrosoft.ContainerInstance/register/action
.Principal du script de déploiement : ce principal est requis uniquement si le script de déploiement doit s’authentifier auprès d’Azure et appeler Azure CLI ou PowerShell. Deux méthodes permettent de spécifier le principal du script de déploiement :
- Spécifiez une identité managée affectée par l’utilisateur dans la propriété
identity
. (Consultez la syntaxe des ressources de script de déploiement.) Quand vous spécifiez une identité managée affectée par l’utilisateur, le service de script appelleConnect-AzAccount -Identity
avant d’appeler le script de déploiement. L’identité managée doit avoir l’accès requis pour terminer l’opération dans le script. Actuellement, seule une identité managée affectée par l’utilisateur est prise en charge pour la propriétéidentity
. Pour vous connecter avec une identité différente, utilisez la deuxième méthode de cette liste. - Passez les informations d’identification du principal de service en tant que variables d’environnement sécurisées, puis appelez Connect-AzAccount ou az login dans le script de déploiement.
Si vous utilisez une identité managée, le principal de déploiement exige que le rôle d’opérateur d’identités managées intégré soit attribué à la ressource d’identité managée.
- Spécifiez une identité managée affectée par l’utilisateur dans la propriété
Actuellement, aucun rôle intégré n’est adapté à la configuration des autorisations de script de déploiement.
Créer des scripts de déploiement
L’exemple suivant illustre un fichier Bicep simple avec une ressource de script de déploiement. Le script prend un paramètre de chaîne et crée une autre chaîne.
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: 'echo "The argument is ${name}."; jq -n -c --arg st "Hello ${name}" \'{"text": $st}\' > $AZ_SCRIPTS_OUTPUT_PATH'
retentionInterval: 'PT1H'
}
}
output text string = deploymentScript.properties.outputs.text
Pour plus d’informations sur la création de ressources de script de déploiement, consultez Créer des scripts de déploiement. Lors de la création de scripts pour la ressource de script de déploiement, nous vous conseillons d’établir un environnement de développement de script dédié, tel qu’une instance de conteneur Azure ou une image Docker. Après avoir développé et testé minutieusement les scripts, vous pouvez intégrer ou appeler les fichiers de script à partir de la ressource de script de déploiement. Pour plus d’informations, consultez Configurer des environnements de développement de scripts.
Enregistrez le script dans un fichier inlineScript.bicep, puis déployez la ressource à l’aide du script suivant :
$resourceGroupName = Read-Host -Prompt "Enter the name of the resource group to be created"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"
New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateFile "inlineScript.bicep"
Write-Host "Press [ENTER] to continue ..."
Utiliser l’identité managée
L’exemple suivant illustre l’utilisation de l’identité managée pour interagir avec Azure depuis le script de déploiement.
@description('The location of the resources.')
param location string = resourceGroup().location
@description('The storage account to list blobs from.')
param storageAccountData {
name: string
container: string
}
@description('The role id of Storage Blob Data Reader.')
var storageBlobDataReaderRoleId = '2a2b9908-6ea1-4ae2-8e65-a410df84e7d1'
@description('The storage account to read blobs from.')
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' existing = {
name: storageAccountData.name
}
@description('The Storage Blob Data Reader Role definition from [Built In Roles](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles).')
resource storageBlobDataReaderRoleDef 'Microsoft.Authorization/roleDefinitions@2022-05-01-preview' existing = {
scope: subscription()
name: storageBlobDataReaderRoleId
}
@description('The user identity for the deployment script.')
resource scriptIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-07-31-preview' = {
name: 'script-identity'
location: location
}
@description('Assign permission for the deployment scripts user identity access to the read blobs from the storage account.')
resource dataReaderRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
scope: storageAccount
name: guid(storageBlobDataReaderRoleDef.id, scriptIdentity.id, storageAccount.id)
properties: {
principalType: 'ServicePrincipal'
principalId: scriptIdentity.properties.principalId
roleDefinitionId: storageBlobDataReaderRoleDef.id
}
}
@description('The deployment script.')
resource script 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
name: 'script'
location: location
kind: 'AzureCLI'
identity: {
type: 'UserAssigned'
userAssignedIdentities: {
'${scriptIdentity.id}': {}
}
}
properties: {
azCliVersion: '2.59.0'
retentionInterval: 'PT1H'
arguments: '${storageAccount.properties.primaryEndpoints.blob} ${storageAccountData.container}'
scriptContent: '''
#!/bin/bash
set -e
az storage blob list --auth-mode login --blob-endpoint $1 --container-name $2
'''
}
}
Monitorer et dépanner un script de déploiement
Quand vous déployez une ressource de script de déploiement, vous avez besoin d’un compte de stockage pour stocker le script utilisateur, les résultats d’exécution et le fichier stdout
. Vous pouvez spécifier votre propre compte de stockage. Pour plus d’informations, consultez Utiliser un compte de stockage existant.
Au lieu de spécifier votre propre compte de stockage, vous pouvez définir cleanupPreference
sur OnExpiration
. Ensuite, configurez retentionInterval
avec une durée qui vous laisse suffisamment de temps pour passer en revue les sorties avant la suppression du compte de stockage. Pour plus d’informations, consultez Nettoyer les ressources de script de déploiement.
Ajoutez la propriété cleanupPreference
au fichier Bicep précédent et définissez la valeur sur OnExpiration
. La valeur par défaut est Always
. Définissez également rentalInterval
sur PT1H
(une heure) ou moins.
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: 'echo "The argument is ${name}."; jq -n -c --arg st "Hello ${name}" \'{"text": $st}\' > $AZ_SCRIPTS_OUTPUT_PATH'
cleanupPreference: 'OnExpiration'
retentionInterval: 'PT1H'
}
}
output text string = deploymentScript.properties.outputs.text
Après avoir déployé le fichier Bicep, utilisez le portail Azure, Azure CLI, Azure PowerShell ou l’API REST pour vérifier les résultats.
Portail Azure
Une fois que vous avez déployé une ressource de script de déploiement, la ressource est listée sous le groupe de ressources dans la Portail Azure. La page Vue d’ensemble répertorie les deux ressources de prise en charge en plus de la ressource de script de déploiement. Les ressources de prise en charge seront supprimées après l’expiration de l’intervalle de rétention.
Notez la présence du suffixe azscripts dans le nom des deux ressources complémentaires, car celles-ci sont créées automatiquement. L’autre façon d’identifier les ressources complémentaires consiste à utiliser des balises.
Sélectionnez la ressource de script de déploiement dans la liste. La page Vue d’ensemble d’une ressource de script de déploiement affiche des informations importantes sur la ressource, telles que l’État d’approvisionnement et les deux ressources complémentaires (Compte de stockage et Instance de conteneur). La zone Journaux affiche le texte imprimé du script.
Sélectionnez Sorties pour afficher les sorties du script.
Revenez au groupe de ressources, sélectionnez le compte de stockage, sélectionnez Partages de fichiers, puis sélectionnez le partage de fichiers avec azscripts ajouté au nom de partage. Deux dossiers apparaissent dans la liste : azscriptinput et azscriptoutput. Le dossier de sortie contient un fichier executionresult.json et le fichier de sortie du script. Le fichier executionresult.json contient le message d’erreur d’exécution du script. Le fichier de sortie est créé uniquement lorsque l’exécution du script aboutit.
Le dossier d’entrée contient le fichier de script système et le fichier de script de déploiement utilisateur. Vous pouvez remplacer le fichier de script de déploiement utilisateur par un fichier révisé, puis réexécuter le script de déploiement à partir de l’instance de conteneur Azure.
Azure CLI
Vous pouvez utiliser Azure CLI pour gérer les scripts de déploiement au niveau de l’étendue de l’abonnement ou du groupe de ressources :
- supprimer les scripts de déploiement az : Supprimez un script de déploiement.
- lister des scripts de déploiement az : Listez tous les scripts de déploiement.
- montrer les scripts de déploiement az : Récupérez un script de déploiement.
- journal des scripts de déploiement az : Affichez les journaux de script de déploiement.
La sortie de la commande list est similaire à cet exemple :
{
"arguments": "John Dole",
"azCliVersion": "2.52.0",
"cleanupPreference": "OnExpiration",
"containerSettings": {
"containerGroupName": null
},
"environmentVariables": null,
"forceUpdateTag": null,
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/dsDemo/providers/Microsoft.Resources/deploymentScripts/inlineCLI",
"identity": null,
"kind": "AzureCLI",
"location": "centralus",
"name": "inlineCLI",
"outputs": {
"text": "Hello John Dole"
},
"primaryScriptUri": null,
"provisioningState": "Succeeded",
"resourceGroup": "dsDemo",
"retentionInterval": "1:00:00",
"scriptContent": "echo \"The argument is John Dole.\"; jq -n -c --arg st \"Hello John Dole\" '{\"text\": $st}' > $AZ_SCRIPTS_OUTPUT_PATH",
"status": {
"containerInstanceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/dsDemo/providers/Microsoft.ContainerInstance/containerGroups/jgczqtxom5oreazscripts",
"endTime": "2023-12-11T20:20:12.149468+00:00",
"error": null,
"expirationTime": "2023-12-11T21:20:12.149468+00:00",
"startTime": "2023-12-11T20:18:26.674492+00:00",
"storageAccountId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/dsDemo/providers/Microsoft.Storage/storageAccounts/jgczqtxom5oreazscripts"
},
"storageAccountSettings": null,
"supportingScriptUris": null,
"systemData": {
"createdAt": "2023-12-11T19:45:32.239063+00:00",
"createdBy": "johndole@contoso.com",
"createdByType": "User",
"lastModifiedAt": "2023-12-11T20:18:26.183565+00:00",
"lastModifiedBy": "johndole@contoso.com",
"lastModifiedByType": "User"
},
"tags": null,
"timeout": "1 day, 0:00:00",
"type": "Microsoft.Resources/deploymentScripts"
}
Azure PowerShell
Vous pouvez utiliser Azure PowerShell pour gérer les scripts de déploiement au niveau de l’étendue de l’abonnement ou du groupe de ressources :
- Get-AzDeploymentScript : permet d’obtenir ou de lister les scripts de déploiement.
- Get-AzDeploymentScriptLog : permet d’obtenir le journal de l’exécution d’un script de déploiement.
- Remove-AzDeploymentScript : permet de supprimer un script de déploiement et les ressources associées.
- Save-AzDeploymentScriptLog : permet d’enregistrer le journal de l’exécution d’un script de déploiement sur le disque.
La sortie de Get-AzDeploymentScript
est similaire à cet exemple :
Name : inlinePS
Id : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/dsDemo/providers/Microsoft.Resources/deploymentScripts/inlinePS
ResourceGroupName : dsDemo
Location : centralus
SubscriptionId : aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
ProvisioningState : Succeeded
Identity :
ScriptKind : AzurePowerShell
AzPowerShellVersion : 10.0
StartTime : 12/11/2023 9:45:50 PM
EndTime : 12/11/2023 9:46:59 PM
ExpirationDate : 12/11/2023 10:46:59 PM
CleanupPreference : OnExpiration
StorageAccountId : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/dsDemo/providers/Microsoft.Storage/storageAccounts/ee5o4rmoo6ilmazscripts
ContainerInstanceId : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/dsDemo/providers/Microsoft.ContainerInstance/containerGroups/ee5o4rmoo6ilmazscripts
Outputs :
Key Value
================== ==================
text Hello John Dole.
RetentionInterval : PT1H
Timeout : P1D
API REST
Vous pouvez utiliser l’API REST pour obtenir des informations sur la ressource de script de déploiement au niveau du groupe de ressources et au niveau de l’abonnement :
/subscriptions/<SubscriptionID>/resourcegroups/<ResourceGroupName>/providers/microsoft.resources/deploymentScripts/<DeploymentScriptResourceName>?api-version=2020-10-01
/subscriptions/<SubscriptionID>/providers/microsoft.resources/deploymentScripts?api-version=2020-10-01
L’exemple suivant utilise ARMClient. ARMClient n’est pas un outil Microsoft pris en charge.
armclient login
armclient get /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myrg/providers/microsoft.resources/deploymentScripts/myDeployementScript?api-version=2020-10-01
La sortie est similaire à cet exemple :
{
"kind": "AzureCLI",
"identity": null,
"location": "centralus",
"systemData": {
"createdAt": "2023-12-11T19:45:32.239063+00:00",
"createdBy": "johndole@contoso.com",
"createdByType": "User",
"lastModifiedAt": "2023-12-11T20:18:26.183565+00:00",
"lastModifiedBy": "johndole@contoso.com",
"lastModifiedByType": "User"
},
"properties": {
"provisioningState": "Succeeded",
"azCliVersion": "2.52.0",
"scriptContent": "echo \"The argument is John Dole.\"; jq -n -c --arg st \"Hello John Dole\" '{\"text\": $st}' > $AZ_SCRIPTS_OUTPUT_PATH",
"arguments": "John Dole",
"retentionInterval": "1:00:00",
"timeout": "1 day, 0:00:00",
"containerSettings": {
"containerGroupName": null
},
"status": {
"containerInstanceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/dsDemo/providers/Microsoft.ContainerInstance/containerGroups/jgczqtxom5oreazscripts",
"endTime": "2023-12-11T20:20:12.149468+00:00",
"error": null,
"expirationTime": "2023-12-11T21:20:12.149468+00:00",
"startTime": "2023-12-11T20:18:26.674492+00:00",
"storageAccountId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/dsDemo/providers/Microsoft.Storage/storageAccounts/jgczqtxom5oreazscripts"
},
"outputs": {
"text": "Hello John Dole"
},
"cleanupPreference": "OnSuccess"
},
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/dsDemo/providers/Microsoft.Resources/deploymentScripts/inlineCLI",
"type": "Microsoft.Resources/deploymentScripts",
"name": "inlineCLI",
}
L’API REST suivante retourne le journal :
/subscriptions/<SubscriptionID>/resourcegroups/<ResourceGroupName>/providers/microsoft.resources/deploymentScripts/<DeploymentScriptResourceName>/logs?api-version=2020-10-01
Elle fonctionne uniquement avant la suppression des ressources de script de déploiement.
Codes d’erreur des scripts de déploiement
Le tableau suivant répertorie les codes d’erreur du script de déploiement :
Code d’erreur | Description |
---|---|
DeploymentScriptInvalidOperation |
La définition de la ressource de script de déploiement dans le fichier Bicep contient des noms de propriétés non valides. |
DeploymentScriptResourceConflict |
Vous ne pouvez pas supprimer une ressource de script de déploiement si elle se trouve dans un état non terminal et si l’exécution n’a pas dépassé une heure. Par ailleurs, vous ne pouvez pas réexécuter le même script de déploiement avec le même identificateur de ressource (même abonnement, même nom de groupe de ressources et même nom de ressource) et un contenu de corps de script différent en même temps. |
DeploymentScriptOperationFailed |
L’opération de script de déploiement a échoué en interne. Contactez le Support Microsoft. |
DeploymentScriptStorageAccountAccessKeyNotSpecified |
La clé d’accès n’a pas été spécifiée pour le compte de stockage existant. |
DeploymentScriptContainerGroupContainsInvalidContainers |
Un groupe de conteneurs créé par le service de script de déploiement a été modifié en externe, et des conteneurs non valides ont été ajoutés. |
DeploymentScriptContainerGroupInNonterminalState |
Au moins deux ressources de script de déploiement utilisent le même nom Azure Container Instance dans le même groupe de ressources, et l’une d’entre elles n’a pas encore terminé son exécution. |
DeploymentScriptExistingStorageNotInSameSubscriptionAsDeploymentScript |
Le stockage existant indiqué dans le déploiement est introuvable dans l’abonnement où le script est déployé. |
DeploymentScriptStorageAccountInvalidKind |
Le compte de stockage existant du type BlobBlobStorage ou BlobStorage ne prend pas en charge les partages de fichiers et ne peut pas être utilisé. |
DeploymentScriptStorageAccountInvalidKindAndSku |
Le compte de stockage existant ne prend pas en charge les partages de fichiers. Pour obtenir la liste des types de comptes de stockage pris en charge, consultez Utiliser un compte de stockage existant. |
DeploymentScriptStorageAccountNotFound |
Le compte de stockage n’existe pas ou a été supprimé par un processus ou un outil externe. |
DeploymentScriptStorageAccountWithServiceEndpointEnabled |
Le compte de stockage spécifié possède un point de terminaison de service. Les comptes de stockage comportant un point de terminaison de service ne sont pas pris en charge. |
DeploymentScriptStorageAccountInvalidAccessKey |
Une clé d’accès non valide a été spécifiée pour le compte de stockage existant. |
DeploymentScriptStorageAccountInvalidAccessKeyFormat |
Le format de la clé de compte de stockage n’est pas valide. Consultez Gérer les clés d’accès au compte de stockage. |
DeploymentScriptExceededMaxAllowedTime |
Le temps d’exécution du script de déploiement a dépassé la valeur de délai d’attente spécifiée dans la définition de la ressource de script de déploiement. |
DeploymentScriptInvalidOutputs |
La sortie du script de déploiement n’est pas un objet JSON valide. |
DeploymentScriptContainerInstancesServiceLoginFailure |
L’identité managée affectée par l’utilisateur n’a pas pu se connecter après 10 tentatives à une minute d’intervalle. |
DeploymentScriptContainerGroupNotFound |
Un outil ou un processus externe a supprimé un groupe de conteneurs créé par le service de script de déploiement. |
DeploymentScriptDownloadFailure |
Le téléchargement d’un script complémentaire a échoué. Consultez Utiliser des scripts complémentaires. |
DeploymentScriptError |
Le script utilisateur a généré une erreur. |
DeploymentScriptBootstrapScriptExecutionFailed |
Le script de démarrage a généré une erreur. Le script de démarrage correspond au script système qui orchestre l’exécution du script de déploiement. |
DeploymentScriptExecutionFailed |
Une erreur inconnue s’est produite pendant l’exécution du script de déploiement. |
DeploymentScriptContainerInstancesServiceUnavailable |
Pendant la création d’une instance de conteneur, le service Azure Container Instances a généré une erreur « service non disponible ». |
DeploymentScriptContainerGroupInNonterminalState |
Pendant la création d’une instance de conteneur, un autre script de déploiement a utilisé le même nom d’instance de conteneur dans la même étendue (même abonnement, même nom de groupe de ressources et même nom de ressource). |
DeploymentScriptContainerGroupNameInvalid |
Le nom de l’instance de conteneur spécifié ne répond pas aux exigences d’Azure Container Instances. Consultez Résolution des problèmes courants dans Azure Container Instances. |
Accéder à un réseau virtuel privé
Vous pouvez exécuter des scripts de déploiement dans des réseaux privés avec des configurations supplémentaires. Pour plus d’informations, consultez Accéder à un réseau virtuel privé à l’aide du point de terminaison de service ou exécuter un script de déploiement Bicep en privé sur un point de terminaison privé.
Étapes suivantes
Dans cet article, vous avez appris à utiliser des scripts de déploiement. Pour plus d'informations, consultez les rubriques suivantes :
- Module de formation : étendre des modèles ARM à l’aide de scripts de déploiement
- Développer des ressources de script de déploiement
- Accéder à un réseau virtuel privé à l’aide du point de terminaison de service
- Exécuter un script de déploiement Bicep en privé sur un point de terminaison privé
- Créer des environnements de développement de script