Partager via


Configurer une image conteneur pour exécuter des déploiements

Les Environnements de déploiement Azure (ADE) prennent en charge un modèle d’extensibilité qui vous permet de configurer votre définition d’environnement avec votre infrastructure de modèle IaC préférée. Vous pouvez stocker des images personnalisées dans un registre de conteneurs comme Azure Container Registry (ACR) ou Docker Hub, puis les référencer dans vos définitions d’environnement pour déployer des environnements.

Dans cet article, vous allez apprendre à générer des images conteneur Bicep personnalisées pour déployer vos définitions d’environnement dans ADE. Vous découvrirez comment utiliser une image standard fournie par Microsoft ou comment configurer une infrastructure d’approvisionnement d’image personnalisée à l’aide de l’infrastructure IaC (Infrastructure-as-Code) Bicep.

Dans cet article, vous allez apprendre à générer des images conteneur Terraform personnalisées pour créer des environnements de déploiement avec les Environnements de déploiement Azure (ADE). Vous apprenez à configurer une image personnalisée pour provisionner une infrastructure en utilisant le framework Infrastructure en tant que code (IaC) Terraform.

Dans cet article, vous apprendrez à utiliser Pulumi pour les déploiements dans ADE. Vous découvrirez comment utiliser une image standard fournie par Pulumi ou comment configurer une image personnalisée pour approvisionner une infrastructure à l’aide de l’infrastructure IaC (Infrastructure-as-Code) Pulumi.

Prérequis

Utiliser les images conteneur avec ADE

Vous pouvez adopter l’une des approches suivantes pour utiliser des images conteneur avec ADE :

  • Utiliser une image conteneur standard Pour les scénarios simples, utilisez l’image conteneur ARM-Bicep standard fournie par ADE.
  • Créer une image conteneur personnalisée Pour des scénarios plus complexes, créez une image conteneur personnalisée qui répond à vos besoins spécifiques.

Utiliser une image conteneur standard

ADE prend en charge Azure Resource Manager (ARM) et Bicep sans nécessiter de configuration supplémentaire. Vous pouvez créer une définition d’environnement qui déploie des ressources Azure pour un environnement de déploiement en ajoutant les fichiers de modèle (comme azuredeploy.json et environment.yaml) à votre catalogue. ADE utilise ensuite l’image conteneur ARM-Bicep standard pour créer l’environnement de déploiement.

Dans le fichier environment.yaml, la propriété runner spécifie l’emplacement de l’image conteneur que vous souhaitez utiliser. Pour utiliser l’image standard publiée dans le Registre des artefacts Microsoft, utilisez les identificateurs runner respectifs.

L’exemple suivant montre un runner qui référence l’image conteneur ARM-Bicep standard :

    name: WebApp
    version: 1.0.0
    summary: Azure Web App Environment
    description: Deploys a web app in Azure without a datastore
    runner: Bicep
    templatePath: azuredeploy.json

Vous pouvez voir l’image conteneur Bicep standard dans le référentiel standard ADE sous Dossier Runner-Images pour l’image ARM-Bicep.

Pour plus d’informations sur la création de définitions d’environnement qui utilisent les images conteneur ADE pour déployer vos ressources Azure, consultez Ajouter et configurer une définition d’environnement.

Créer une image de conteneur personnalisée

Créer une image conteneur personnalisée à l’aide d’un script

La création d’une image conteneur personnalisée vous permet de personnaliser vos déploiements en fonction de vos besoins. Vous pouvez créer et générer une image basée sur l’image standard ADE et l’envoyer (push) à votre registre de conteneurs à l’aide d’un script de démarrage rapide fourni par Microsoft. Vous trouverez le script dans le référentiel Environnements de déploiement. Pour utiliser le script de démarrage rapide, dupliquez le référentiel, puis exécutez le script localement.

Le script génère une image et l’envoie (push) à l’instance Azure Container Registry (ACR) spécifiée sous le référentiel « ade » et la balise « latest ». Ce script nécessite le nom et le répertoire du registre pour votre image personnalisée, que l’interface Azure CLI et Docker Desktop soient installés et présents dans vos variables PATH, et que vous disposiez des autorisations nécessaires pour effectuer un envoi (push) au registre spécifié.

