Trasferimento dell'ACR con l'interfaccia della riga di comando di Azure
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.
- Si dispone di un contenitore di account di 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 di archiviazione acrtransferext
, contenitore dist
, BLOB acrtransfer-1.0.0-py2.py3-none-any.wh
. 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 proprietà options
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, è sufficiente assegnare a questa identità assegnata dall'utente le autorizzazioni dei criteri di accesso secret get
per l'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 si vuole copiare il valore nel campo principalId
.
Si eseguirà quindi il comando seguente per assegnare a questa entità le autorizzazioni appropriate per i criteri di accesso secret get
nell'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 proprietà options
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, è sufficiente assegnare a questa identità assegnata dall'utente le autorizzazioni dei criteri di accesso secret get
per l'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 si vuole copiare il valore nel campo principalId
.
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 parametro --source-trigger-enabled False
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 una data di ultima modifica compresa 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 parametro --source-trigger-enabled False
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
- Informazioni su come bloccare la creazione di pipeline di esportazione da un registro contenitori con restrizioni di rete.