Share via


ARM 템플릿을 사용하여 ACR 전송

필수 조건 완료

이 문서의 작업을 시도하기 전에 여기에 설명된 필수 구성 요소를 완료하세요. 이는 다음을 의미합니다.

  • 두 클라우드에 기존 Premium SKU 레지스트리가 있습니다.
  • 두 클라우드에 기존 스토리지 계정 컨테이너가 있습니다.
  • 두 클라우드에 필요한 권한이 있는 유효한 SAS 토큰을 포함하는 비밀이 있는 기존 Keyvault가 있습니다.
  • 두 클라우드에 최신 버전의 Az CLI가 설치되어 있습니다.

Important

ACR Transfer는 기술 제한으로 인해 계층 크기가 8GB로 제한되는 아티팩트를 지원합니다.

Az CLI 확장을 사용하는 것이 좋습니다.

대부분의 비정규화 사용 사례의 경우 가능한 경우 Az CLI 확장을 사용하는 것이 좋습니다. 여기에서 Az CLI 확장에 대한 설명서를 볼 수 있습니다.

Resource Manager로 ExportPipeline 만들기

Azure Resource Manager 템플릿 배포를 사용하여 원본 컨테이너 레지스트리에 대한 ExportPipeline 리소스를 만듭니다.

ExportPipeline Resource Manager 템플릿 파일을 로컬 폴더에 복사합니다.

파일에 azuredeploy.parameters.json다음 매개 변수 값을 입력합니다.

매개 변수
registryName 원본 컨테이너 레지스트리의 이름입니다.
exportPipelineName 내보내기 파이프라인에 대해 선택하는 이름입니다.
targetUri 원본 환경(내보내기 파이프라인의 대상)에 있는 스토리지 컨테이너의 URI입니다.
예: https://sourcestorage.blob.core.windows.net/transfer
keyVaultName 원본 키 자격 증명 모음의 이름
sasTokenSecretName 원본 키 자격 증명 모음의 SAS 토큰 비밀 이름
예: acrexportsas

내보내기 옵션

내보내기 파이프라인에 대한 options 속성은 선택적 부울 값을 지원합니다. 다음 값을 사용하는 것이 좋습니다.

매개 변수
options OverwriteBlobs - 기존 대상 Blob 덮어쓰기
ContinueOnErrors - 아티팩트 내보내기가 실패하는 경우 원본 레지스트리에서 다시 기본 아티팩트 내보내기를 계속합니다.

리소스 만들기

다음 예제와 같이 az deployment group create를 실행하여 exportpipeline이라는 리소스를 만듭니다. 기본적으로 첫 번째 옵션을 사용하여 예제 템플릿은 ExportPipeline 리소스에서 시스템 할당 ID를 사용하도록 설정합니다.

두 번째 옵션을 사용하여 리소스에 사용자 할당 ID를 제공할 수 있습니다. (사용자 할당 ID 생성은 표시되지 않음)

두 옵션 중 하나를 사용하여 템플릿은 내보내기 키 자격 증명 모음의 SAS 토큰에 액세스하도록 ID를 구성합니다.

옵션 1: 리소스 만들기 및 시스템 할당 ID 사용

az deployment group create \
  --resource-group $SOURCE_RG \
  --template-file azuredeploy.json \
  --name exportPipeline \
  --parameters azuredeploy.parameters.json

옵션 2: 리소스 만들기 및 사용자 할당 ID 제공

이 명령에서 사용자 할당 ID의 리소스 ID를 추가 매개 변수로 제공합니다.

az deployment group create \
  --resource-group $SOURCE_RG \
  --template-file azuredeploy.json \
  --name exportPipeline \
  --parameters azuredeploy.parameters.json \
  --parameters userAssignedIdentity="/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myUserAssignedIdentity"

명령 출력에서 파이프라인의 리소스 ID(id)를 기록해 둡니다. az deployment group show를 실행하여 나중에 사용할 수 있는 환경 변수에 이 값을 저장할 수 있습니다. 예시:

