Share via


Trasferimento di Registro Azure Container con l'interfaccia della riga di comando di Az

Questo articolo illustra come usare la funzionalità ACR Transfer con l'estensione dell'interfaccia della riga di comando di Azure Acrtransfer.

Completare i prerequisiti

Completare i prerequisiti descritti qui prima di tentare le azioni in questo articolo. Ciò significa che:

  • In entrambi i cloud è presente un Registro SKU Premium esistente.
  • È presente un contenitore account Archiviazione esistente in entrambi i cloud.
  • Si dispone di un insieme di credenziali delle chiavi esistente con un segreto contenente un token di firma di accesso condiviso valido con le autorizzazioni necessarie in entrambi i cloud.
  • È installata una versione recente dell'interfaccia della riga di comando di Az in entrambi i cloud.

Installare l'estensione dell'interfaccia della riga di comando di Az

In AzureCloud è possibile installare l'estensione con il comando seguente:

az extension add --name acrtransfer

In AzureCloud e in altri cloud è possibile installare il BLOB direttamente da un contenitore di account di archiviazione pubblico. Il BLOB è ospitato nell'account acrtransferext di archiviazione, dist nel contenitore, acrtransfer-1.0.0-py2.py3-none-any.wh nel BLOB. Potrebbe essere necessario modificare il suffisso dell'URI di archiviazione a seconda del cloud in cui ci si trova. Di seguito verrà installato in AzureCloud:

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

Creare ExportPipeline con l'estensione dell'interfaccia della riga di comando di Azure acrtransfer

Creare una risorsa ExportPipeline per il registro contenitori di AzureCloud usando l'estensione dell'interfaccia della riga di comando di Azure acrtransfer Az.

Creare una pipeline di esportazione senza opzioni e un'identità assegnata dal sistema:

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

Creare una pipeline di esportazione con tutte le opzioni possibili e un'identità assegnata dall'utente:

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

Opzioni di esportazione

La options proprietà per le pipeline di esportazione supporta valori booleani facoltativi. Sono consigliati i valori seguenti:

Parametro Valore
opzioni OverwriteBlobs - Sovrascrivere i BLOB di destinazione esistenti
ContinueOnErrors: continuare l'esportazione degli artefatti rimanenti nel Registro di sistema di origine in caso di errore di un'esportazione di un artefatto.

Concedere all'insieme di credenziali delle chiavi di identità ExportPipeline l'accesso ai criteri

Se la pipeline è stata creata con un'identità assegnata dall'utente, assegnare semplicemente le autorizzazioni ai criteri di accesso alle identità secret get assegnate dall'utente nell'insieme di credenziali delle chiavi.

Se la pipeline è stata creata con un'identità assegnata dal sistema, sarà prima necessario recuperare il principalId assegnato dal sistema alla risorsa della pipeline.

Eseguire il comando seguente per recuperare la risorsa della pipeline:

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

Da questo output sarà necessario copiare il valore nel principalId campo .

Si eseguirà quindi il comando seguente per assegnare a questa entità le autorizzazioni appropriate per i criteri di accesso per secret get l'insieme di credenziali delle chiavi.

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

Creare ImportPipeline con l'estensione dell'interfaccia della riga di comando di Azure acrtransfer

Creare una risorsa ImportPipeline nel registro contenitori di destinazione usando l'estensione dell'interfaccia della riga di comando di Azure acrtransfer. Per impostazione predefinita, la pipeline è abilitata per creare automaticamente un oggetto Import PipelineRun quando il contenitore dell'account di archiviazione collegato riceve un nuovo BLOB di artefatti.

Creare una pipeline di importazione senza opzioni e un'identità assegnata dal sistema:

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

Creare una pipeline di importazione con tutte le opzioni possibili, il trigger di origine disabilitato e un'identità assegnata dall'utente:

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

Opzioni di importazione

La options proprietà per la pipeline di importazione supporta valori booleani facoltativi. Sono consigliati i valori seguenti:

Parametro Valore
opzioni OverwriteTags - Sovrascrivere i tag di destinazione esistenti
DeleteSourceBlobOnSuccess - Eliminare il BLOB di archiviazione di origine dopo aver completato l'importazione nel Registro di sistema di destinazione
ContinueOnErrors: continuare l'importazione degli artefatti rimanenti nel Registro di sistema di destinazione se un'importazione di un artefatto ha esito negativo.

Concedere l'accesso ai criteri dell'insieme di credenziali delle chiavi di identità ImportPipeline