Pour utiliser le script, vous devez :

  1. Créez un fichier Dockerfile et un dossier scripts pour prendre en charge le modèle d’extensibilité ADE.
  2. Fournir un nom de registre et un répertoire pour votre image personnalisée.
  3. Avoir Azure CLI et Docker Desktop installés et ajoutés dans vos variables PATH.
  4. Avoir Docker Desktop en cours d’exécution.
  5. Avoir l’autorisation de pousser dans le registre spécifié.

Vous pouvez appeler le script avec la commande suivante dans PowerShell :

.\quickstart-image-build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}'

Par ailleurs, si vous voulez pousser l’image vers un dépôt et un nom d’étiquette spécifiques, vous pouvez exécuter :

.\quickstart-image.build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}' -Repository '{YOUR_REPOSITORY}' -Tag '{YOUR_TAG}'

Pour utiliser l’image dans vos déploiements d’environnement, vous devez ajouter l’emplacement de l’image à votre fichier manifeste Connecter l’image à votre définition d’environnement et vous devrez peut-être configurer des autorisations pour que l’ACR rende l’image personnalisée accessible à ADE.

Utiliser les images conteneur avec ADE

Vous pouvez adopter l’une des approches suivantes pour utiliser des images conteneur avec ADE :

  • Créer une image conteneur personnalisée à l’aide d’un script : utilisez le script publié pour créer une image spécifique à Terraform.
  • Créer une image conteneur personnalisée tirant parti d’un flux de travail GitHub : utilisez le flux de travail GitHub publié à partir du modèle d’extensibilité d’ADE avec le référentiel Terraform.
  • Créer une image conteneur personnalisée manuellement : créez une image Terraform personnalisée manuellement

Créer une image de conteneur personnalisée

Créer une image conteneur personnalisée à l’aide d’un script

La création d’une image conteneur personnalisée vous permet de personnaliser vos déploiements en fonction de vos besoins. Vous pouvez générer une image basée sur l’image standard ADE et l’envoyer (push) à votre registre de conteneurs à l’aide d’un script de démarrage rapide fourni par Microsoft. Vous trouverez le script dans le référentiel Environnements de déploiement avec Terraform. Pour utiliser le script de démarrage rapide, dupliquez le référentiel, puis exécutez le script localement.

Pour utiliser le script de démarrage rapide pour rapidement générer et envoyer (push) cet exemple d’image vers une instance Azure Container Registry, vous devez :

  • Dupliquer ce référentiel dans votre compte personnel.
  • Vous assurer qu’Azure CLI et l’application Docker Desktop sont installés sur votre ordinateur et présents dans vos variables PATH.
  • Vous assurer que vous disposez des autorisations nécessaires pour envoyer (push) des images à votre instance Azure Container Registry sélectionnée.

Le script génère une image et l’envoie (push) à l’instance Azure Container Registry (ACR) spécifiée sous le référentiel « ade » et la balise « latest ». Ce script nécessite le nom et le répertoire du registre pour votre image personnalisée, que l’interface Azure CLI et Docker Desktop soient installés et présents dans vos variables PATH, et que vous disposiez des autorisations nécessaires pour effectuer un envoi (push) au registre spécifié. Vous pouvez appeler le script avec la commande suivante dans PowerShell :

.\quickstart-image-build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}'

Par ailleurs, si vous voulez pousser l’image vers un dépôt et un nom d’étiquette spécifiques, vous pouvez exécuter :

.\quickstart-image.build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}' -Repository '{YOUR_REPOSITORY}' -Tag '{YOUR_TAG}'

Pour utiliser l’image dans vos déploiements d’environnement, vous devez ajouter l’emplacement de l’image à votre fichier manifeste Connecter l’image à votre définition d’environnement et vous devrez peut-être configurer des autorisations pour que l’ACR rende l’image personnalisée accessible à ADE.

Utiliser une image conteneur standard fournie par Pulumi

L’équipe Pulumi fournit une image prédéfinie pour vous aider à démarrer, que vous pouvez voir dans le dossier Runner-Image. Cette image est disponible publiquement sur le Docker Hub de Pulumi en tant que pulumi/azure-deployment-environments. Vous pouvez donc l’utiliser directement à partir de vos définitions d’environnement ADE.

Voici un exemple de fichier environment.yaml qui utilise l’image prédéfinie :

name: SampleDefinition
version: 1.0.0
summary: First Pulumi-Enabled Environment
description: Deploys a Storage Account with Pulumi
runner: pulumi/azure-deployment-environments:0.1.0
templatePath: Pulumi.yaml

Vous trouverez quelques exemples de définitions d’environnement dans le dossier Environnements.