EXPORT_RES_ID=$(az deployment group show \
  --resource-group $SOURCE_RG \
  --name exportPipeline \
  --query 'properties.outputResources[1].id' \
  --output tsv)

Resource Manager를 사용하여 ImportPipeline 만들기

Azure Resource Manager 템플릿 배포를 사용하여 대상 컨테이너 레지스트리에 ImportPipeline 리소스를 만듭니다. 기본적으로 파이프라인은 대상 환경의 스토리지 계정에 아티팩트 Blob이 있는 경우 자동으로 가져올 수 있습니다.

ImportPipeline Resource Manager 템플릿 파일을 로컬 폴더에 복사합니다.

파일에 azuredeploy.parameters.json다음 매개 변수 값을 입력합니다.

매개 변수
registryName 대상 컨테이너 레지스트리의 이름
importPipelineName 가져오기 파이프라인에 대해 선택한 이름
sourceUri 대상 환경(가져오기 파이프라인의 원본)에 있는 스토리지 컨테이너의 URI입니다.
예: https://targetstorage.blob.core.windows.net/transfer
keyVaultName 대상 Key Vault의 이름
sasTokenSecretName 대상 키 자격 증명 모음의 SAS 토큰 비밀 이름
예: acr importsas

가져오기 옵션

가져오기 파이프라인에 대한 options 속성은 선택적 부울 값을 지원합니다. 다음 값을 사용하는 것이 좋습니다.

매개 변수
options OverwriteTags - 기존 대상 태그 덮어쓰기
DeleteSourceBlobOnSuccess - 대상 레지스트리로 성공적으로 가져온 후 원본 스토리지 Blob 삭제
ContinueOnErrors - 하나의 아티팩트 가져오기가 실패하는 경우 대상 레지스트리에서 나머지 아티팩트를 계속 가져옵니다.

리소스 만들기

다음 예제와 같이 az deployment group create를 실행하여 importPipeline이라는 리소스를 만듭니다. 기본적으로 첫 번째 옵션을 사용하여 예제 템플릿은 ImportPipeline 리소스에서 시스템 할당 ID를 사용하도록 설정합니다.

두 번째 옵션을 사용하여 리소스에 사용자 할당 ID를 제공할 수 있습니다. (사용자 할당 ID 생성은 표시되지 않음)

두 옵션 중 하나를 사용하여 템플릿은 가져오기 키 자격 증명 모음의 SAS 토큰에 액세스하도록 ID를 구성합니다.

옵션 1: 리소스 만들기 및 시스템 할당 ID 사용

az deployment group create \
  --resource-group $TARGET_RG \
  --template-file azuredeploy.json \
  --name importPipeline \
  --parameters azuredeploy.parameters.json

옵션 2: 리소스 만들기 및 사용자 할당 ID 제공

이 명령에서 사용자 할당 ID의 리소스 ID를 추가 매개 변수로 제공합니다.

az deployment group create \
  --resource-group $TARGET_RG \
  --template-file azuredeploy.json \
  --name importPipeline \
  --parameters azuredeploy.parameters.json \
  --parameters userAssignedIdentity="/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myUserAssignedIdentity"

가져오기를 수동으로 실행하려는 경우 파이프라인의 리소스 ID(id)를 기록해 둡니다. az deployment group show 명령을 실행하여 나중에 사용할 수 있는 환경 변수에 이 값을 저장할 수 있습니다. 예시:

IMPORT_RES_ID=$(az deployment group show \
  --resource-group $TARGET_RG \
  --name importPipeline \
  --query 'properties.outputResources[1].id' \
  --output tsv)

Resource Manager를 사용하여 내보내기용 PipelineRun 만들기

Azure Resource Manager 템플릿 배포를 사용하여 원본 컨테이너 레지스트리에 대한 PipelineRun 리소스를 만듭니다. 이 리소스는 이전에 만든 ExportPipeline 리소스를 실행하고 컨테이너 레지스트리에서 지정된 아티팩트를 Blob으로 원본 스토리지 계정으로 내보냅니다.

