Partager via


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

  1. Dans le portail Azure, ouvrez le groupe de ressources dans lequel vous avez déployé l’instance de conteneur et le compte de stockage.

  2. 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.

  3. Dans le menu des ressources, sélectionnez Conteneurs. Le nom de l’instance de conteneur est le nom du projet auquel est ajouté « container ».

    Capture d’écran de l’option d’instance de conteneur du script de déploiement sur le Portail Azure.

  4. 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.

  5. 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.

    Capture d’écran de sortie de test d’instance de conteneur de connexion de script de déploiement affichée dans la console.

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-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/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. Voici 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

  1. Dans le portail Azure, ouvrez le groupe de ressources dans lequel vous avez déployé l’instance de conteneur et le compte de stockage.

  2. 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.

  3. Dans le menu des ressources, sélectionnez Conteneurs. Le nom de l’instance de conteneur est le nom du projet auquel est ajouté « container ».

    Capture d’écran de l’option d’instance de conteneur du script de déploiement sur le Portail Azure.

  4. 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.

  5. 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.

    Capture d’écran de sortie de test d’instance de conteneur de script de déploiement affichée dans la console.

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.

  1. 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.

  2. 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
    
  3. 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é.

    Capture d’écran du script de déploiement de modèle Resource Manager en utilisant la commande Docker.

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 :