【Azure】AzureCLIとAzCopyを用いて、ディレクトリ、ファイルをBlobStorageへアップロード 

# 1. はじめに
### 1-1 ご挨拶
初めまして、井村と申します。
現在、クラウドリフト＆シフトのプロジェクトに参画しております。
ローカルのファイルをクラウドストレージにアップロードする機会がありそうなので、
コマンド予習のため、記事にしました。

基本は以下記事を参照しています。
[クイック スタート:Azure CLI を使用して BLOB を作成、ダウンロード、一覧表示する](https://docs.microsoft.com/ja-jp/azure/storage/blobs/storage-quickstart-blobs-cli)

### 1-2 対象読者
- Azureに興味がある
- 少しLinuxを触ったことある

### 1-3 実行環境
Windows端末に仮想化ソフトウェアである「VMware Workstation Player」をインストール。ゲストOSはCentOS7になります。さらにCentOSにCLIである「Azure CLI」、「AzCopy」をインストールします。

|サービス名  |バージョン  |
|---|---|
|VMware Workstation Player  |16.2.3  |
|Windows  |10  |
|CentOS  |7.9.2009(Core)  |
|AzureCLI  |2.37.0  |
|AzCopy  |10.15.0  |

### 1-4 成果物

- ゲストOSに「Azure CLI」、「AzCopy」をインストール
- ゲストOSにアップロード用のディレクトリとファイルを作成
- Azure上に「Azure Blob Storage(Storage Accountのオブジェクトストレージサービス)」を構築
- 「Azure Blob Storage」コンテナは検証のため、AzureCLI用、AzCopy用それぞれ作成

※事前にAzureアカウントは作成済みです。

![成果物.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/690d5640-b342-6a1a-e4b4-478031aa38f6.png)

# 2. 準備
### 2-1 「CentOS７」のダウンロード
お住いの地域から近い[ダウンロードリンク](http://isoredirect.centos.org/centos/7/isos/x86_64/)を選択し、「CentOS-7-x86_64-DVD-2009.iso」をダウンロードします。

### 2-2 「VMware Workstation Player」のダウンロードおよびセットアップ
[こちらリンク](https://www.vmware.com/jp/products/workdstation-player/workstation-player-evaluation.html)からインストーラをダウンロードします。少し補足を入れます。

簡易インストールは実施しないので「後でOSをインストール」を選びます。

|![WS000001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/5d63749f-8697-7e5f-caec-076d91f57bbe.jpeg)|
|:--|

一通り設定後、「CD/DVD(IDE)」からISOファイル選択できます。

|![WS000002.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/5ac26da0-5e03-195b-5162-e2cd329bc439.jpeg)|
|:--|

### 2-3 「CentOS７」のインストールおよびセットアップ
CentOSが起動するまでの流れはスキップします。以下が補足になります。
- ソフトウェアは「最小限のインストール」
- 「ネットワークとホスト」の「全般」タブで「この接続が利用可能になったときは自動的に接続する」にチェック入れる
- 「ネットワークとホスト」の「IPv6のセッティング」タブで「方法」は「無視する」を選択
- 「ユーザーの作成」は「takaki」になります。そのため、homeディレクトリ直下にはtakakiディレクトリがいます。

CentOSにログイン後、ipアドレスを確認してから「VMware Workstation Player」から「Tera Term」に乗り換えます。
※自分が使いやすいからになります。お好みで！

```bash:VMware Workstation Player
# IPアドレス確認
ip -4 a
```

ここからは「Tera Term」をもちいてCentOS上で作業実施します。以下コマンドを実行します。

```bash:Tera Term
# yumパッケージのアップデート
yum -y update

# dnfコマンドのインストール（AzureCLIインストール時に必要となる）
yum isntall -y dnf

```

### 2-4 「AzCopy」のインストール
以下に手順を記載します。
- [こちら](https://docs.microsoft.com/ja-jp/azure/storage/common/storage-use-azcopy-v10)から最新のAzCopy実行ファイルをダウンロードします。今回は「Linux x86-64 (tar)」をWindows端末にダウンロードします。
- 「Tera Term」の「SSH SCP」機能を用いてCentOSに実行ファイルをアップロードします。
- 実行ファイルは圧縮されているため、解凍します。

```
# 解凍コマンド（圧縮ファイル）
tar -zxvf azcopy_linux_amd64_10.15.0.tar.gz

```

解凍後は説明書と実行ファイルのみでシンプルです。

|![解凍.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/676995e4-7e00-9909-0444-bdf9c271a3b1.png)|
|:--|

### 2-5 「AzureCLI」のインストール
[こちら](https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli-linux?pivots=dnf)のコマンドを実行するだけですので省略。

### 2-6 「Blob Storage」の構築
CentOSに「AzureCLI」をインストールしたのでCentOSから「Azure」にログインして作業を実施します。

```
# Azureにログイン
az login

# デフォルトリージョンを東日本に設定
az configure --defaults location=japaneast

# 変数
MyResourceGroup=azcopy-rg              # リソースグループ名
MyStorageAccount=azcopyst20220626      # ストレージアカウント名
MyBlobStorageAzCpy=azcopy-blob-storage # AzCopy用blobストレージ名
MyBlobStorageAzCLI=azcli-blob-storage  # AzCLI用blobストレージ名

# リソースグループ作成
az group create -n $MyResourceGroup

# ストレージアカウント作成(種類：Standard 汎用v2,冗長構成：ローカル冗長)
az storage account create --name $MyStorageAccount --resource-group $MyResourceGroup --sku Standard_LRS --kind StorageV2

# ストレージBlob共同作成者ロールを付与するユーザーの確認
az ad user list | grep "userPrincipalName"

# ストレージ アカウントの Azure Resource Manager リソース IDの取得
az storage account show --name $MyStorageAccount  --resource-group $MyResourceGroup --query id --output tsv

# ストレージBlob共同作成者ロールの付与
# 付与するユーザーは「 --assignee」、ストレージ アカウントの Azure Resource Manager リソース IDは「--scope」の引数になります。
az role assignment create --role "Storage Blob Data Contributor" --assignee @- --scope "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>"

# Blobストレージの作成（検証用としてAzCopy用、AzCLI用それぞれ作成）
az storage container create --account-name  $MyStorageAccount --name $MyBlobStorageAzCpy --auth-mode login
az storage container create --account-name  $MyStorageAccount --name $MyBlobStorageAzCLI --auth-mode login

```

補足として[こちら](https://docs.microsoft.com/ja-jp/azure/storage/blobs/storage-quickstart-blobs-cli)でも記載がある通り、 コンテナーを作成する前に、「ストレージ BLOB データ共同作成者ロール」を自分に割り当てます。自分がアカウント オーナーである場合でも、ストレージ アカウントに対してデータ操作を実行するための明示的なアクセス許可が必要になるためです。

### 2-7 検証用ディレクトリ、ファイル作成
「/home/takaki/」ディレクトリ配下にtouch、mkdirコマンドを使用して以下ディレクトリ、ファイルを作成しました。
「work」ディレクトリ配下に「a.txt」ファイル、「test」ディレクトリがあります。「test」ディレクトリ配下に「b.txt」ファイル、「c.txt」ファイルがあります。
AzCopyコマンド、AzCLIコマンドそれぞれで「a.txt」ファイルの転送、「test」ディレクトリの転送を実施します。

![成果物_2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/43665f0c-50da-061b-af24-efa4c9b9f583.png)

# 3. 検証
それでは検証を実施します。変数は引き続き利用します。

### 3-1 「AzureCLI」でファイルをアップロード

```
# workディレクトリへ移動
cd work/

# 「azcli-blob-storage」コンテナに「a.txt」ファイルをアップロード
az storage blob upload --account-name  $MyStorageAccount --container-name $MyBlobStorageAzCLI --name a.txt  --file a.txt --auth-mode login

```
### 3-2 「AzureCLI」でディレクトリをアップロード

```
# workディレクトリへ移動
cd work/

# 「azcli-blob-storage」コンテナに「test」ディレクトリをアップロード
az storage blob directory upload --container $MyBlobStorageAzCLI --account-name  $MyStorageAccount --destination-path  "test" --source "/home/takaki/work/test/*" --recursive

```

コマンドについてディレクトリはAzure Blobコンテナに「test」フォルダを作成し、CentOS上の「test」フォルダの中身をコピーするようです。
結果は以下になります。

|![a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/bef51df9-5816-c512-7bfb-4ef29ce4cc91.png)|
|:--|

|![test.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/c62e3329-448c-d3e5-dc1d-2dfcc7de8834.png)|
|:--|

### 3-3 「AzCopy」でファイルをアップロード

```
# 「AzCopy実行ファイル」ディレクトリへ移動
cd azcopy_linux_amd64_10.15.0

# 「AzCopy」コマンドでAzureにログイン
# 「azcopy-blob-storage」コンテナに「a.txt」ファイルをアップロード
./azcopy login
./azcopy copy '/home/takaki/work/a.txt' 'https://azcopyst20220626.blob.core.windows.net/azcopy-blob-storage/a.txt'

```

### 3-4 「AzCopy」でディレクトリをアップロード

```
#「AzCopy実行ファイル」ディレクトリへ移動
cd azcopy_linux_amd64_10.15.0

# 「AzCopy」コマンドでAzureにログイン
# 「azcopy-blob-storage」コンテナに「test」ディレクトリをアップロード
./azcopy login
./azcopy copy '/home/takaki/work/test' 'https://azcopyst20220626.blob.core.windows.net/azcopy-blob-storage/' --recursive

```

コマンドについてディレクトリはAzure BlobコンテナにCentOS上の「test」フォルダを直接コピーするようです。
結果は以下になります。

|![a_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/c5cedbf1-7466-4224-1179-13c6b6c18426.png)|
|:--|

|![test_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1989465/59b41184-219c-3f7f-56e2-1be4c1e2e010.png)|
|:--|

参考にディレクトリをコピーした際の成功ログは以下になります。

```
100.0 %, 2 Done, 0 Failed, 0 Pending, 0 Skipped, 2 Total,

Job 75466a81-e3ec-b441-5c13-c407cbbf417b summary
Elapsed Time (Minutes): 0.0337
Number of File Transfers: 2
Number of Folder Property Transfers: 0
Total Number of Transfers: 2
Number of Transfers Completed: 2
Number of Transfers Failed: 0
Number of Transfers Skipped: 0
TotalBytesTransferred: 0
Final Job Status: Completed

```

# 4. おわりに
本記事を最後まで読んで頂きましてありがとうございます。
久しぶりに「VMware Workstation Player」を使って、楽しかったです。
Linuxのコマンド勉強のため、よく利用していました。
LPIC101＆102の資格期限が失効していたので、LinuC101＆102を受験しようか検討中。。

# 5. 参考記事
-  [クイック スタート:Azure CLI を使用して BLOB を作成、ダウンロード、一覧表示する](https://docs.microsoft.com/ja-jp/azure/storage/blobs/storage-quickstart-blobs-cli)

-  [CentOS7のisoファイルのダウンロードリンク](http://isoredirect.centos.org/centos/7/isos/x86_64/)

-  [VMware Workstation Playerのダウンロード](https://www.vmware.com/jp/products/workstation-player/workstation-player-evaluation.html)

-  [AzCopy実行ファイルのダウンロード](https://docs.microsoft.com/ja-jp/azure/storage/common/storage-use-azcopy-v10)

-  [Azure CLIのインストール](https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli-linux?pivots=dnf)

-  [az storage blob](https://docs.microsoft.com/ja-jp/cli/azure/storage/blob?view=azure-cli-latest)

-  [az storage blob directory](https://docs.microsoft.com/ja-jp/cli/azure/storage/blob/directory?view=azure-cli-latest#az-storage-blob-directory-upload)

-  [azcopy copy](https://docs.microsoft.com/ja-jp/azure/storage/common/storage-ref-azcopy-copy)

-  [AzCopy を使用して Azure BLOB ストレージにファイルをアップロードする](https://docs.microsoft.com/ja-jp/azure/storage/common/storage-use-azcopy-blobs-upload)