Az CLI를 사용하는 ACR 전송
이 문서에서는 acrtransfer Az CLI을 사용하여 ACR 전송 기능을 사용하는 방법을 보여 줍니다.
필수 조건 완료
이 문서의 작업을 시도하기 전에 여기에 설명된 필수 구성 요소를 완료하세요. 이는 다음을 의미합니다.
- 두 클라우드에 기존 Premium SKU 레지스트리가 있습니다.
- 두 클라우드에 기존 스토리지 계정 컨테이너가 있습니다.
- 두 클라우드에 필요한 권한이 있는 유효한 SAS 토큰을 포함하는 비밀이 있는 기존 Keyvault가 있습니다.
- 두 클라우드에 최신 버전의 Az CLI가 설치되어 있습니다.
Az CLI 확장 설치
AzureCloud에서 다음 명령을 사용하여 확장을 설치할 수 있습니다.
az extension add --name acrtransfer
AzureCloud 및 기타 클라우드에서는 공용 스토리지 계정 컨테이너에서 직접 Blob을 설치할 수 있습니다. Blob은 acrtransferext
스토리지 계정, dist
컨테이너, acrtransfer-1.0.0-py2.py3-none-any.wh
Blob에서 호스트됩니다. 사용 중인 클라우드에 따라 스토리지 URI 접미사를 변경해야 할 수 있습니다. 다음은 AzureCloud에 설치됩니다.
az extension add --source https://acrtransferext.blob.core.windows.net/dist/acrtransfer-1.0.0-py2.py3-none-any.whl
acrtransfer Az CLI 확장을 사용하여 ExportPipeline 만들기
acrtransfer Az CLI 확장을 사용하여 AzureCloud 컨테이너 레지스트리에 대한 ExportPipeline 리소스를 만듭니다.
옵션 및 시스템이 할당한 ID가 없는 내보내기 파이프라인을 만듭니다.
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
가능한 모든 옵션과 사용자가 할당한 ID를 사용하여 내보내기 파이프라인을 만듭니다.
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
속성은 선택적 부울 값을 지원합니다. 다음 값을 사용하는 것이 좋습니다.
매개 변수 | 값 |
---|---|
options | OverwriteBlobs - 기존 대상 Blob 덮어쓰기 ContinueOnErrors - 하나의 아티팩트 내보내기가 실패하는 경우 소스 레지스트리에서 나머지 아티팩트를 계속 내보냅니다. |
ExportPipeline ID keyvault에 정책 액세스 권한 부여
사용자가 할당한 ID를 사용하여 파이프라인을 만든 경우 키 볼트에 대해 이 사용자가 할당한 ID에 secret get
정책 액세스 권한을 부여하기만 하면 됩니다.
시스템이 할당한 ID를 사용하여 파이프라인을 만든 경우 먼저 시스템이 파이프라인 리소스에 할당한 principalId를 검색해야 합니다.
다음 명령을 실행하여 파이프라인 리소스를 검색합니다.
az acr export-pipeline show --resource-group $MyRG --registry $MyReg --name $MyPipeline
이 출력에서 principalId
필드의 값을 복사해야 합니다.
그런 다음, 다음 명령을 실행하여 이 보안 주체에게 keyvault에 대한 적절한 secret get
액세스 정책 권한을 부여합니다.
az keyvault set-policy --name $MyKeyvault --secret-permissions get --object-id $MyPrincipalID
acrtransfer Az CLI 확장을 사용하여 ImportPipeline 만들기
acrtransfer Az CLI 확장을 사용하여 대상 컨테이너 레지스트리에 ImportPipeline 리소스를 만듭니다. 기본적으로 연결된 스토리지 계정 컨테이너가 새 아티팩트 Blob을 수신할 때 파이프라인에서 Import PipelineRun을 자동으로 만들 수 있습니다.
다음과 같이 옵션 및 시스템이 할당한 ID가 없는 가져오기 파이프라인을 만듭니다.
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
다음과 같이 가능한 모든 옵션을 사용하고 소스 트리거를 사용하지 않고 사용자가 할당한 ID를 사용하는 가져오기 파이프라인을 만듭니다.
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
속성은 선택적 부울 값을 지원합니다. 다음 값을 사용하는 것이 좋습니다.
매개 변수 | 값 |
---|---|
options | OverwriteTags - 기존 대상 태그 덮어쓰기 DeleteSourceBlobOnSuccess - 대상 레지스트리로 성공적으로 가져온 후 원본 스토리지 Blob 삭제 ContinueOnErrors - 하나의 아티팩트 가져오기가 실패하는 경우 대상 레지스트리에서 나머지 아티팩트를 계속 가져옵니다. |
ImportPipeline ID keyvault에 정책 액세스 권한 부여
사용자가 할당한 ID를 사용하여 파이프라인을 만든 경우 키 볼트에 대해 이 사용자가 할당한 ID에 secret get
정책 액세스 권한을 부여하기만 하면 됩니다.
시스템이 할당한 ID를 사용하여 파이프라인을 만든 경우 먼저 시스템이 파이프라인 리소스에 할당한 principalId를 검색해야 합니다.
다음 명령을 실행하여 파이프라인 리소스를 검색합니다.
az acr import-pipeline show --resource-group $MyRG --registry $MyReg --name $MyPipeline
이 출력에서 principalId
필드의 값을 복사해야 합니다.
그런 다음, 다음 명령을 실행하여 이 보안 주체에게 keyvault에 대한 적절한 secret get
액세스 정책을 부여합니다.
az keyvault set-policy --name $MyKeyvault --secret-permissions get --object-id $MyPrincipalID
acrtransfer Az CLI 확장을 사용하여 내보내기용 PipelineRun 만들기
acrtransfer Az CLI 확장을 사용하여 컨테이너 레지스트리에 대한 PipelineRun 리소스를 만듭니다. 이 리소스는 이전에 만든 ExportPipeline 리소스를 실행하고 컨테이너 레지스트리에서 지정된 아티팩트를 스토리지 계정 컨테이너에 Blob으로 내보냅니다.
다음과 같이 내보내기 파이프라인 실행을 만듭니다.
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
동일한 속성을 사용하여 PipelineRun 리소스를 다시 배포하는 경우 --force-redeploy 플래그도 사용해야 합니다.
아티팩트를 내보내는 데 몇 분 정도 걸릴 수 있습니다. 배포가 성공적으로 완료되면 원본 스토리지 계정의 컨테이너에서 내보낸 Blob을 나열하여 아티팩트 내보내기를 확인합니다. 예를 들어, az storage blob list 명령을 실행합니다.
az storage blob list --account-name $MyStorageAccount --container $MyContainer --output table
도메인 간 Blob 전송
대부분의 사용 사례에서 이제 도메인 간 솔루션 또는 다른 방법을 사용하여 원본 도메인의 스토리지 계정(내보내기 파이프라인과 연결된 스토리지 계정)에서 대상 도메인의 스토리지 계정(가져오기 파이프라인과 연결된 스토리지 계정)으로 Blob을 전송합니다. 이 시점에서 Blob이 가져오기 파이프라인과 연결된 대상 도메인 스토리지 계정에 도착했다고 가정합니다.
ImportPipeline 리소스 트리거
가져오기 파이프라인을 만들 때 --source-trigger-enabled False
매개 변수를 사용하지 않은 경우 Blob이 스토리지 계정 컨테이너에 도착한 후 15분 이내에 파이프라인이 트리거됩니다. 아티팩트를 가져오는 데 몇 분 정도 걸릴 수 있습니다. 가져오기가 성공적으로 완료되면 가져올 리포지토리의 태그를 대상 컨테이너 레지스트리에 나열하여 아티팩트 가져오기를 확인합니다. 예를 들어 az acr repository show-tag를 실행합니다.
az acr repository show-tags --name $MyRegistry --repository $MyRepository
참고 항목
원본 트리거는 지난 60일 이내에 마지막으로 수정된 시간이 있는 Blob만 가져옵니다. 원본 트리거를 사용하여 이전 Blob을 가져오려면 Blob 메타데이터를 추가하거나 수동으로 만든 파이프라인 실행을 사용하여 Blob의 마지막으로 수정된 시간을 새로 고치세요.
ImportPipeline을 만들 때 --source-trigger-enabled False
매개 변수를 사용한 경우 다음 섹션과 같이 PipelineRun을 수동으로 만들어야 합니다.
acrtransfer Az CLI 확장을 사용하여 가져올 PipelineRun 만들기
acrtransfer Az CLI 확장을 사용하여 컨테이너 레지스트리에 대한 PipelineRun 리소스를 만듭니다. 이 리소스는 이전에 만든 ImportPipeline 리소스를 실행하고 스토리지 계정에서 컨테이너 레지스트리로 지정된 Blob을 가져옵니다.
가져오기 파이프라인 실행을 만듭니다.
az acr pipeline-run create \
--resource-group $MyRG \
--registry $MyReg \
--pipeline $MyPipeline \
--name $MyPipelineRun \
--pipeline-type import \
--storage-blob $MyBlob \
--force-redeploy
동일한 속성을 사용하여 PipelineRun 리소스를 다시 배포하는 경우 --force-redeploy 플래그도 사용해야 합니다.
아티팩트를 가져오는 데 몇 분 정도 걸릴 수 있습니다. 가져오기가 성공적으로 완료되면 대상 컨테이너 레지스트리의 리포지토리를 나열하여 아티팩트 가져오기를 확인합니다. 예를 들어 az acr repository show-tag를 실행합니다.
az acr repository show-tags --name $MyRegistry --repository $MyRepository
ACR 전송 리소스 삭제
다음과 같이 ExportPipeline을 삭제합니다.
az acr export-pipeline delete --resource-group $MyRG --registry $MyReg --name $MyPipeline
다음과 같이 ImportPipeline을 삭제합니다.
az acr import-pipeline delete --resource-group $MyRG --registry $MyReg --name $MyPipeline
PipelineRun 리소스를 삭제합니다. 이는 PipelineRun에서 수행한 작업을 되돌리지 않습니다. 이는 PipelineRun의 로그를 삭제하는 것과 같습니다.
az acr pipeline-run delete --resource-group $MyRG --registry $MyReg --name $MyPipelineRun
ACR 전송 문제 해결
문제 해결 지침에 대한 ACR 전송 문제 해결을 확인합니다.
다음 단계
- 네트워크 제한 컨테이너 레지스트리에서 내보내기 파이프라인 생성을 차단하는 방법을 알아보세요.