azcopyでCentOSからAzure Data Lake Gen2へファイルをアップロードする

以下の記事にて、TPC-Hのデータを作ってみたのですがazcopyでCentOSからファイルをアップロードしたのでその方法を記載します。
[TPC-Hを使ってテスト環境を作成する（Synapse SQLプール）](https://qiita.com/masahiro-yamaguchi/items/7a1b0d185b9a01b63344)

#1.ストレージアカウントと、コンテナの作成
まずはアップロードするストレージアカウントおよびコンテナを作成します。
※すでに存在している場合は、この作成は不要です。

##1-1.Azureポータルでストレージアカウントを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697647/33cf7f49-5925-3bad-bf4a-09dba30f6e12.png)

##1-2.ストレージアカウントの追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697647/11771ce8-9eef-1ce7-cba8-e83ab79d053e.png)

##1-3.基本タブにて必要な情報を追加
今回の例では、`リソースグループ`、`ストレージアカウント名`、`レプリケーション`以外はデフォルトで指定しています。
※ストレージアカウント名は全世界で１つです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697647/3e603986-2e40-cbc9-90c0-60e74a0b041f.png)

##1-4.ネットワークタブにて必要な情報を選択
ネットワークの設定では今回はデフォルトのまま何も変えず作成しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697647/e0f32174-44b7-2c4d-9710-9f08b9c69432.png)


##1-5.データの保護を選択
今回は何も設定していません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697647/20851cda-8820-758a-4995-311e7105ccc9.png)

##1-6.詳細タブにてData Lake Storage Gen2を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697647/9cf274a4-5666-7ec4-0163-75eed76dace6.png)

##1-7.確認および作成にてストレージアカウントを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697647/3484dc84-053f-d158-f78f-f0ebd61254fb.png)

作成ボタンを押下するとストレージアカウントが作成されます。

##1-8.コンテナの作成
ストレージアカウントが作成されたら、作成されたストレージアカウントよりコンテナの作成を行ってください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697647/be6eadc2-29f2-2cea-274d-6fa55804adc0.png)
以下の画面より`+ コンテナー`を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697647/dca80d4e-7c70-a97d-91bd-962e4ab3fd3c.png)
`azcopytest`というコンテナを作成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697647/e2a82405-c8ad-f9b9-4c3f-128cb42f30e5.png)

#2.ストレージアカウントのアクセス制御（IAM）の設定
Blobへのアクセスを行うために、IAMの設定が必要です。また、ここで設定したIAMの情報を利用して、azcopyを行う事になります。
この設定を行わないとazcopy時に`403 This request is not authorized to perform this operation using this permission.`のようなエラーが発生し、azcopyが出来なくなります。

##2-1.先ほど作成したストレージアカウントを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697647/f9bcf8b2-847b-d872-ae30-7938a6b83e99.png)

##2-2.アクセス制御（IAM）からロールの割り当てを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697647/47f84098-d699-1f77-c5b8-a7b9376d027e.png)

役割は`ストレージBLOBデータ共同作成者`等必要な権限を選択し、IAMの割り当てを行うユーザを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697647/556452dd-e446-b43a-fc91-ee2a5980655c.png)



#3.CentOSにてazcopyを導入
まずはwgetにてazcopyをダウンロードします。

```shell
$ wget https://azcopyvnext.azureedge.net/release20200818/azcopy_linux_amd64_10.6.0.tar.gz
```
ダウンロードしたら解凍し、作成されたディレクトリへ移動します。

```shell
$ tar xvfx azcopy_linux_amd64_10.6.0.tar.gz
$ cd azcopy_linux_amd64_10.6.0
```

#4.azcopyにてログインを実施
azcopyにてファイルをアップロードする前に、azcopyにてログインをする必要があります。

##4-1.テナントIDの確認
azcopyでログインする際にテナントIDの入力が必要なので、テナントIDを確認します。
テナントIDはAzure ADから確認することが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697647/1bf33ea1-1cd6-74b1-1c47-5f948df0e7d7.png)

画面遷移後`テナントの情報`から確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697647/0e62376c-ee43-7953-b4b0-e166454d72b6.png)

##4-2.azcopyにてログイン
以下の要領でCentOSからログインを実行します。

```shell
$ ./azcopy login --tenant-id "<テナントID>"
```
実行するとブラウザを開いて、指定のURLよりコードを入れるように求められるので、ブラウザを開いてコードを入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697647/7ff1081d-7b52-de36-c874-f294e2e63151.png)

ブラウザで指定のURLを入力すると以下の画面が出ますのでコードを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697647/15817dd7-9ee0-9f19-da87-25c5744b73a6.png)

ログインが成功すると以下のようにsucceededと出力されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697647/33ef738d-d842-097b-8c8a-069b9dd9808a.png)

#4.azcopyにてBLOBにアップロード
azcopyのcopyコマンドを使用してBlobへアップロードします。

```shell
$ ./azcopy copy "ローカルのファイル名" "https://＜ストレージアカウント名＞.blob.core.windows.net/＜コンテナ名＞"
```

また、複数のファイルをアップロードしたい場合には、`*`などを指定することができます。

```shell
$ ./azcopy copy "ローカルのディレクトリ/*" "https://＜ストレージアカウント名＞.blob.core.windows.net/＜コンテナ名＞"
```

#5.おまけ
アップロードが完了すればAzure Syanpase Analytics SQLプールにPolyBase等を使ってデータをロードすることが可能です。
方法は別の記事に乗せていますので、よろしければご参考までに。
[PolyBaseでSynapse SQLプールにデータを投入してみた](https://qiita.com/masahiro-yamaguchi/items/1a0d3706209b266c5676)