Créer une image personnalisée

La création d’une image conteneur personnalisée vous permet de personnaliser vos déploiements en fonction de vos besoins. Vous pouvez créer des images personnalisées basées sur les images standard Pulumi et les personnaliser pour répondre à vos besoins. Une fois la personnalisation de l’image terminée, vous devez générer l’image et la transmettre (push) à votre registre de conteneurs.

Pour créer une image configurée pour ADE, suivez ces étapes :

  1. Créer une image personnalisée basée sur une image standard.
  2. Installer les packages souhaités.
  3. Configurer des scripts d’interpréteur de commandes d’opération.
  4. Créer des scripts d’interpréteur de commandes d’opération qui utilisent l’interface CLI Pulumi.

1. Créer une image personnalisée basée sur une image standard

Créez un Dockerfile qui inclut une instruction FROM pointant vers une image standard hébergée dans le Registre des artefacts Microsoft.

Voici un exemple d’instruction FROM qui référence l’image principale standard :

FROM mcr.microsoft.com/deployment-environments/runners/core:latest

Cette instruction extrait la dernière image de base publiée et en fait la base de votre image personnalisée.

2. Installer les packages nécessaires

Vous pouvez installer l’interface CLI Pulumi dans un emplacement exécutable pour pouvoir l’utiliser dans vos scripts de déploiement et de suppression.

Voici un exemple de ce processus, en installant la dernière version de l’interface CLI Pulumi :

RUN apk add curl
RUN curl -fsSL https://get.pulumi.com | sh
ENV PATH="${PATH}:/root/.pulumi/bin"

En fonction du langage de programmation que vous envisagez d’utiliser pour les programmes Pulumi, vous devrez peut-être installer un ou plusieurs runtimes correspondants. Le runtime Python est déjà disponible dans l’image de base.

Voici un exemple d’installation de Node.js et de TypeScript :

# install node.js, npm, and typescript
RUN apk add nodejs npm
RUN npm install typescript -g

Les images standard ADE sont basées sur l’image Azure CLI, et les packages de l’interface CLI ADE et JQ sont préinstallés. Vous pouvez en savoir plus sur Azure CLI et le package JQ.

Pour installer les autres packages dont vous avez besoin dans votre image, utilisez l’instruction RUN.

Il existe quatre étapes pour déployer l’infrastructure via Pulumi :

  1. pulumi login : connectez-vous au stockage d’état, dans le système de fichiers local ou dans Pulumi Cloud
  2. pulumi stack select : créez ou sélectionnez la pile à utiliser pour l’environnement particulier
  3. pulumi config set : passez les paramètres de déploiement en tant que valeurs de configuration Pulumi
  4. pulumi up : exécutez le déploiement pour créer une infrastructure ou mettre à jour l’infrastructure existante dans Azure

Pendant le point d’entrée de l’image de base, tous les fichiers d’état locaux existants sont extraits dans le conteneur et le répertoire enregistré sous la variable d’environnement $ADE_STORAGE. Pour accéder au fichier d’état existant, exécutez les commandes suivantes :

mkdir -p $ADE_STORAGE
export PULUMI_CONFIG_PASSPHRASE=
pulumi login file://$ADE_STORAGE

Pour vous connecter à Pulumi Cloud à la place, définissez votre jeton d’accès Pulumi en tant que variable d’environnement et exécutez les commandes suivantes :

export PULUMI_ACCESS_TOKEN=YOUR_PULUMI_ACCESS_TOKEN
pulumi login

Tous les paramètres définis pour l’environnement actuel sont stockés sous la variable $ADE_OPERATION_PARAMETERS. En outre, la région Azure et le nom du groupe de ressources sélectionnés sont passés respectivement dans ADE_ENVIRONMENT_LOCATION et ADE_RESOURCE_GROUP_NAME. Pour définir votre configuration de pile Pulumi, exécutez les commandes suivantes :

# Create or select the stack for the current environment
pulumi stack select $ADE_ENVIRONMENT_NAME --create

# Store configuration values in durable storage
export PULUMI_CONFIG_FILE=$ADE_STORAGE/Pulumi.$ADE_ENVIRONMENT_NAME.yaml

