Configurer l’environnement de développement pour les scripts de déploiement dans les fichiers Bicep
Découvrez comment créer un environnement de développement pour développer et tester des scripts de déploiement avec une image de script de déploiement. Vous pouvez soit créer une instance de conteneur Azure, soit utiliser Docker. Les deux options sont décrites dans cet article.
Prérequis
Conteneur Azure PowerShell
Si vous n’avez pas de script de déploiement Azure PowerShell, vous pouvez créer un fichier hello.ps1 en utilisant le contenu suivant :
param([string] $name)
$output = 'Hello {0}' -f $name
Write-Output $output
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['text'] = $output
param([string] $name, [string] $subscription)
$output = 'Hello {0}' -f $name
#Write-Output $output
Connect-AzAccount -UseDeviceAuthentication
Set-AzContext -subscription $subscription
$kv = Get-AzKeyVault
#Write-Output $kv
$DeploymentScriptOutputs = @{}
$DeploymentScriptOutputs['greeting'] = $output
$DeploymentScriptOutputs['kv'] = $kv.resourceId
Write-Output $DeploymentScriptOutputs
Dans un script de déploiement Azure PowerShell, la variable $DeploymentScriptOutputs
est utilisée pour stocker les valeurs de sortie. Pour plus d’informations sur l’utilisation des sorties Azure PowerShell, consultez Utiliser des sorties.
Conteneur Azure CLI
Pour une image conteneur Azure CLI, vous pouvez créer un fichier hello.sh en utilisant le contenu suivant :
FIRSTNAME=$1
LASTNAME=$2
OUTPUT="{\"name\":{\"displayName\":\"$FIRSTNAME $LASTNAME\",\"firstName\":\"$FIRSTNAME\",\"lastName\":\"$LASTNAME\"}}"
echo -n "Hello "
echo $OUTPUT | jq -r '.name.displayName'
Dans un script de déploiement Azure CLI, une variable d’environnement appelée AZ_SCRIPTS_OUTPUT_PATH
stocke l’emplacement du fichier de sortie du script. La variable d’environnement n’est pas disponible dans le conteneur de l’environnement de développement. Pour plus d’informations sur l’utilisation des sorties Azure CLI, consultez Utiliser les sorties des scripts CLI.
Utiliser une instance de conteneur Azure PowerShell
Pour créer des scripts Azure PowerShell sur votre ordinateur, vous devez créer un compte de stockage et monter celui-ci dans l’instance de conteneur. Cela vous permettra de charger votre script dans le compte de stockage et d’exécuter le script sur l’instance de conteneur. Le compte de stockage que vous créez pour tester votre script n’est pas le même que celui qu’utilise le service de script de déploiement pour exécuter le script. Le service de script de déploiement crée un nom unique sous forme de partage de fichiers à chaque exécution.
Créer une instance de conteneur Azure PowerShell
Le fichier Bicep suivant crée une instance de conteneur et un partage de fichiers, puis monte ce dernier sur l’image conteneur.
@description('Specify a project name that is used for generating resource names.')
param projectName string
@description('Specify the resource location.')
param location string = resourceGroup().location
@description('Specify the container image.')
param containerImage string = 'mcr.microsoft.com/azuredeploymentscripts-powershell:az9.7'
@description('Specify the mount path.')
param mountPath string = '/mnt/azscripts/azscriptinput'
var storageAccountName = toLower('${projectName}store')
var fileShareName = '${projectName}share'
var containerGroupName = '${projectName}cg'
var containerName = '${projectName}container'
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
name: storageAccountName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
properties: {
accessTier: 'Hot'
}
}
resource fileShare 'Microsoft.Storage/storageAccounts/fileServices/shares@2023-01-01' = {
name: '${storageAccountName}/default/${fileShareName}'
dependsOn: [
storageAccount
]
}
resource containerGroup 'Microsoft.ContainerInstance/containerGroups@2023-05-01' = {
name: containerGroupName
location: location
properties: {
containers: [
{
name: containerName
properties: {
image: containerImage
resources: {
requests: {
cpu: 1
memoryInGB: json('1.5')
}
}
ports: [
{
protocol: 'TCP'
port: 80
}
]
volumeMounts: [
{
name: 'filesharevolume'
mountPath: mountPath
}
]
command: [
'/bin/sh'
'-c'
'pwsh -c \'Start-Sleep -Seconds 1800\''
]
}
}
]
osType: 'Linux'
volumes: [
{
name: 'filesharevolume'
azureFile: {
readOnly: false
shareName: fileShareName
storageAccountName: storageAccountName
storageAccountKey: storageAccount.listKeys().keys[0].value
}
}
]
}
}
La valeur par défaut du chemin de montage est /mnt/azscripts/azscriptinput
. Il s’agit du chemin dans l’instance de conteneur où il est monté dans le partage de fichiers.
L’image conteneur par défaut spécifiée dans le fichier Bicep est mcr.microsoft.com/azuredeploymentscripts-powershell:az9.7. Consultez la liste de toutes les versions d’Azure PowerShell prises en charge.
Le fichier Bicep interrompt l’instance de conteneur après 1 800 secondes. Il faut compter 30 minutes avant que l’instance de conteneur passe à l’état terminé et que la session prenne fin.
Utilisez le script suivant pour déployer le fichier Bicep :
$projectName = Read-Host -Prompt "Enter a project name that is used to generate resource names"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"
$templateFile = Read-Host -Prompt "Enter the Bicep file path and file name"
$resourceGroupName = "${projectName}rg"
New-AzResourceGroup -Location $location -name $resourceGroupName
New-AzResourceGroupDeployment -resourceGroupName $resourceGroupName -TemplateFile $templatefile -projectName $projectName
Charger le script de déploiement
Chargez votre script de déploiement dans le compte de stockage. Voici un exemple de script PowerShell :
$projectName = Read-Host -Prompt "Enter the same project name that you used earlier"
$fileName = Read-Host -Prompt "Enter the deployment script file name with the path"
$resourceGroupName = "${projectName}rg"
$storageAccountName = "${projectName}store"
$fileShareName = "${projectName}share"
$context = (Get-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $storageAccountName).Context
Set-AzStorageFileContent -Context $context -ShareName $fileShareName -Source $fileName -Force
Vous pouvez aussi charger le fichier en utilisant le portail Azure ou Azure CLI.
Tester le script de déploiement
Dans le portail Azure, ouvrez le groupe de ressources dans lequel vous avez déployé l’instance de conteneur et le compte de stockage.
Ouvrez le groupe de conteneurs. Par défaut, le nom du groupe de conteneurs est le nom du projet auquel est ajouté « cg ». L’instance de conteneur est à l’état En cours d’exécution.
Dans le menu des ressources, sélectionnez Conteneurs. Le nom de l’instance de conteneur est le nom du projet auquel est ajouté « container ».
Sélectionnez Connecter, puis Connecter. Si vous ne pouvez pas vous connecter à l’instance de conteneur, redémarrez le groupe de conteneurs, puis réessayez.
Dans le volet de la console, exécutez la commande suivante :
cd /mnt/azscripts/azscriptinput ls pwsh ./hello.ps1 "John Dole"
La sortie est Hello John Dole.
Utiliser une instance de conteneur Azure CLI
Pour créer des scripts Azure CLI sur votre ordinateur, créez un compte de stockage et montez-le sur l’instance de conteneur. Vous pouvez ensuite charger votre script dans le compte de stockage et exécuter le script sur l’instance de conteneur. Le compte de stockage que vous créez pour tester votre script n’est pas le même que celui qu’utilise le service de script de déploiement pour exécuter le script. Le service de script de déploiement crée un nom unique sous forme de partage de fichiers à chaque exécution.
Créer une instance de conteneur Azure CLI
Le fichier Bicep suivant crée une instance de conteneur et un partage de fichiers, puis monte ce dernier sur l’image conteneur :
@description('Specify a project name that is used for generating resource names.')
param projectName string
@description('Specify the resource location.')
param location string = resourceGroup().location
@description('Specify the container image.')
param containerImage string = 'mcr.microsoft.com/azure-cli:2.9.1'
@description('Specify the mount path.')
param mountPath string = '/mnt/azscripts/azscriptinput'
var storageAccountName = toLower('${projectName}store')
var fileShareName = '${projectName}share'
var containerGroupName = '${projectName}cg'
var containerName = '${projectName}container'
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
name: storageAccountName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
properties: {
accessTier: 'Hot'
}
}
resource fileshare 'Microsoft.Storage/storageAccounts/fileServices/shares@2023-04-01' = {
name: '${storageAccountName}/default/${fileShareName}'
dependsOn: [
storageAccount
]
}
resource containerGroup 'Microsoft.ContainerInstance/containerGroups@2023-05-01' = {
name: containerGroupName
location: location
properties: {
containers: [
{
name: containerName
properties: {
image: containerImage
resources: {
requests: {
cpu: 1
memoryInGB: json('1.5')
}
}
ports: [
{
protocol: 'TCP'
port: 80
}
]
volumeMounts: [
{
name: 'filesharevolume'
mountPath: mountPath
}
]
command: [
'/bin/bash'
'-c'
'echo hello; sleep 1800'
]
}
}
]
osType: 'Linux'
volumes: [
{
name: 'filesharevolume'
azureFile: {
readOnly: false
shareName: fileShareName
storageAccountName: storageAccountName
storageAccountKey: storageAccount.listKeys().keys[0].value
}
}
]
}
}
La valeur par défaut du chemin de montage est /mnt/azscripts/azscriptinput
. Il s’agit du chemin dans l’instance de conteneur où il est monté dans le partage de fichiers.
L’image conteneur par défaut spécifiée dans le fichier Bicep est mcr.microsoft.com/azure-cli:2.9.1. Consultez la liste des versions de Azure CLI prises en charge. Le script de déploiement utilise les images CLI disponibles dans Microsoft Container Registry (MCR). Il faut environ un mois pour certifier une image CLI pour un script de déploiement. N’utilisez pas les versions de l’interface CLI qui ont été publiées il y a moins de 30 jours. Pour trouver les dates de publication des images, consultez les Notes de publication d’Azure CLI. Si vous utilisez une version non prise en charge, le message d’erreur répertorie les versions prises en charge.
Le fichier Bicep interrompt l’instance de conteneur après 1 800 secondes. Il faut compter 30 minutes avant que l’instance de conteneur passe à l’état terminé et que la session prenne fin.
Pour déployer le fichier Bicep :
$projectName = Read-Host -Prompt "Enter a project name that is used to generate resource names"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"
$templateFile = Read-Host -Prompt "Enter the Bicep file path and file name"
$resourceGroupName = "${projectName}rg"
New-AzResourceGroup -Location $location -name $resourceGroupName
New-AzResourceGroupDeployment -resourceGroupName $resourceGroupName -TemplateFile $templatefile -projectName $projectName
Charger le script de déploiement
Chargez votre script de déploiement dans le compte de stockage. Le script suivant est un exemple PowerShell :
$projectName = Read-Host -Prompt "Enter the same project name that you used earlier"
$fileName = Read-Host -Prompt "Enter the deployment script file name with the path"
$resourceGroupName = "${projectName}rg"
$storageAccountName = "${projectName}store"
$fileShareName = "${projectName}share"
$context = (Get-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $storageAccountName).Context
Set-AzStorageFileContent -Context $context -ShareName $fileShareName -Source $fileName -Force
Vous pouvez aussi charger le fichier à l’aide du portail Azure ou d’Azure CLI.
Tester le script de déploiement
Dans le portail Azure, ouvrez le groupe de ressources dans lequel vous avez déployé l’instance de conteneur et le compte de stockage.
Ouvrez le groupe de conteneurs. Par défaut, le nom du groupe de conteneurs est le nom du projet auquel est ajouté « cg ». L’instance de conteneur est affichée à l’état En cours d’exécution.
Dans le menu des ressources, sélectionnez Conteneurs. Le nom de l’instance de conteneur est le nom du projet auquel est ajouté « container ».
Sélectionnez Connecter, puis Connecter. Si vous ne pouvez pas vous connecter à l’instance de conteneur, redémarrez le groupe de conteneurs, puis réessayez.
Dans le volet de la console, exécutez la commande suivante :
cd /mnt/azscripts/azscriptinput ls ./hello.sh John Dole
La sortie est Hello John Dole.
Utiliser Docker
Vous pouvez utiliser une image conteneur Docker préconfigurée comme environnement de développement de script de déploiement. Pour installer le Docker, consultez Obtenir le Docker. Vous devez aussi configurer le partage de fichiers pour monter le répertoire, qui contient les scripts de déploiement dans le conteneur Docker.
Extrayez l’image conteneur du script de déploiement pour la mettre sur l’ordinateur local :
docker pull mcr.microsoft.com/azuredeploymentscripts-powershell:az10.0
L’exemple utilise la version 4.3.0 de PowerShell.
Pour extraire une image CLI de MCR :
docker pull mcr.microsoft.com/azure-cli:2.52.0
Cet exemple utilise l’interface CLI 2.52.0. Le script de déploiement utilise les images de conteneurs CLI par défaut.
Exécutez l’image Docker localement.
docker run -v <host drive letter>:/<host directory name>:/data -it mcr.microsoft.com/azuredeploymentscripts-powershell:az10.0
Remplacez <host driver letter> (lettre de lecteur hôte) et <host directory name> (nom de répertoire hôte) par un dossier existant sur le lecteur partagé. Le dossier est alors mappé au dossier /data dans le conteneur. Par exemple, pour mapper D:\docker :
docker run -v d:/docker:/data -it mcr.microsoft.com/azuredeploymentscripts-powershell:az10.0
-it indique de conserver l’image conteneur active.
Exemple CLI :
docker run -v d:/docker:/data -it mcr.microsoft.com/azure-cli:2.52.0
La capture d’écran suivante illustre comment exécuter un script PowerShell, étant donné que vous avez un fichier helloworld.ps1 dans le dossier partagé.
Dès lors que le script a été testé avec succès, vous pouvez l’utiliser en tant que script de déploiement dans vos fichiers Bicep.
Étapes suivantes
Dans cet article, vous avez appris à créer des environnements de développement de script. Pour en savoir plus :