PipelineRun Resource Manager 템플릿 파일을 로컬 폴더에 복사합니다.

파일에 azuredeploy.parameters.json다음 매개 변수 값을 입력합니다.

매개 변수
registryName 원본 컨테이너 레지스트리의 이름입니다.
pipelineRunName 실행에 대해 선택한 이름
pipelineResourceId 내보내기 파이프라인의 리소스 ID입니다.
예: /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.ContainerRegistry/registries/<sourceRegistryName>/exportPipelines/myExportPipeline
targetName myblob과 같은 원본 스토리지 계정으로 내보낸 아티팩트 Blob에 대해 선택한 이름
artifacts 전송할 원본 아티팩트 배열(태그 또는 매니페스트 다이제스트)
예: [samples/hello-world:v1", "samples/nginx:v1" , "myrepository@sha256:0a2e01852872..."]

동일한 속성을 사용하여 PipelineRun 리소스를 다시 배포하는 경우 Forceupdatetag 속성도 사용해야 합니다.

az deployment group create를 실행하여 PipelineRun 리소스를 만듭니다. 다음 예제에서는 배포 exportPipelineRun의 이름을 지정합니다.

az deployment group create \
  --resource-group $SOURCE_RG \
  --template-file azuredeploy.json \
  --name exportPipelineRun \
  --parameters azuredeploy.parameters.json

나중에 사용하려면 파이프라인 실행의 리소스 ID를 환경 변수에 저장합니다.

EXPORT_RUN_RES_ID=$(az deployment group show \
  --resource-group $SOURCE_RG \
  --name exportPipelineRun \
  --query 'properties.outputResources[0].id' \
  --output tsv)

아티팩트가 내보내는 데 몇 분 정도 걸릴 수 있습니다. 배포가 성공적으로 완료되면 원본 스토리지 계정의 전송 컨테이너에 내보낸 Blob을 나열하여 아티팩트 내보내기를 확인합니다. 예를 들어 az storage blob list 명령을 실행합니다.

az storage blob list \
  --account-name $SOURCE_SA \
  --container transfer \
  --output table

Blob 전송(선택 사항)

AzCopy 도구 또는 다른 메서드를 사용하여 원본 스토리지 계정에서 대상 스토리지 계정으로 Blob 데이터를 전송합니다.

예를 들어 다음 azcopy copy 명령은 원본 계정의 전송 컨테이너에서 대상 계정의 전송 컨테이너로 myblob을 복사합니다. Blob이 대상 계정에 있으면 덮어씁니다. 인증은 원본 및 대상 컨테이너에 대한 적절한 권한이 있는 SAS 토큰을 사용합니다. (토큰을 만드는 단계는 표시되지 않습니다.)

azcopy copy \
  'https://<source-storage-account-name>.blob.core.windows.net/transfer/myblob'$SOURCE_SAS \
  'https://<destination-storage-account-name>.blob.core.windows.net/transfer/myblob'$TARGET_SAS \
  --overwrite true

ImportPipeline 리소스 트리거

ImportPipeline(기본값)의 매개 변수를 사용하도록 설정한 sourceTriggerStatus 경우 Blob이 대상 스토리지 계정에 복사된 후 파이프라인이 트리거됩니다. 아티팩트를 가져오는 데 몇 분 정도 걸릴 수 있습니다. 가져오기가 성공적으로 완료되면 대상 컨테이너 레지스트리에 리포지토리를 나열하여 아티팩트 가져오기를 확인합니다. 예를 들어 az acr 리포지토리 목록을 실행합니다.

az acr repository list --name <target-registry-name>

참고 항목

원본 트리거는 지난 60일 이내에 마지막으로 수정된 시간이 있는 Blob만 가져옵니다. 원본 트리거를 사용하여 이전 Blob을 가져오려면 Blob 메타데이터를 추가하거나 수동으로 만든 파이프라인 실행을 사용하여 Blob의 마지막으로 수정된 시간을 새로 고치세요.

가져오기 파이프라인의 매개 변수를 sourceTriggerStatus 사용하도록 설정하지 않은 경우 다음 섹션과 같이 ImportPipeline 리소스를 수동으로 실행합니다.

Resource Manager를 사용하여 가져오기를 위한 PipelineRun 만들기(선택 사항)

PipelineRun 리소스를 사용하여 대상 컨테이너 레지스트리로 아티팩트 가져오기를 위해 ImportPipeline을 트리거할 수도 있습니다.

PipelineRun Resource Manager 템플릿 파일을 로컬 폴더에 복사합니다.

파일에 azuredeploy.parameters.json다음 매개 변수 값을 입력합니다.

매개 변수
registryName 대상 컨테이너 레지스트리의 이름
pipelineRunName 실행에 대해 선택한 이름
pipelineResourceId 가져오기 파이프라인의 리소스 ID입니다.
예: /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.ContainerRegistry/registries/<sourceRegistryName>/importPipelines/myImportPipeline
sourceName 스토리지 계정에서 내보낸 아티팩트(예: myblob)에 대한 기존 Blob의 이름

동일한 속성을 사용하여 PipelineRun 리소스를 다시 배포하는 경우 Forceupdatetag 속성도 사용해야 합니다.

az deployment group create를 실행하여 리소스를 실행합니다.

az deployment group create \
  --resource-group $TARGET_RG \
  --name importPipelineRun \
  --template-file azuredeploy.json \
  --parameters azuredeploy.parameters.json

나중에 사용하려면 파이프라인 실행의 리소스 ID를 환경 변수에 저장합니다.

IMPORT_RUN_RES_ID=$(az deployment group show \
  --resource-group $TARGET_RG \
  --name importPipelineRun \
  --query 'properties.outputResources[0].id' \
  --output tsv)

배포가 성공적으로 완료되면 대상 컨테이너 레지스트리의 리포지토리를 나열하여 아티팩트 가져오기를 확인합니다. 예를 들어 az acr 리포지토리 목록을 실행합니다.

az acr repository list --name <target-registry-name>

PipelineRun 리소스 다시 배포

동일한 속성을 사용하여 PipelineRun 리소스를 다시 배포하는 경우 forceUpdateTag 속성을 활용해야 합니다. 이 속성은 구성이 변경되지 않은 경우에도 PipelineRun 리소스를 다시 만들어야 했음을 나타냅니다. PipelineRun 리소스를 다시 배포할 때마다 forceUpdateTag가 다른지 확인합니다. 아래 예제에서는 내보내기용 PipelineRun을 다시 만듭니다. 현재 datetime은 forceUpdateTag를 설정하는 데 사용되므로 이 속성이 항상 고유한지 확인합니다.

CURRENT_DATETIME=`date +"%Y-%m-%d:%T"`
az deployment group create \
  --resource-group $SOURCE_RG \
  --template-file azuredeploy.json \
  --name exportPipelineRun \
  --parameters azuredeploy.parameters.json \
  --parameters forceUpdateTag=$CURRENT_DATETIME

파이프라인 리소스 삭제

다음 명령 예제에서는 az resource delete를 사용하여 이 문서에서 만든 파이프라인 리소스를 삭제합니다. 리소스 ID는 이전에 환경 변수에 저장되었습니다.

# Delete export resources
az resource delete \
--resource-group $SOURCE_RG \
--ids $EXPORT_RES_ID $EXPORT_RUN_RES_ID \
--api-version 2019-12-01-preview

# Delete import resources
az resource delete \
--resource-group $TARGET_RG \
--ids $IMPORT_RES_ID $IMPORT_RUN_RES_ID \
--api-version 2019-12-01-preview

ACR 전송 문제 해결

문제 해결 지침에 대한 ACR 전송 문제 해결을 확인합니다.

다음 단계