Azure Storage を移動する
こんにちは、開発担当のマユリです。本日はAzureストレージアカウントを移動するということで、アカウントごとコピーする方法を紹介します。
下記のドキュメントを参考にしています。
AzCopy v10 を使用して Azure ストレージ アカウント間で BLOB をコピーする | Microsoft Docs
AzCopy
Azure Storageをコピーする場合はAzCopyを使用します。 AzCopyの詳細はこちらを参照ください。
AzCopy v10 を使用して Azure Storage にデータをコピーまたは移動する | Microsoft Docs
指定したBlobをコーピーする場合
azcopy copy 'https://<source-storage-account-name>.blob.core.windows.net/<container-name>/<blob-path><SAS-token>' 'https://<destination-storage-account-name>.blob.core.windows.net/<container-name>/<blob-path>'
指定したDirectoryをコピーする場合
azcopy copy 'https://<source-storage-account-name>.blob.core.windows.net/<container-name>/<directory-path><SAS-token>' 'https://<destination-storage-account-name>.blob.core.windows.net/<container-name>' --recursive
指定したContainerをコピーする場合
azcopy copy 'https://<source-storage-account-name>.blob.core.windows.net/<container-name><SAS-token>' 'https://<destination-storage-account-name>.blob.core.windows.net/<container-name>' --recursive
指定したAccountをコピーする場合
azcopy copy 'https://<source-storage-account-name>.blob.core.windows.net/<SAS-token>' 'https://<destination-storage-account-name>.blob.core.windows.net/' --recursive
AzCopy実装
それでは実際にアカウントのコピーをしてみます。
今回はAzure CLI を使ってコピーをします。コピー先のアカウントにログインした状態でこの作業を行います。
azcopy login
すでにログインしている状態ですがAzCopyでも再度ログインする必要がありますので、下記のコマンドを実行します。
azcopy login
実行後にコードを入力するURLが表示されます、そのリンクをクリックして指定のコードを入力するとログイン完了です。
SAS発行
次はアクセスに必要なSASを発行します。発行の方法はいくつかありますが、今回はAzure Portalから発行します。該当のStorage Accountへ移動するとShared Access Signature というメニューが左側にありますので、必要な設定を行い発行します。
参照先のドキュメントではソース元のSASだけ記載されていますが、今回は別アカウントに転送するためか転送先のSASも付与する必要がありましたのでお気をつけください。
azcopy copy
azcopy copy 'https://{source}.blob.core.windows.net/?sv=2019-12-12&ss=bfqt&srt=sco&sp=rwdlacupx&se=2021-01-31T09:30:59Z&st=2021-01-31T01:30:59Z&spr=https&sig=lYQ8sGxD5XkzjS5zzoGTn%2F6Qr7qskJgAeOtFclKMS2Q%3D' 'https://{destination}.blob.core.windows.net/?sv=2019-12-12&ss=bfqt&srt=sco&sp=rwdlacupx&se=2021-01-31T09:32:17Z&st=2021-01-31T01:32:17Z&spr=https&sig=NRkiCWpOzffVIwLh42hKPksNqbYoMxgoSTQ53NnEkgA%3D' --recursive
コピーができました。
Public Access Level の確認
$rgName = "{resourcename}" $accountName = "{storage accountname}" $storageAccount = Get-AzStorageAccount -ResourceGroupName $rgName -Name $accountName $ctx = $storageAccount.Context Get-AzStorageContainer -Context $ctx | Select Name, PublicAccess
ただ、コピー先のPublic Access Level がprivateになっています。
Public Access Level の更新
ソース元のPublic Access LevelはBLOBでしたので、転送先のContainerのアクセスレベルを変換したいと思います。
$resGroup = "{resourcename}" $accountName = "{storage accountname}" $storageAccount = Get-AzStorageAccount -ResourceGroupName $resGroup -Name $accountName $ctx = $storageAccount.Context $containers = Get-AzStorageContainer -Context $ctx foreach ($c in $containers) { Set-AzStorageContainerAcl -Container $c.Name -Permission Container -Context $ctx }
これで移動が完了です。