[Talend/Azure] AzureミリしらスタートからTalend→Azureに接続してみた。

# はじめに

**Hello World!!**

前回記事から結構間が空いてしまいましたが、特に何事もなく生きています。
さて、「久々だし何を書こう」と思って、あれこれ振り返ってみたんですけど、直近やっていたことが
* AWS Transfer Familyを利用して、Amazon S3のバケットをSFTPサーバのように利用する
* AWS Lambdaでコードを書いて実行する
* Azure Storageの初歩の初歩の初歩 (Azure Blob Storageの作成、Talend Studioからの接続など)

で、記事の題材に出来そうなものがなく、頭を抱えていました。
ただ、AWSについてのナレッジは (主に自分の中に) 多少あれど、Azureのナレッジはほとんどなく、残しておかないと忘れてしまいそうなので、今回は
**TalendジョブからAzure Blob Storageに接続・操作するコンポーネント**
について、備忘録も兼ねて記載することにしました。

なお、自身が執筆したQiitaの記事は社内のメンバーにも共有することが多いのですが、弊社はAWSの知識を持っているメンバーが多いので、AWS有識者に伝わりやすいよう、AWS S3を利用する場合との対比も多めに記載しました。

# "Azure Blob Storage"に関して

筆者はAzureガチ初心者なので、「そもそも"Blob"って何？」のレベルからスタートしました。ちなみに"Blob"は、"Binary Large Object"のことで、別にAzureに限った用語ではないようです。
実際に軽く触ってみた感触としては、「AWSのS3とほぼ同等のサービス」という印象でした。
AzureのコンテナーがAmazon S3のバケットに相当し、このコンテナーの配下にディレクトリやファイルを配置します。S3との大きな差異は
**論理削除の概念があり、ファイルやディレクトリを削除しても、一定期間内であれば復元ができること**
でしょうか。
数時間触っただけなので、現時点ではこの程度の理解です。
今回はTalendとの連携のために最低限の設定をしただけなので、詳細は追って学習していこうと思います。

**公式マニュアル**

https://learn.microsoft.com/ja-jp/azure/storage/blobs/storage-blobs-introduction

# Talendからの接続
S3接続用コンポーネント群 (tS3～) が存在するのと同様に、Azure接続用コンポーネント群も存在するようです (ただし、利用する場合は機能マネージャーから導入する必要があります)。
今回使いそうなのはこのあたりです。

![pic01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2646113/d7629787-332d-406f-92d9-d766affe2a60.png)