# Set the Pulumi stack config
pulumi config set azure-native:location $ADE_ENVIRONMENT_LOCATION --config-file $PULUMI_CONFIG_FILE
pulumi config set resource-group-name $ADE_RESOURCE_GROUP_NAME --config-file $PULUMI_CONFIG_FILE
echo "$ADE_OPERATION_PARAMETERS" | jq -r 'to_entries|.[]|[.key, .value] | @tsv' |
  while IFS=$'\t' read -r key value; do
    pulumi config set $key $value --config-file $PULUMI_CONFIG_FILE
  done

Par ailleurs, pour utiliser les privilèges ADE et déployer l’infrastructure dans votre abonnement, votre script doit utiliser l’identité MSI (Managed Service Identity) ADE pendant l’approvisionnement de l’infrastructure à l’aide du fournisseur Pulumi Azure natif ou Azure Classic. Si votre déploiement a besoin d’autorisations spéciales pour effectuer votre déploiement, comme des rôles particuliers, attribuez ces autorisations à l’identité du type d’environnement de projet utilisée pour le déploiement de votre environnement. Étant donné qu’ADE définit les variables d’environnement appropriées, comme le client, le locataire et les ID d’abonnement au sein du point d’entrée de l’image de base, exécutez les commandes suivantes pour que le fournisseur utilise l’identité MSI ADE :

export ARM_USE_MSI=true
export ARM_CLIENT_ID=$ADE_CLIENT_ID
export ARM_TENANT_ID=$ADE_TENANT_ID
export ARM_SUBSCRIPTION_ID=$ADE_SUBSCRIPTION_ID

À présent, vous pouvez exécuter la commande pulumi up pour exécuter le déploiement :

pulumi up --refresh --yes --config-file $PULUMI_CONFIG_FILE

Sinon, pendant votre script de suppression, vous pouvez exécuter la commande destroy, comme illustré dans l’exemple suivant :

pulumi destroy --refresh --yes --config-file $PULUMI_CONFIG_FILE

Enfin, pour que les sorties de votre déploiement soient chargées et accessibles quand vous accédez à votre environnement avec Azure CLI, convertissez l’objet de sortie de Pulumi au format spécifié par ADE avec le package JQ. Définissez la valeur de la variable d'environnement $ADE_OUTPUTS, comme indiqué dans l’exemple suivant :

stackout=$(pulumi stack output --json | jq -r 'to_entries|.[]|{(.key): {type: "string", value: (.value)}}')
echo "{\"outputs\": ${stackout:-{\}}}" > $ADE_OUTPUTS

Générer l’image personnalisée

Vous pouvez générer votre image à l’aide de l’interface CLI Docker. Vérifiez que le moteur Docker est installé sur votre ordinateur. Ensuite, accédez au répertoire de votre fichier Dockerfile, puis exécutez la commande suivante :

docker build . -t {YOUR_REGISTRY}.azurecr.io/{YOUR_REPOSITORY}:{YOUR_TAG}

Par exemple, si vous voulez enregistrer votre image sous un dépôt au sein de votre registre nommé customImage et le charger avec la version d’étiquette 1.0.0, vous exécutez :

docker build . -t {YOUR_REGISTRY}.azurecr.io/customImage:1.0.0

Rendre l’image personnalisée accessible à ADE

Pour pouvoir utiliser des images personnalisées, vous devez les stocker dans un registre de conteneurs. Vous pouvez utiliser un registre de conteneurs public ou un registre de conteneurs privé. Azure Container Registry (ACR) est fortement recommandé, car en raison de son intégration étroite avec ADE, l’image peut être publiée sans autoriser l’accès par extraction anonyme public. Vous devez générer votre image conteneur personnalisée et l’envoyer (push) vers un registre de conteneurs afin de la rendre disponible dans ADE.

Il est également possible de stocker l’image dans un autre registre de conteneurs comme Docker Hub mais dans ce cas, il doit être accessible publiquement.

Attention

Le stockage de votre image conteneur dans un registre avec un accès par extraction anonyme (non authentifié) le rend accessible publiquement. Ne faites pas cela si votre image contient des informations sensibles. Au lieu de cela, stockez-le dans Azure Container Registry (ACR) avec un accès par extraction anonyme désactivé.

Pour utiliser une image personnalisée stockée dans ACR, vous devez vérifier qu’ADE dispose des autorisations appropriées pour accéder à votre image. Lorsque vous créez une instance ACR, elle est sécurisée par défaut et autorise l’accès uniquement aux utilisateurs authentifiés.

Vous pouvez utiliser Pulumi pour créer un Registre de conteneurs Azure et y publier votre image. Reportez-vous à l’exemple Approvisionnement/image personnalisée pour un projet Pulumi autonome qui crée toutes les ressources nécessaires dans votre compte Azure.

