Azure Storage 複数コンテナをコピー

日本DC引っ越しにあたって、複数のコンテナに対して AzCopy いっぱい並べなくても済むようにPowerShell スクリプトを作って転送しています。コンテナのアクセス権も保持。

# ================================================================
# 設定
# ================================================================
# 転送元
$srcacct="転送元ストレージアカウント名"
$srckey="転送元キー"

# 転送先
$destacct="転送先ストレージアカウント名"
$destkey="転送先キー"

# 転送したくないコンテナ名
$nontransfercontainers = "automated-sql-export", "backups", "mydeployments", "vsdeploy", "wad-control-container", "wad-iis-logfiles"

# コマンドラインへのパス
$azure="C:\Program Files (x86)\Microsoft SDKs\Windows Azure\CLI\wbin\azure.cmd"
$azcopy="C:\Program Files (x86)\Microsoft SDKs\Windows Azure\AzCopy\AzCopy.exe"

# ================================================================
# 実行
# ================================================================
$srccontainersjsonstr = & $azure storage container list --json -a $srcacct -k $srckey
$srccontainers = "{ root: " + $srccontainersjsonstr + " }" | ConvertFrom-Json |  Select-Object -ExpandProperty root

$srccontainersjsonstr

$destcontainersjsonstr = & $azure storage container list --json -a $destacct -k $destkey
$destcontainerslist = "{ root: " + $destcontainersjsonstr + " }" | ConvertFrom-Json | Select-Object -ExpandProperty root | Select-Object -ExpandProperty name

foreach ($item in $srccontainers) {
  $targetcontainer = $item.name

  if ($nontransfercontainers.Contains($targetcontainer)) { continue }

  if ($null -ne $destcontainerslist -and $destcontainerslist.Contains($targetcontainer)) {
    # $targetcontainer + " --permission " + $item.publicAccessLevel
    # & $azure storage container set $targetcontainer -a $destacct -k $destkey -p $item.publicAccessLevel
  } else {
    & $azure storage container create $targetcontainer -a $destacct -k $destkey -p $item.publicAccessLevel
    # "CONTAINER is created : " + $targetcontainer
  }

  $srcurl  = "https://" + $srcacct + ".blob.core.windows.net/" + $targetcontainer
  $desturl = "https://" + $destacct + ".blob.core.windows.net/" + $targetcontainer
  # /S : 再帰的
  # /XO : 古いファイルは更新しない
  # /L : 実行しないでリストだけ
  "COPY " + $srcurl + " to " + $desturl
  & $azcopy $srcurl $desturl /Y /S /XO /SourceKey:$srcKey /DestKey:$destkey
}

コンテナ作成のあたりは PowerShell だけで出来る方がスマートなんだろうけど、調べた当初はストレージのキーだけで作る方法が分からなかった。サブスクリプションをまたぐような状況ではストレージアカウントだけで済む方が便利。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。