2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AzCopyでのストレージコンテナ間の同期をWebJobsで実行する

Last updated at Posted at 2020-09-01

はじめに

ストレージアカウントの地理冗長の方法としてGRS, RA-GRS, GZRS, RA-GZRSなどがあり、ペアリージョン(Japan EastならJapan West)にデータをレプリケーションすることができるが、ペアリージョンではない例えば海外のリージョンなどのストレージにデータを同期したい場合はこれらのオプションでは実現できない。そのためなんらかの別の方法でデータをコピーする必要がある。
image.png
AzCopy V10 にはsyncモードがあり、これを利用して片方向のデータ同期が可能だ。これを定期的に実行するのが良さそうなので今回はこの手法を検討したい。ほかの方法としては例えば Data Factory が考えられる。Data Factoryによる 増分コピーの手法 を使用してデータをコピーすることができるが、こちらの場合はソース側のストレージでのデータ削除には対応できないため、削除が無いような処理の場合には有効である。

このAzCopyだが、便利なコマンドなので定期実行を自動化させたいところだが、このために仮想マシンをわざわざ新しくで作成したくないし、オンプレミス環境での実行もシステムがばらけてなんとなく嫌なので、なにかPaaSを利用して実現したい。オペレーションの自動化のPaaSといえばAzure Automationが挙げられるが、azcopyを実行することができない。App ServiceのWebJobであれば、exeファイルを実行することができるため、これを利用して自動化の仕組みを作れそうだという事で、試したメモを残す。
image.png

AzCopyでコンテナー間の同期を実行する

AzCopyのsyncコマンドはファイル名と最後に変更されたタイムスタンプが比較されてファイルが同期される。--delete-destinationtrueにするとプロンプト無しに存在しなくなったファイルが削除される。何も聞かれずに削除されるようになるので安全をとって 論理的な削除 を有効にしておくのもあり。

こちらのドキュメント の通りにコマンドを実行すればOK。

azcopy sync 'https://<source-storage-account-name>.blob.core.windows.net/<container-name>' 'https://<destination-storage-account-name>.blob.core.windows.net/<container-name>' --recursive --delete-destination=true

今回は SASトークン を使用してアクセスを承認する方法をとる。SASトークンの場合は以下のようになる。

azcopy sync 'https://<source-storage-account-name>.blob.core.windows.net/<container-name><SAS-token>' 'https://<destination-storage-account-name>.blob.core.windows.net/<container-name><SAS-token>' --recursive --delete-destination=true

実際に実行すると以下のような出力が得られる。ここでは1ファイル同期されている。

INFO: Any empty folders will not be processed, because source and/or destination doesn't have full folder support

Job dbd88421-6a26-094d-6397-35632c65572d has started
Log file is located at: /home/hideo/.azcopy/dbd88421-6a26-094d-6397-35632c65572d.log

INFO: azcopy: A newer version 10.6.0 is available to download

100.0 %, 0 Done, 0 Failed, 1 Pending, 1 Total, 2-sec Throughput (Mb/s): 0

Job dbd88421-6a26-094d-6397-35632c65572d Summary
Files Scanned at Source: 3
Files Scanned at Destination: 2
Elapsed Time (Minutes): 0.1001
Number of Copy Transfers for Files: 1
Number of Copy Transfers for Folder Properties: 0
Total Number Of Copy Transfers: 1
Number of Copy Transfers Completed: 1
Number of Copy Transfers Failed: 0
Number of Deletions at Destination: 0
Total Number of Bytes Transferred: 27683
Total Number of Bytes Enumerated: 27683
Final Job Status: Completed

AzCopy syncコマンドをWebJobで定期実行する

WebJobsプラットフォームの準備

WebJobはWeb App, API App, Mobile Appと同様に同じApp Serviceのプラットフォーム上でプログラムやスクリプトを実行する機能になるため、WebJobの利用にApp Serviceに加えた追加コストは発生しない。
Azure App Service で Web ジョブを使用してバックグラウンド タスクを実行する に従ってApp Serviceの環境を準備する。現在のところWebJobsはApp Service on Linuxではサポートされていないため、Windowsでデプロイすること。

バッチファイルの準備

run.cmdというファイル名でAzCopyのsyncコマンドを記述する。
注意事項としては、SASトークンに "%" がしばしば含まれているが、これらは変数解釈されてしまうため、"%%"としてエスケープしておく必要がある。また、ストレージのPATHを囲うのはシングルクォートではなくダブルクォートを使用すること。

azcopy.exe sync "https://<source-storage-account-name>.blob.core.windows.net/<container-name><SAS-token>" "https://<destination-storage-account-name>.blob.core.windows.net/<container-name><SAS-token>" --recursive --delete-destination=true

AzCopyのダウンロード

こちら からAzCopy V10 (Windows 64 ビット)のzipをダウンロードし、Zipを解凍してazcopy.exeファイルを抽出しておく。

WebJobファイルの準備

先に作成したrun.cmdとダウンロードしたazcopy.exeをZip圧縮してWebJobにアップロードするファイルの準備をしておく。

WebJobへのアップロードと設定

App Serviceの管理画面からWebJobsを選択してWebJobの管理画面に遷移する。

+AddをクリックしてWebJobを追加する。File Uploadのところで先ほど作成したZipファイルを指定する。TriggersにはScheduledを選択し、実行時間のNCRONTAB式で記述する。下図の例は30分おきに実行する指定。

NCRONTAB式については こちらのドキュメントを参照。

WebJobの実行と確認

設定が完了すると下図のようにジョブが登録される。

ジョブ名をクリックしてRunを実行すると強制的にトリガーが起動される。うまくいけばStatus欄Completedのようになる。

Logを確認してAzCopyのsyncコマンドが正常に動作していることが確認できればOK。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?