Se la pipeline è stata creata con un'identità assegnata dall'utente, assegnare semplicemente le autorizzazioni ai criteri di accesso alle identità secret get assegnate dall'utente nell'insieme di credenziali delle chiavi.

Se la pipeline è stata creata con un'identità assegnata dal sistema, sarà prima necessario recuperare il principalId assegnato dal sistema alla risorsa della pipeline.

Eseguire il comando seguente per recuperare la risorsa della pipeline:

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

Da questo output sarà necessario copiare il valore nel principalId campo .

Si eseguirà quindi il comando seguente per assegnare a questa entità i criteri di accesso appropriati secret get nell'insieme di credenziali delle chiavi.

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

Creare PipelineRun per l'esportazione con l'estensione dell'interfaccia della riga di comando di Azure acrtransfer

Creare una risorsa PipelineRun per il registro contenitori usando l'estensione dell'interfaccia della riga di comando az acrtransfer. Questa risorsa esegue la risorsa ExportPipeline creata in precedenza ed esporta gli artefatti specificati dal registro contenitori come BLOB nel contenitore dell'account di archiviazione.

Creare un'esecuzione della pipeline di esportazione:

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

Se si ridistribuisce una risorsa PipelineRun con proprietà identiche, è necessario usare il flag --force-redeploy.

L'esportazione degli artefatti può richiedere alcuni minuti. Al termine della distribuzione, verificare l'esportazione degli artefatti elencando il BLOB esportato nel contenitore dell'account di archiviazione di origine. Ad esempio, eseguire il comando az storage blob list :

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

Trasferire BLOB tra domini

Nella maggior parte dei casi d'uso si userà ora una soluzione tra domini o un altro metodo per trasferire il BLOB dall'account di archiviazione nel dominio di origine (l'account di archiviazione associato alla pipeline di esportazione) all'account di archiviazione nel dominio di destinazione (l'account di archiviazione associato alla pipeline di importazione). A questo punto, si presuppone che il BLOB sia arrivato nell'account di archiviazione del dominio di destinazione associato alla pipeline di importazione.

Attivare la risorsa ImportPipeline

Se non è stato usato il --source-trigger-enabled False parametro durante la creazione della pipeline di importazione, la pipeline verrà attivata entro 15 minuti dall'arrivo del BLOB nel contenitore dell'account di archiviazione. L'importazione degli artefatti può richiedere alcuni minuti. Al termine dell'importazione, verificare l'importazione dell'artefatto elencando i tag nel repository che si sta importando nel registro contenitori di destinazione. Ad esempio, eseguire az acr repository show-tags:

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

Nota

Il trigger di origine importerà solo i BLOB con un'ora dell'ultima modifica negli ultimi 60 giorni. Se si intende usare il trigger di origine per importare BLOB precedenti, aggiornare l'ora dell'ultima modifica dei BLOB aggiungendo i metadati del BLOB o importandoli con esecuzioni di pipeline create manualmente.

Se è stato usato il --source-trigger-enabled False parametro durante la creazione di ImportPipeline, sarà necessario creare manualmente un oggetto PipelineRun, come illustrato nella sezione seguente.

Creare PipelineRun per l'importazione con l'estensione dell'interfaccia della riga di comando di Azure acrtransfer

Creare una risorsa PipelineRun per il registro contenitori usando l'estensione dell'interfaccia della riga di comando az acrtransfer. Questa risorsa esegue la risorsa ImportPipeline creata in precedenza e importa i BLOB specificati dall'account di archiviazione nel registro contenitori.

Creare un'esecuzione della pipeline di importazione:

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

Se si ridistribuisce una risorsa PipelineRun con proprietà identiche, è necessario usare il flag --force-redeploy.

L'importazione degli artefatti può richiedere alcuni minuti. Al termine dell'importazione, verificare l'importazione dell'artefatto elencando i repository nel registro contenitori di destinazione. Ad esempio, eseguire az acr repository show-tags:

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

Eliminare le risorse di trasferimento del Registro Azure Container

Eliminare un oggetto ExportPipeline:

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

Eliminare un elemento ImportPipeline:

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

Eliminare una risorsa PipelineRun. Si noti che non inverte l'azione eseguita da PipelineRun. Questo è più simile all'eliminazione del log di PipelineRun.

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

Risoluzione dei problemi relativi al trasferimento di Registro Azure Container

Per indicazioni sulla risoluzione dei problemi, vedere Risoluzione dei problemi di trasferimento del Registro Azure Container.

Passaggi successivi