Partager via


Transfert ACR avec l’interface CLI Az

Cet article explique comment utiliser la fonctionnalité Transfert ACR avec l’extension CLI Az acrtransfer.

Répondre aux prérequis

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.

Installer l’extension CLI Az

Dans AzureCloud, vous pouvez installer l’extension à l’aide de la commande suivante :

az extension add --name acrtransfer

Dans AzureCloud et d’autres clouds, vous pouvez installer le blob directement à partir d’un conteneur de compte de stockage public. Le blob est hébergé dans le compte de stockage acrtransferext, conteneur dist, blob acrtransfer-1.0.0-py2.py3-none-any.wh. Vous devrez peut-être modifier le suffixe de l’URI de stockage en fonction du cloud dans lequel vous vous trouvez. Les éléments suivants sont installés dans AzureCloud :

az extension add --source https://acrtransferext.blob.core.windows.net/dist/acrtransfer-1.0.0-py2.py3-none-any.whl

Créer ExportPipeline avec l’extension CLI Az acrtransfer

Créez une ressource ExportPipeline pour votre registre de conteneurs AzureCloud à l’aide de l’extension CLI Az acrtransfer.

Créez un pipeline d’exportation sans options et avec une identité affectée par le système :

az acr export-pipeline create \
--resource-group $MyRG \
--registry $MyReg \
--name $MyPipeline \
--secret-uri https://$MyKV.vault.azure.net/secrets/$MySecret \
--storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer

Créez un pipeline d’exportation avec toutes les options possibles et une identité affectée par l’utilisateur :

az acr export-pipeline create \
--resource-group $MyRG \
--registry $MyReg \
--name $MyPipeline \
--secret-uri https://$MyKV.vault.azure.net/secrets/$MySecret \
--storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer \
--options OverwriteBlobs ContinueOnErrors \
--assign-identity /subscriptions/$MySubID/resourceGroups/$MyRG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$MyIdentity

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.

Accorder à l’identité ExportPipeline un accès à la stratégie sur le coffre de clés

Si vous avez créé votre pipeline avec une identité affectée par l’utilisateur, accordez simplement à cette identité affectée par l’utilisateur des autorisations de stratégie d’accès secret get sur le coffre de clés.

Si vous avez créé votre pipeline avec une identité affectée par le système, vous devez d’abord récupérer le principalId que le système a attribué à votre ressource de pipeline.

Exécutez la commande suivante pour récupérer votre ressource de pipeline :

az acr export-pipeline show --resource-group $MyRG --registry $MyReg --name $MyPipeline

À partir de cette sortie, vous pouvez copier la valeur dans le champ principalId.

Ensuite, vous exécuterez la commande suivante pour accorder à ce principal les autorisations de stratégie d’accès secret get appropriées sur votre coffre de clés.

az keyvault set-policy --name $MyKeyvault --secret-permissions get --object-id $MyPrincipalID

Créer ImportPipeline avec l’extension CLI Az acrtransfer

Créez une ressource ImportPipeline dans le registre de conteneurs cible à l’aide de l’extension CLI Az acrtransfer. Par défaut, le pipeline est activé pour créer une ressource Import PipelineRun automatiquement lorsque le conteneur de compte de stockage attaché reçoit un nouveau blob d’artefact.

Créez un pipeline d’importation sans options et avec une identité affectée par le système :

az acr import-pipeline create \
--resource-group $MyRG \
--registry $MyReg \
--name $MyPipeline \
--secret-uri https://$MyKV.vault.azure.net/secrets/$MySecret \
--storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer

Créez un pipeline d’importation avec toutes les options possibles, le déclencheur source désactivé et une identité affectée par l’utilisateur :

az acr import-pipeline create \
--resource-group $MyRG \
--registry $MyReg \
--name $MyPipeline \
--secret-uri https://$MyKV.vault.azure.net/secrets/$MySecret \
--storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer \
--options DeleteSourceBlobOnSuccess OverwriteTags ContinueOnErrors \
--assign-identity /subscriptions/$MySubID/resourceGroups/$MyRG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$MyIdentity \
--source-trigger-enabled False

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.

Accorder à l’identité ImportPipeline un accès à la stratégie sur le coffre de clés

Si vous avez créé votre pipeline avec une identité affectée par l’utilisateur, accordez simplement à cette identité affectée par l’utilisateur des autorisations de stratégie d’accès secret get sur le coffre de clés.

