Transfer ACR dengan Az CLI

Artikel ini menunjukkan cara menggunakan fitur Transfer ACR dengan ekstensi Az CLI acrtransfer.

Menyelesaikan prasyarat

Lengkapi prasyarat yang diuraikan di sini sebelum mencoba tindakan dalam artikel ini. Ini berarti bahwa:

  • Anda sudah memiliki Registri SKU Premium di kedua cloud.
  • Anda memiliki Kontainer Akun Penyimpanan yang ada di kedua cloud.
  • Anda memiliki Keyvault yang sudah ada dengan rahasia yang berisi token SAS yang valid dengan izin yang diperlukan di kedua cloud.
  • Anda memiliki versi terbaru Az CLI yang diinstal di kedua cloud.

Menginstal ekstensi Az CLI

Di AzureCloud, Anda dapat menginstal ekstensi dengan perintah berikut:

az extension add --name acrtransfer

Di AzureCloud dan cloud lainnya, Anda dapat menginstal blob langsung dari kontainer akun penyimpanan publik. Blob di-hosting di akun penyimpanan acrtransferext, kontainer dist, blob acrtransfer-1.0.0-py2.py3-none-any.wh. Anda mungkin harus mengubah akhiran URI penyimpanan tergantung di cloud mana Anda berada. Berikut ini akan diinstal di AzureCloud:

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

Membuat ExportPipeline dengan ekstensi Az CLI acrtransfer

Buat sumber daya ExportPipeline untuk registri kontainer AzureCloud Anda menggunakan ekstensi Az CLI acrtransfer.

Buat alur ekspor tanpa opsi dan identitas yang ditetapkan sistem:

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

Buat alur ekspor dengan semua opsi yang memungkinkan dan identitas yang ditetapkan pengguna:

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

Opsi ekspor

Properti options untuk alur ekspor mendukung nilai boolean opsional. Nilai-nilai berikut direkomendasikan:

Parameter Nilai
opsi OverwriteBlobs - Timpa blob target yang ada
ContinueOnErrors - Lanjutkan ekspor artefak yang tersisa di registri sumber jika satu ekspor artefak gagal.

Memberikan akses kebijakan keyvault identitas ExportPipeline

Jika Anda membuat alur dengan identitas yang ditetapkan pengguna, cukup berikan izin kebijakan akses secret get identitas yang ditetapkan pengguna ini di keyvault.

Jika Anda membuat alur dengan identitas yang ditetapkan sistem, Anda harus terlebih dahulu mengambil principalId yang telah ditetapkan sistem ke sumber daya alur Anda.

Jalankan perintah berikut untuk mengambil sumber daya alur Anda:

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

Dari output ini, Anda akan menyalin nilai di bidang principalId.

Kemudian, Anda akan menjalankan perintah berikut untuk memberikan izin kebijakan akses secret get yang sesuai pada perwakilan ini di keyvault Anda.

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

Membuat ImportPipeline dengan ekstensi Az CLI acrtransfer

Buat sumber daya ImportPipeline di registri kontainer target Anda menggunakan ekstensi Az CLI acrtransfer. Secara default, alur akan diaktifkan untuk membuat PipelineRun Impor secara otomatis saat kontainer akun penyimpanan terlampir menerima blob artefak baru.

Buat alur impor tanpa opsi dan identitas yang ditetapkan sistem:

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

Buat alur impor dengan semua opsi yang mungkin, pemicu sumber yang dinonaktifkan, dan identitas yang ditetapkan pengguna:

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

Opsi impor

Properti options untuk jalur impor mendukung nilai boolean opsional. Nilai-nilai berikut direkomendasikan:

Parameter Nilai
opsi OverwriteTags - Timpa tag target yang ada
DeleteSourceBlobOnSuccess - Hapus blob penyimpanan sumber setelah berhasil mengimpor ke registri target
ContinueOnErrors - Lanjutkan impor artefak yang tersisa di registri target jika satu impor artefak gagal.

Memberikan akses kebijakan keyvault identitas ImportPipeline

Jika Anda membuat alur dengan identitas yang ditetapkan pengguna, cukup berikan izin kebijakan akses secret get identitas yang ditetapkan pengguna ini di keyvault.

Jika Anda membuat alur dengan identitas yang ditetapkan sistem, Anda harus terlebih dahulu mengambil principalId yang telah ditetapkan sistem ke sumber daya alur Anda.

