Partager via


Transfert ACR avec des modèles ARM

Remplir les conditions préalables

Veuillez remplir les conditions préalables décrites ici avant de tenter d’effectuer les actions décrites dans cet article. Cela signifie que :

  • Vous avez un registre de niveau tarifaire Premium existant dans les deux clouds.
  • Vous avez un conteneur de compte de stockage existant dans les deux clouds.
  • Vous avez un coffre de clés existant avec un secret contenant un jeton SAP valide avec les autorisations nécessaires dans les deux clouds.
  • Une version récente de l’interface CLI Az est installée dans les deux clouds.

Important

Le transfert ACR prend en charge les artefacts avec une taille de couche limitée à 8 Go en raison des limitations techniques.

Envisager d’utiliser l’extension CLI Az

Pour la plupart des cas d’usage non automatisés, nous recommandons d’utiliser l’extension Az CLI si possible. Vous pouvez consulter la documentation de l’extension CLI Az ici.

Créer un ExportPipeline avec Resource Manager

Créez une ressource ExportPipeline pour votre registre de conteneurs source à l’aide d’un déploiement de modèles Azure Resource Manager.

Copiez les fichiers de modèle Resource Manager de la ressource ExportPipeline dans un dossier local.

Entrez les valeurs de paramètre suivantes dans le fichier azuredeploy.parameters.json :

Paramètre Valeur
registryName Nom de votre registre de conteneurs source
exportPipelineName Nom choisi pour le pipeline d’exportation
targetUri URI du conteneur de stockage dans votre environnement source (la cible du pipeline d’exportation).
Exemple : https://sourcestorage.blob.core.windows.net/transfer
keyVaultName Nom du coffre de clés source
sasTokenSecretName Nom du secret de jeton SAS dans le coffre de clés source
Exemple : acrexportsas

Options d'exportation

La propriété options pour les pipelines d’exportation prend en charge les valeurs booléennes facultatives. Les valeurs suivantes sont recommandées :

Paramètre Valeur
options OverwriteBlobs - Remplacer les objets blob cibles existants
ContinueOnErrors - Continuer l’exportation des artefacts restants dans le registre source en cas d’échec d’une exportation d’artefacts.

Créer la ressource

Exécutez az deployment group create pour créer une ressource nommée exportPipeline comme indiqué dans les exemples suivants. Par défaut, avec la première option, l’exemple de modèle active une identité attribuée par le système dans la ressource ExportPipeline.

Avec la deuxième option, vous pouvez fournir une identité attribuée par l’utilisateur à la ressource. (La création de l’identité attribuée par l’utilisateur n’est pas illustrée.)

Avec l’une ou l’autre des options, le modèle configure l’identité pour accéder au jeton SAS dans le coffre de clés d’exportation.

Option 1 : Créer une ressource et activer l’identité attribuée par le système

az deployment group create \
  --resource-group $SOURCE_RG \
  --template-file azuredeploy.json \
  --name exportPipeline \
  --parameters azuredeploy.parameters.json

Option n°2 : Créer une ressource et fournir une identité attribuée par l’utilisateur

Dans cette commande, fournissez l’ID de ressource de l’identité attribuée par l’utilisateur en tant que paramètre supplémentaire.

az deployment group create \
  --resource-group $SOURCE_RG \
  --template-file azuredeploy.json \
  --name exportPipeline \
  --parameters azuredeploy.parameters.json \
  --parameters userAssignedIdentity="/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myUserAssignedIdentity"

Dans la sortie de commande, prenez note de l’ID de ressource (id) du pipeline. Vous pouvez stocker cette valeur dans une variable d’environnement pour une utilisation ultérieure en exécutant la commande az deployment group show. Par exemple :

EXPORT_RES_ID=$(az deployment group show \
  --resource-group $SOURCE_RG \
  --name exportPipeline \
  --query 'properties.outputResources[1].id' \
  --output tsv)

Créer un ImportPipeline avec Resource Manager

Créez une ressource ImportPipeline dans votre registre de conteneurs cible à l’aide d’un déploiement de modèles Azure Resource Manager. Par défaut, le pipeline est activé pour l’importation automatique lorsque le compte de stockage de l’environnement cible possède un objet blob d’artefact.

Copiez les fichiers de modèle Resource Manager de la ressource ImportPipeline dans un dossier local.

Entrez les valeurs de paramètre suivantes dans le fichier azuredeploy.parameters.json :

Paramètre Valeur
registryName Nom de votre registre de conteneurs cible
importPipelineName Nom choisi pour le pipeline d’importation
sourceUri URI du conteneur de stockage dans votre environnement cible (la source du pipeline d’importation).
Exemple : https://targetstorage.blob.core.windows.net/transfer
keyVaultName Nom du coffre de clés cible
sasTokenSecretName Nom du secret de jeton SAS dans le coffre de clés cible
Exemple : acr importsas

Options d’importation

