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
- Obtenga información sobre cómo bloquear la creación de canalizaciones de exportación desde un registro de contenedor restringido por red.