Azure Storage を移動する

2021-05-08
Azure
Blob

こんにちは、開発担当のマユリです。本日は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
}

これで移動が完了です。

公開日: 2021-01-31