La propriété options pour le pipeline d’importation prend en charge les valeurs booléennes facultatives. Les valeurs suivantes sont recommandées :

Paramètre Valeur
options OverwriteBlobs - Remplacer les balises cibles existantes
DeleteSourceBlobOnSuccess - Supprimer l’objet blob de stockage source après une importation réussie dans le registre cible
ContinueOnErrors - Continuer l’importation des artefacts restants dans le registre cible en cas d’échec d’une importation d’artefacts.

Créer la ressource

Exécutez az deployment group create pour créer une ressource nommée importPipeline comme indiqué dans les exemples suivants. Par défaut, avec la première option, l’exemple de modèle active une identité attribuée par le système dans la ressource ImportPipeline.

Avec la deuxième option, vous pouvez fournir une identité attribuée par l’utilisateur à la ressource. (La création de l’identité attribuée par l’utilisateur n’est pas illustrée.)

Avec l’une ou l’autre des options, le modèle configure l’identité pour accéder au jeton SAS dans le coffre de clés d’importation.

Option 1 : Créer une ressource et activer l’identité attribuée par le système

az deployment group create \
  --resource-group $TARGET_RG \
  --template-file azuredeploy.json \
  --name importPipeline \
  --parameters azuredeploy.parameters.json

Option n°2 : Créer une ressource et fournir une identité attribuée par l’utilisateur

Dans cette commande, fournissez l’ID de ressource de l’identité attribuée par l’utilisateur en tant que paramètre supplémentaire.

az deployment group create \
  --resource-group $TARGET_RG \
  --template-file azuredeploy.json \
  --name importPipeline \
  --parameters azuredeploy.parameters.json \
  --parameters userAssignedIdentity="/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myUserAssignedIdentity"

Si vous envisagez d’exécuter l’importation manuellement, prenez note de l’ID de ressource (id) du pipeline. Vous pouvez stocker cette valeur dans une variable d’environnement pour une utilisation ultérieure en exécutant la commande az deployment group show. Par exemple :

IMPORT_RES_ID=$(az deployment group show \
  --resource-group $TARGET_RG \
  --name importPipeline \
  --query 'properties.outputResources[1].id' \
  --output tsv)

Créer un PipelineRun pour l’exportation avec Resource Manager

Créez une ressource PipelineRun pour votre registre de conteneurs source à l’aide d’un déploiement de modèles Azure Resource Manager. Cette ressource exécute la ressource ExportPipeline que vous avez créée précédemment et exporte les artefacts spécifiés de votre registre de conteneurs en tant qu’objet blob vers votre compte de stockage source.

Copiez les fichiers de modèle Resource Manager de la ressource PipelineRun dans un dossier local.

Entrez les valeurs de paramètre suivantes dans le fichier azuredeploy.parameters.json :