Jalankan perintah berikut untuk mengambil sumber daya alur Anda:

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

Dari output ini, Anda akan menyalin nilai di bidang principalId.

Kemudian, Anda akan menjalankan perintah berikut untuk memberikan kebijakan akses secret get yang sesuai pada perwakilan ini di keyvault Anda.

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

Membuat PipelineRun untuk diekspor dengan ekstensi Az CLI acrtransfer

Buat sumber daya PipelineRun untuk registri kontainer Anda menggunakan ekstensi Az CLI acrtransfer. Sumber daya ini menjalankan sumber daya ExportPipeline yang Anda buat sebelumnya dan mengekspor artefak tertentu dari registri kontainer Anda sebagai blob ke kontainer akun penyimpanan.

Membuat eksekusi alur ekspor:

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

Saat menyebarkan ulang sumber daya PipelineRun dengan properti yang identik, Anda harus menggunakan bendera --force-redeploy.

Perlu beberapa menit untuk mengekspor artefak. Saat penyebaran berhasil diselesaikan, verifikasi ekspor artefak dengan mencantumkan blob yang diekspor dalam kontainer akun penyimpanan sumber. Misalnya, jalankan perintah az storage blob list:

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

Mentransfer blob di seluruh domain

Dalam sebagian besar kasus penggunaan, Anda sekarang akan menggunakan Solusi Lintas Domain atau metode lain untuk mentransfer blob Anda dari akun penyimpanan di domain sumber Anda (akun penyimpanan yang terkait dengan alur ekspor Anda) ke akun penyimpanan di domain target Anda (akun penyimpanan yang terkait dengan alur impor Anda). Pada titik ini, kami akan berasumsi bahwa blob telah tiba di akun penyimpanan domain target yang terkait dengan alur impor Anda.

Memicu sumber daya ImportPipeline

Jika Anda tidak menggunakan parameter --source-trigger-enabled False saat membuat alur impor, alur akan dipicu dalam waktu 15 menit setelah blob tiba di kontainer akun penyimpanan. Diperlukan beberapa menit untuk mengimpor artefak. Saat impor berhasil diselesaikan, verifikasi impor artefak dengan mencantumkan tag pada repositori yang Anda impor di registri kontainer target. Misalnya, jalankan az acr repository show-tags:

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

Catatan

Pemicu Sumber hanya akan mengimpor blob yang memiliki waktu Modifikasi Terakhir dalam 60 hari terakhir. Jika Anda berniat menggunakan Pemicu Sumber untuk mengimpor blob yang lebih lama dari itu, refresh waktu Modifikasi Terakhir blob dengan menambahkan metadata blob ke blob tersebut atau mengimpornya dengan eksekusi alur yang dibuat secara manual.

Jika Anda menggunakan parameter --source-trigger-enabled False saat membuat ImportPipeline, Anda harus membuat PipelineRun secara manual, seperti yang ditunjukkan di bagian berikut.

Membuat PipelineRun untuk diimpor dengan ekstensi Az CLI acrtransfer

Buat sumber daya PipelineRun untuk registri kontainer Anda menggunakan ekstensi Az CLI acrtransfer. Sumber daya ini menjalankan sumber daya ImportPipeline yang Anda buat sebelumnya dan mengimpor blob tertentu dari akun penyimpanan Anda ke registri kontainer Anda.

Membuat eksekusi alur impor:

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

Saat menyebarkan ulang sumber daya PipelineRun dengan properti yang identik, Anda harus menggunakan bendera --force-redeploy.

Diperlukan beberapa menit untuk mengimpor artefak. Saat impor berhasil diselesaikan, verifikasi impor artefak dengan mencantumkan repositori di registri kontainer target. Misalnya, jalankan az acr repository show-tags:

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

Menghapus sumber daya Transfer ACR

Menghapus ExportPipeline:

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

Menghapus ImportPipeline:

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

Hapus sumber daya PipelineRun. Harap diingat bahwa ini tidak membalikkan tindakan yang dilakukan oleh PipelineRun. Ini lebih seperti menghapus log PipelineRun.

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

Pemecahan masalah Transfer ACR

Lihat Pemecahan Masalah Transfer ACR untuk panduan pemecahan masalah.

Langkah berikutnya