Sélectionnez l’onglet approprié pour en savoir plus sur chaque approche.

Utiliser un registre privé avec un accès sécurisé

Par défaut, l’accès pour extraire ou envoyer du contenu dans un registre de conteneurs Azure est disponible seulement pour les utilisateurs authentifiés. Vous pouvez sécuriser davantage l’accès à ACR en limitant l’accès depuis certains réseaux et en attribuant des rôles spécifiques.

Pour créer une instance d’ACR, qui peut être effectuée via Azure CLI, le Portail Azure, des commandes PowerShell, etc., suivez l’un des guides de démarrage rapide.

Limiter l’accès réseau

Pour sécuriser l’accès réseau à votre ACR, vous pouvez limiter l’accès à vos propres réseaux ou désactiver entièrement l’accès du réseau public. Si vous limitez l’accès réseau, vous devez activer l’exception de pare-feu Autoriser les services Microsoft approuvés à accéder à ce registre de conteneurs.

Pour désactiver l’accès depuis des réseaux publics :

  1. Créez une instance ACR ou utilisez une instance existante.

  2. Dans le portail Azure, accédez à l’ACR que vous souhaitez configurer.

  3. Dans le menu de gauche, sous Paramètres, sélectionnez Mise en réseau.

  4. Dans la page Mise en réseau, sous l’onglet Accès réseau public, sélectionnez Désactivé.

    Capture d’écran du portail Azure montrant les paramètres réseau d’ACR, avec Accès public et Désactivé mis en évidence.

  5. Sous Exception pare-feu, vérifiez que Autoriser les services Microsoft approuvés à accéder à ce registre de conteneurs est sélectionné, puis sélectionnez Enregistrer.

    Capture d’écran des paramètres réseau d’ACR, avec Autoriser les services Microsoft approuvés à accéder à ce registre de conteneurs et Enregistrer mis en évidence.

Attribuer le rôle AcrPull

La création d’environnements en utilisant des images conteneur utilise l’infrastructure ADE, y compris les projets et les types d’environnement. Chaque projet a un ou plusieurs types d’environnement de projet, qui ont besoin d’un accès en lecture à l’image conteneur qui définit l’environnement à déployer. Pour accéder aux images de votre ACR de façon sécurisée, attribuez le rôle AcrPull à chaque type d’environnement de projet.

Pour attribuer le rôle AcrPull au type d’environnement de projet :

  1. Dans le portail Azure, accédez à l’ACR que vous souhaitez configurer.

  2. Dans le menu de gauche, sélectionnez contrôle d’accès (IAM).

  3. Sélectionnez Ajouter>Ajouter une attribution de rôle.

  4. Attribuez le rôle suivant. Pour connaître les étapes détaillées, consultez Attribuer des rôles Azure à l’aide du portail Azure.

    Paramètre Valeur
    Rôle Sélectionnez AcrPull.
    Attribuer l’accès à Sélectionnez Utilisateur, groupe ou principal de service.
    Members (Membres) Entrez le nom du type d’environnement de projet qui doit accéder à l’image dans le conteneur.

    Le type d’environnement de projet s’affiche comme dans l’exemple suivant :

    Capture d’écran du volet Sélectionner des membres, montrant une liste de types d’environnement de projet avec une partie du nom mise en évidence.

Dans cette configuration, ADE utilise l’identité managée pour le type d’environnement de projet, qu’il soit affecté par le système ou par l’utilisateur.

Conseil

Cette attribution de rôle doit être effectuée pour chaque type d’environnement de projet. Elle peut être automatisée via Azure CLI.

Quand vous êtes prêt à pousser votre image dans votre registre, exécutez la commande suivante :

docker push {YOUR_REGISTRY}.azurecr.io/{YOUR_IMAGE_LOCATION}:{YOUR_TAG}

Connecter l’image à votre définition d’environnement

Quand vous créez les définitions d’environnement pour utiliser votre image personnalisée dans leur déploiement, modifiez la propriété runner dans le fichier manifeste (environment.yaml ou manifest.yaml).

runner: "{YOUR_REGISTRY}.azurecr.io/{YOUR_REPOSITORY}:{YOUR_TAG}"

Pour en savoir plus sur la création de définitions d’environnement qui utilisent les images conteneur ADE pour déployer vos ressources Azure, consultez Ajouter et configurer une définition d’environnement.