Paramètre Valeur
registryName Nom de votre registre de conteneurs source
pipelineRunName Nom choisi pour l’exécution
pipelineResourceId ID de ressource du pipeline d’exportation.
Exemple : /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.ContainerRegistry/registries/<sourceRegistryName>/exportPipelines/myExportPipeline
targetName Nom choisi pour l’objet blob d’artefacts exporté vers votre compte de stockage source, par exemple myblob
artifacts Tableau d’artefacts source à transférer, en tant que balises ou synthèses de manifestes
Exemple : [samples/hello-world:v1", "samples/nginx:v1" , "myrepository@sha256:0a2e01852872..."]

Si vous redéployez une ressource PipelineRun avec des propriétés identiques, vous devez également utiliser la propriété forceUpdateTag.

Exécutez az deployment group create pour créer la ressource PipelineRun. L’exemple suivant nomme le déploiement exportPipelineRun.

az deployment group create \
  --resource-group $SOURCE_RG \
  --template-file azuredeploy.json \
  --name exportPipelineRun \
  --parameters azuredeploy.parameters.json

Pour une utilisation ultérieure, stockez l’ID de ressource de l’exécution du pipeline dans une variable d’environnement :

EXPORT_RUN_RES_ID=$(az deployment group show \
  --resource-group $SOURCE_RG \
  --name exportPipelineRun \
  --query 'properties.outputResources[0].id' \
  --output tsv)

L’exportation des artefacts peut prendre plusieurs minutes. Une fois le déploiement terminé, vérifiez l’exportation des artefacts en dressant la liste des objets blob exportés dans le conteneur transfert du compte de stockage source. Par exemple, exécutez la commande az storage blob list :

az storage blob list \
  --account-name $SOURCE_SA \
  --container transfer \
  --output table

Transférer un objet blob (facultatif)

Utilisez l’outil AzCopy ou une autre méthode pour transférer des données d’objet blob du compte de stockage source vers le compte de stockage cible.

Par exemple, la commande azcopy copy suivante copie myblob du conteneur transfert du compte source vers le conteneur transfert du compte cible. Si l’objet blob existe dans le compte cible, il est remplacé. L’authentification utilise des jetons SAS avec les autorisations appropriées pour les conteneurs source et cible. (Les étapes de la création des jetons ne sont pas affichées.)

azcopy copy \
  'https://<source-storage-account-name>.blob.core.windows.net/transfer/myblob'$SOURCE_SAS \
  'https://<destination-storage-account-name>.blob.core.windows.net/transfer/myblob'$TARGET_SAS \
  --overwrite true

Déclencher la ressource ImportPipeline

Si vous avez activé le paramètre sourceTriggerStatus de ImportPipeline (valeur par défaut), le pipeline est déclenché une fois l’objet blob copié dans le compte de stockage cible. L’importation des artefacts peut prendre plusieurs minutes. Une fois l’importation terminée, vérifiez l’importation des artefacts en dressant la liste des dépôts dans le registre de conteneurs cible. Par exemple, exécutez az acr repository list:

az acr repository list --name <target-registry-name>

Notes

Le déclencheur source importe uniquement les blobs dont la date de dernière modification est inférieure à 60 jours. Si vous envisagez d’utiliser un déclencheur source pour importer des blobs, actualisez la date de dernière modification des blobs en y ajoutant des métadonnées de blob ou importez-les avec des exécutions de pipeline créées manuellement.

Si vous n’avez pas activé le paramètre sourceTriggerStatus du pipeline d’importation, exécutez la ressource ImportPipeline manuellement, comme indiqué dans la section suivante.

Créer un PipelineRun pour l’importation avec Resource Manager (facultatif)

Vous pouvez également utiliser une ressource PipelineRun pour déclencher un ImportPipeline pour l’importation d’artefacts vers votre registre de conteneurs cible.

Copiez les fichiers de modèle Resource Manager de la ressource PipelineRun dans un dossier local.

Entrez les valeurs de paramètre suivantes dans le fichier azuredeploy.parameters.json :

Paramètre Valeur
registryName Nom de votre registre de conteneurs cible
pipelineRunName Nom choisi pour l’exécution
pipelineResourceId ID de ressource du pipeline d’importation.
Exemple : /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.ContainerRegistry/registries/<sourceRegistryName>/importPipelines/myImportPipeline
sourceName Nom de l’objet blob existant pour les artefacts exportés dans votre compte de stockage, par exemple myblob

Si vous redéployez une ressource PipelineRun avec des propriétés identiques, vous devez également utiliser la propriété forceUpdateTag.

Exécutez az deployment group create pour exécuter la ressource.

az deployment group create \
  --resource-group $TARGET_RG \
  --name importPipelineRun \
  --template-file azuredeploy.json \
  --parameters azuredeploy.parameters.json

Pour une utilisation ultérieure, stockez l’ID de ressource de l’exécution du pipeline dans une variable d’environnement :

IMPORT_RUN_RES_ID=$(az deployment group show \
  --resource-group $TARGET_RG \
  --name importPipelineRun \
  --query 'properties.outputResources[0].id' \
  --output tsv)

Une fois le déploiement terminé, vérifiez l’importation des artefacts en dressant la liste des dépôts dans le registre de conteneurs cible. Par exemple, exécutez az acr repository list:

az acr repository list --name <target-registry-name>

Redéployer la ressource PipelineRun

Si vous redéployez une ressource PipelineRun avec des propriétés identiques, vous devez tirer parti de la propriété forceUpdateTag. Cette propriété indique que la ressource PipelineRun doit être recréée même si la configuration n’a pas changé. Vérifiez que forceUpdateTag est différente à chacun de vos redéploiements de la ressource PipelineRun. L’exemple ci-dessous recrée une ressource PipelineRun pour l’exportation. La valeur DateHeure actuelle est utilisée pour définir forceUpdateTag, garantissant ainsi que cette propriété est toujours unique.

CURRENT_DATETIME=`date +"%Y-%m-%d:%T"`
az deployment group create \
  --resource-group $SOURCE_RG \
  --template-file azuredeploy.json \
  --name exportPipelineRun \
  --parameters azuredeploy.parameters.json \
  --parameters forceUpdateTag=$CURRENT_DATETIME

Supprimer les ressources de pipeline

Les exemples de commandes suivants utilisent az resource delete pour supprimer les ressources du pipeline créées dans cet article. Les ID de ressource ont été précédemment stockés dans des variables d’environnement.

# Delete export resources
az resource delete \
--resource-group $SOURCE_RG \
--ids $EXPORT_RES_ID $EXPORT_RUN_RES_ID \
--api-version 2019-12-01-preview

# Delete import resources
az resource delete \
--resource-group $TARGET_RG \
--ids $IMPORT_RES_ID $IMPORT_RUN_RES_ID \
--api-version 2019-12-01-preview

Résolution des problèmes liés à Transfert ACR

Consultez Résolution des problèmes liés à Transfert ACR pour obtenir une aide relative au dépannage.

Étapes suivantes