Compartir a través de


Transferencia de ACR con la CLI de Az

En este artículo se muestra cómo usar la característica Transferencia de ACR con la extensión acrtransfer de la CLI de Az.

Realización de los requisitos previos

Complete los requisitos previos descritos aquí antes de intentar las acciones de este artículo. Esto significa que:

  • Ya tiene un registro de SKU prémium existente en ambas nubes.
  • Tiene un contenedor de cuenta de almacenamiento en ambas nubes.
  • Tiene un almacén de claves existente con un secreto que contiene un token de SAS válido con los permisos necesarios en ambas nubes.
  • Tiene una versión reciente de la CLI de Azure instalada en ambas nubes.

Instalación de la extensión de la CLI de Az

En AzureCloud, puede instalar la extensión con el siguiente comando:

az extension add --name acrtransfer

En AzureCloud y otras nubes, puede instalar el blob directamente desde un contenedor de cuentas de almacenamiento público. El blob se hospeda en la cuenta de almacenamiento acrtransferext, el contenedor dist y el blob acrtransfer-1.0.0-py2.py3-none-any.wh. Es posible que tenga que cambiar el sufijo del URI de almacenamiento en función de la nube en la que se encuentra. Lo siguiente se instalará en AzureCloud:

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

Creación de ExportPipeline con la extensión acrtransfer de la CLI de Az

Cree un recurso ExportPipeline para el registro de contenedor de AzureCloud mediante la extensión acrtransfer de la CLI de Az.

Cree una canalización de exportación sin opciones y una identidad asignada por el 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

Cree una canalización de exportación con todas las opciones posibles y una identidad asignada por el usuario:

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

Opciones de exportación

La propiedad options para las canalizaciones de exportación admite valores booleanos opcionales. Se recomiendan los siguientes valores:

Parámetro Value
opciones OverwriteBlobs: sobrescribe los blobs de destino existentes
ContinueOnErrors: continúa la exportación de artefactos restantes en el registro de origen si se produce un error en la exportación de un artefacto.

Provisión de acceso a la directiva de almacén de claves de identidad de ExportPipeline

Si ha creado la canalización con una identidad asignada por el usuario, simplemente asígnele a esta permisos de directiva de acceso secret get.

Si creó la canalización con una identidad asignada por el sistema, primero deberá recuperar el valor de principalId que el sistema ha asignado al recurso de canalización.

Ejecute el siguiente comando para recuperar el recurso de canalización:

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

A partir de esta salida, querrá copiar el valor en el campo principalId.

A continuación, ejecutará el siguiente comando para conceder a esta entidad de seguridad los permisos de directiva de acceso secret get adecuados en el almacén de claves.

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

Creación de ImportPipeline con la extensión acrtransfer de la CLI de Az

Cree un recurso ImportPipeline en el registro de contenedor de destino mediante la extensión acrtransfer de la CLI de Az. De forma predeterminada, la canalización está habilitada para crear un recurso Import PipelineRun automáticamente cuando el contenedor de la cuenta de almacenamiento asociada recibe un nuevo blob de artefacto.

Cree una canalización de importación sin opciones y una identidad asignada por el 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

Cree una canalización de importación con todas las opciones posibles, el desencadenador de origen deshabilitado y una identidad asignada por el usuario:

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

Opciones de importación

La propiedad options para las canalizaciones de importación admite valores booleanos opcionales. Se recomiendan los siguientes valores:

Parámetro Value
opciones OverwriteTags: sobrescribe las etiquetas de destino existentes
DeleteSourceBlobOnSuccess: elimina el blob de almacenamiento de origen después de la importación correcta en el registro de destino
ContinueOnErrors: continúa la importación de artefactos restantes en el registro de destino si se produce un error en la importación de un artefacto.

Provisión de acceso a la directiva de almacén de claves de identidad de ImportPipeline

Si ha creado la canalización con una identidad asignada por el usuario, simplemente asígnele a esta permisos de directiva de acceso secret get.