Si vous avez créé votre pipeline avec une identité affectée par le système, vous devez d’abord récupérer le principalId que le système a attribué à votre ressource de pipeline.

Exécutez la commande suivante pour récupérer votre ressource de pipeline :

az acr import-pipeline show --resource-group $MyRG --registry $MyReg --name $MyPipeline

À partir de cette sortie, vous pouvez copier la valeur dans le champ principalId.

Ensuite, vous exécuterez la commande suivante pour accorder à ce principal la stratégie d’accès secret get appropriée sur votre coffre de clés.

az keyvault set-policy --name $MyKeyvault --secret-permissions get --object-id $MyPrincipalID

Créer un PipelineRun pour l’exportation avec l’extension CLI Az acrtransfer

Créez une ressource PipelineRun pour votre registre de conteneurs à l’aide de l’extension CLI Az acrtransfer. 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 que blob vers votre conteneur de compte de stockage.

Créez un pipeline-run d’exportation :

az acr pipeline-run create \
--resource-group $MyRG \
--registry $MyReg \
--pipeline $MyPipeline \
--name $MyPipelineRun \
--pipeline-type export \
--storage-blob $MyBlob \
--artifacts hello-world:latest hello-world@sha256:90659bf80b44ce6be8234e6ff90a1ac34acbeb826903b02cfa0da11c82cbc042 \
--force-redeploy

Si vous redéployez une ressource PipelineRun avec des propriétés identiques, vous devez utiliser l’indicateur --force-redeploy.

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

az storage blob list --account-name $MyStorageAccount --container $MyContainer --output table

Transfert de blob entre domaines

Dans la plupart des cas d’usage, vous allez maintenant utiliser une solution interdomaine ou une autre méthode pour transférer votre blob du compte de stockage de votre domaine source (le compte de stockage associé à votre pipeline d’exportation) au compte de stockage de votre domaine cible (le compte de stockage associé à votre pipeline d’importation). À ce stade, nous supposons que le blob est arrivé dans le compte de stockage du domaine cible associé à votre pipeline d’importation.

Déclencher la ressource ImportPipeline

Si vous n’avez pas utilisé le paramètre --source-trigger-enabled False lors de la création de votre pipeline d’importation, ce dernier sera déclenché dans les 15 minutes suivant l’arrivée du blob dans le conteneur du compte de stockage. L’importation des artefacts peut prendre plusieurs minutes. Une fois l’importation terminée, vérifiez l’importation des artefacts en listant les balises du référentiel que vous importez dans le registre du conteneur cible. Par exemple, exécutez az acr repository show-tags :

az acr repository show-tags --name $MyRegistry --repository $MyRepository

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 avez utilisé le paramètre --source-trigger-enabled False lors de la création de votre ImportPipeline, vous devrez créer un PipelineRun manuellement, comme indiqué dans la section suivante.

Créer un PipelineRun pour l’importation avec l’extension CLI Az acrtransfer

Créez une ressource PipelineRun pour votre registre de conteneurs à l’aide de l’extension CLI Az acrtransfer. Cette ressource exécute la ressource ImportPipeline que vous avez créée précédemment et importe les blobs spécifiés de votre compte de stockage dans votre registre de conteneurs.

Créez un pipeline-run d’importation :

az acr pipeline-run create \
--resource-group $MyRG \
--registry $MyReg \
--pipeline $MyPipeline \
--name $MyPipelineRun \
--pipeline-type import \
--storage-blob $MyBlob \
--force-redeploy

Si vous redéployez une ressource PipelineRun avec des propriétés identiques, vous devez utiliser l’indicateur --force-redeploy.

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 show-tags :

az acr repository show-tags --name $MyRegistry --repository $MyRepository

Supprimer les ressources Transfert ACR

Supprimez un ExportPipeline :

az acr export-pipeline delete --resource-group $MyRG --registry $MyReg --name $MyPipeline

Supprimez un ImportPipeline :

az acr import-pipeline delete --resource-group $MyRG --registry $MyReg --name $MyPipeline

Supprimez une ressource PipelineRun. Notez que cela n’inverse pas l’action effectuée par PipelineRun. Cela ressemble davantage à la suppression du journal du PipelineRun.

az acr pipeline-run delete --resource-group $MyRG --registry $MyReg --name $MyPipelineRun

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