では次に、実際に
* [tAzureStorageConnection](#tazurestorageconnection)
* [tAzureStorageList](#tazurestoragelist)
* [tAzureStorageGet](#tazurestorageget)
* [tAzureStoragePut](#tazurestorageput)
* [tAzureStorageDelete](#tazurestoragedelete)

のコンポーネントを見てみます。

## tAzureStorageConnection

S3接続用コンポーネント群における"tS3Connection"と同質のコンポーネントで、接続確保のためのコンポーネントです。
"tS3Connection"は、接続するIAMユーザに"s3:ListAllMyBuckets"のアクションが許可されていない場合失敗しますが、こちらはドキュメントに特筆事項がなく、そういった制約事項はないようです。
コンポーネントの設定画面はこんな感じです。

![pic02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2646113/69c9fe5a-c969-41c0-a935-cae159ebd82d.png)

* プロパティタイプ : "組み込み" or "リポジトリー"
* アカウント名 : Azure Blob Storageのストレージアカウントを設定
* Authentication Type : "Basic" or "Azure Active Directory" or "Managed identities" ※今回は **"Basic"** を設定
* Region : "Azure Global" or "Azure China" or "Azure Germany"or "Azure Government" or "Custom" ※今回は **"Azure Global"** を設定
* アカウントキー : ストレージアカウントで発行されたアクセスキーを設定
* プロトコル : "HTTP" or "HTTPS" ※よほどのことがなければ **"HTTPS"** でよいと思われます
* Azure Shared Access Signatureを使用 : ※今回は使用しない

**公式ドキュメント**

https://help.qlik.com/talend/ja-JP/components/8.0/azure-storage-blob/tazurestorageconnection

## tAzureStorageList

S3接続用コンポーネント群における"tS3List"と同質のコンポーネントで、Blobを検索するためのコンポーネントです。
"tS3List"とは異なり、こちらは結果をrowで出力します。このため、出力を他のコンポーネントに接続する際は若干の注意が必要。
余談ですが、(おそらく"container"の訳の違いから来ているのでしょうが) コンテナー (S3のバケットに相当) の呼び方がTalend側は「コンテナ」、AzureのGUI上は「コンテナー」と差異があり、すごく違和感がありました。
それはさておき、コンポーネントの設定画面はこんな感じです。

![pic03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2646113/59b40c31-7f31-48e5-ba9e-c748ed222ec4.png)

* 接続コンポーネント : "Use this Compornent" or 配置済みの"tAzureStorageConnection"コンポーネント ※"Use this Compornent"を利用する場合、[tAzureStorageConnection](#tazurestorageconnection)と同じ設定が必要になるため、基本的には **配置済みの"tAzureStorageConnection"コンポーネント** を利用
* コンテナ名 : Azure Blob Storageのコンテナー名を設定
* プレフィックス : 検索したいディレクトリ名を設定 この辺はAWSのプレフィックスと同様
* サブディレクトリを含める : サブディレクトリ配下も検索したい場合はチェックを入れる
* スキーマ : "組み込み" or "リポジトリー"

基本的には「接続コンポーネント」、「コンテナ名」、「プレフィックス」を設定すればOKです。

**公式ドキュメント**

https://help.qlik.com/talend/ja-JP/components/8.0/azure-storage-blob/tazurestoragelist

## tAzureStorageGet

S3接続用コンポーネント群における"tS3Get"と同質のコンポーネントで、名前の通りBlobをGetするためのコンポーネントです。
"tS3Get"と異なり、フォルダ単位でGetを行うことも可能なようです。
コンポーネントの設定画面はこんな感じです。

![pic04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2646113/44a09cc4-1beb-4607-82e5-2d8f8ff1502a.png)

* 接続コンポーネント : "Use this Compornent" or 配置済みの"tAzureStorageConnection"コンポーネント ※"Use this Compornent"を利用する場合、[tAzureStorageConnection](#tazurestorageconnection)と同じ設定が必要になるため、基本的には **配置済みの"tAzureStorageConnection"コンポーネント** を利用
* コンテナ名 : Azure Blob Storageのコンテナー名を設定
* ローカルフォルダー : Getしたファイルを保存するローカルフォルダのパスを指定
* プレフックス : Getしたいディレクトリ名、ファイル名を設定
* サブディレクトリを含める : サブディレクトリ配下もGetしたい場合はチェックを入れる
* 親ディレクトリの作成 : チェックを入れると、ローカルフォルダにディレクトリを作成してくれる (チェックを入れないと、ディレクトリがない場合にエラーとなるケースがあるのでチェック入れることを推奨)
* エラー発生時に強制終了 : チェックした場合、このコンポーネントでエラーが発生した際に、ジョブを強制終了する

※「keep remote dir structure」についてはドキュメントに記載がなく、チェック入れる/入れないでの差異がよくわかりませんでした。

基本的には
* 「コンテナ名」、「ローカルフォルダー」、「Azureストレージフォルダー」 : 指定
* 「サブディレクトリを含める」 : 用途に応じて
* 「親ディレクトリの作成」 : チェックを入れる
* 「エラー発生時に強制終了」 : チェックを入れる

で設定しておけば問題ないかと思います。

**公式ドキュメント**

https://help.qlik.com/talend/ja-JP/components/8.0/azure-storage-blob/tazurestorageget

## tAzureStoragePut

S3接続用コンポーネント群における"tS3Put"と同質のコンポーネントで、名前の通りBlobにオブジェクトをPutするためのコンポーネントです。
こちらですが、"tS3Put"と異なり、フォルダ・ディレクトリ単位でのPutとなるようです。
コンポーネントの設定画面はこんな感じです。

![pic05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2646113/ece3f142-22ae-43c5-afa7-8aa887640222.png)

* 接続コンポーネント : "Use this Compornent" or 配置済みの"tAzureStorageConnection"コンポーネント ※"Use this Compornent"を利用する場合、[tAzureStorageConnection](#tazurestorageconnection)と同じ設定が必要になるため、基本的には **配置済みの"tAzureStorageConnection"コンポーネント** を利用
* コンテナ名 : Azure Blob Storageのコンテナー名を設定
* ローカルフォルダー : Putするローカルフォルダのパスを指定
* Azureストレージフォルダー : 配置先のパスを指定 (ディレクトリの配下に配置したい場合は"/"で区切ればOK)
* ファイルリストを使用 : チェックを入れた場合、"ファイルマスク"にマッチするファイル名を、"新しい名前"で指定したファイル名に置き換えたうえで配置する
* エラー発生時に強制終了 : チェックした場合、このコンポーネントでエラーが発生した際に、ジョブを強制終了する

「ファイルリストを使用」にチェックを入れ、項目を何も指定しなかった場合はエラーとなるため要注意です。
基本的には
* 「コンテナ名」、「ローカルフォルダー」、「Azureストレージフォルダー」 : 指定
* 「ファイルリストを使用」 : チェックを入れない
* 「エラー発生時に強制終了」 : チェックを入れる

で設定しておけば問題ないかと思います。

**公式ドキュメント**

https://help.qlik.com/talend/ja-JP/components/8.0/azure-storage-blob/tazurestorageput

## tAzureStorageDelete

S3接続用コンポーネント群における"tS3Delete"と同質のコンポーネントで、名前の通りBlobオブジェクトをDeleteするためのコンポーネントです。
ここまでやってきてわかりましたが、Azure接続用コンポーネント群は、オブジェクト単位ではなくフォルダ単位でいろいろ操作しているような印象を受けます。Azureをちゃんと勉強すればこの辺の経緯もわかるのかもしれませんが、今回は割愛します。
コンポーネントの設定画面はこんな感じです。
![pic06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2646113/e4ccf24c-3931-4f63-9ee6-f2baed5341fa.png)

* 接続コンポーネント : "Use this Compornent" or 配置済みの"tAzureStorageConnection"コンポーネント ※"Use this Compornent"を利用する場合、[tAzureStorageConnection](#tazurestorageconnection)と同じ設定が必要になるため、基本的には **配置済みの"tAzureStorageConnection"コンポーネント** を利用
* コンテナ名 : Azure Blob Storageのコンテナー名を設定
* プレフックス : 削除したいディレクトリ名、ファイル名を設定
* サブディレクトリを含める : サブディレクトリ配下にオブジェクトがある場合、チェックを入れないと何も起きない
* エラー発生時に強制終了 : チェックした場合、このコンポーネントでエラーが発生した際に、ジョブを強制終了する

基本的には
* 「コンテナ名」、「プレフィックス」 : 指定
* 「サブディレクトリを含める」 : 事故を防ぎたい場合はチェックを入れない
* 「エラー発生時に強制終了」 : チェックを入れる

で設定しておけば問題ないかと思います。

**公式ドキュメント**

https://help.qlik.com/talend/ja-JP/components/8.0/azure-storage-blob/tazurestoragedelete

# おわりに

ネタはいろいろあれど、主にやる気がなかったため、久々の投稿となりました。
Talend→AWSはさんざんやってきましたが、Talend→Azureははじめてで、サワリとはいえAzureにも触れ、いろいろと新鮮な経験ができました。
IT屋たるもの、こういった新しい経験ができるチャンスは逃さずにいたいものですね。

以上、ここまでお読みいただきありがとうございました。