Si creó la canalización con una identidad asignada por el sistema, primero deberá recuperar el valor de principalId que el sistema ha asignado al recurso de canalización.

Ejecute el siguiente comando para recuperar el recurso de canalización:

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

A partir de esta salida, querrá copiar el valor en el campo principalId.

A continuación, ejecutará el siguiente comando para conceder a esta entidad de seguridad los permisos de directiva de acceso secret get adecuados en el almacén de claves.

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

Creación de PipelineRun para la exportación con la extensión acrtransfer de la CLI de Az

Cree un recurso PipelineRun para el registro de contenedor mediante la extensión acrtransfer de la CLI de Az. Este recurso ejecuta el recurso ExportPipeline que creó anteriormente y exporta los artefactos especificados desde el registro de contenedor como un blob al contenedor de la cuenta de almacenamiento.

Cree una ejecución de canalización de exportación:

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 vuelve a implementar un recurso PipelineRun con propiedades idénticas, debe usar la marca --force-redeploy.

Los artefactos pueden tardar varios minutos en exportarse. Cuando la implementación se complete correctamente, compruebe la exportación de artefactos enumerando el blob exportado en el contenedor de la cuenta de almacenamiento de origen. Por ejemplo, ejecute el comando az storage blob list:

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

Transferencia de blobs entre dominios

En la mayoría de los casos de uso, ahora usará una solución entre dominios u otro método para transferir el blob desde la cuenta de almacenamiento del dominio de origen (la cuenta de almacenamiento asociada a la canalización de exportación) a la cuenta de almacenamiento del dominio de destino (la cuenta de almacenamiento asociada a la canalización de importación). En este punto, se supone que el blob ha llegado a la cuenta de almacenamiento de dominio de destino asociada a la canalización de importación.

Desencadenar recurso ImportPipeline

Si no usó el parámetro --source-trigger-enabled False al crear la canalización de importación, la canalización se desencadenará en 15 minutos después de que el blob llegue al contenedor de la cuenta de almacenamiento. Los artefactos pueden tardar varios minutos en importarse. Cuando la importación se complete correctamente, compruebe la importación de artefactos enumerando las etiquetas en el repositorio que va a importar en el registro de contenedor de destino. Por ejemplo, ejecute az acr repository list:

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

Nota

El desencadenador de origen solo importará blobs que tengan una hora de última modificación en los últimos 60 días. Si piensa usar el desencadenador de origen para importar blobs anteriores, actualice la hora de la última modificación de los blobs mediante la adición de metadatos de blobs a ellos o bien impórtelos con ejecuciones de canalización creadas manualmente.

Si ha usado el parámetro --source-trigger-enabled False al crear el recurso ImportPipeline, deberá crear un recurso PipelineRun manualmente, como se muestra en la sección siguiente.

Creación de PipelineRun para la importación con la extensión acrtransfer de la CLI de Az

Cree un recurso PipelineRun para el registro de contenedor mediante la extensión acrtransfer de la CLI de Az. Este recurso ejecuta el recurso ImportPipeline que creó anteriormente e importa los blobs especificados de la cuenta de almacenamiento en el registro de contenedor.

Cree una ejecución de canalización de importación:

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

Si vuelve a implementar un recurso PipelineRun con propiedades idénticas, debe usar la marca --force-redeploy.

Los artefactos pueden tardar varios minutos en importarse. Cuando la importación finalice correctamente, compruebe la importación de artefactos; para ello, registre los repositorios en el registro de contenedor de destino. Por ejemplo, ejecute az acr repository list:

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

Eliminación de recursos de transferencia de ACR

Elimine un recurso ExportPipeline:

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

Elimine un recurso ImportPipeline:

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

Elimine un recurso PipelineRun. Tenga en cuenta que esta acción no invierte la acción realizada por PipelineRun. Es más parecido a eliminar el registro de PipelineRun.

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

Solución de problemas de transferencia de ACR

Consulte Solución de problemas de transferencia de ACR para obtener instrucciones de solución de problemas.

Pasos siguientes