Microsoft Azure Storage Connector - Mule 4

#MuleSoftからAzure Storageにアクセス

##対象ユースケース
Azure StorageはFileやBlobといった各種データを保存できるクラウドストレージとなっており、
AWS S3と同じように、システム間連携のデータ一時保存領域としても使えます。
そこで、MuleSoftからAzure Storageに対するアクセスを試してみました。

##コネクター
MuleSoft製ではありませんが、MuleSoft Certifiedのコネクターがありました。
作っているのはWishworks社。
https://www.whishworks.com/mulesoft/mulesoft-services/connector-support/
Webサイトによると、Azure Storage以外にもAsanaやExpedia、MapR-DBといったコネクターを作成しているようです。

利用は無償であり（サポートはWishworksから有償）
Anypoint Exchangeから利用できます。
https://www.mulesoft.com/exchange/org.mule.modules/azure-storage-connector/
Anypoint Stuidoパレットの「Search in Exchange」からモジュール追加できます。

##Azure Storageモジュール
各種操作がサポートされています。

|  |  |
|:-:|:-:|
| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/b42d989b-f601-8008-bd2d-8b74d7298c03.png)  |  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/1e0e9c24-e5b3-1c95-9c13-da306e60eb6b.png) |

##接続クレデンシャル
接続としては、アクセスキーとSAS（Shared Access Signature）トークンの2種類が利用できます。
ただし、少し試してみたところ、アクセスキーの設定で、ストレージアカウントとアクセスキーの組み合わせをいれても上手くつながりませんでした。コネクター側に何かしらバグがありそうな感じです。
SASトークンは接続可能でした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/a15e6bc1-0784-e942-cd16-bec1ecf78463.png)

##SASトークンの取得
SASトークンは、Azureポータルで取得が可能です。
ストレージアカウント　➡　Shared Access Signatureに行きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/07423c17-4214-b874-58a5-44a3494633cf.png)
そして、必要となるアクセス許可を付与したキーを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/ffd03b81-a285-b0a0-e0ce-aeccfbe6dead.png)

SASトークンの部分です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/51fd265b-2d94-cc8f-7daa-acab91928190.png)

##Blobのダウンロード
Containerに、コンテナ名（Azureポータルでは「コンテナー」と伸ばされてますが）をいれ、コンテナ上にあるファイル名を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/685356a2-02b6-ad32-ba2d-09a65ef6c0aa.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/27d3375b-8f99-191e-8e0d-f24eb7468a8b.png)

##Blobのアップロード
アップロードはファイルを渡す方法もあるようですが、下記のようにペイロードを渡すこともできます。
基本的に、CloudHub（MuleSoft提供クラウド）上でAPI動かすにしても、RuntimeFabric（オンプレミスのコンテナ）上でAPI動かすにしても、ローカルファイルへのアクセスは無いですし、ペイロード渡しが良いですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/256a9f15-a9c5-ba1c-f634-d6141a2ae853.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/1b238799-c5e8-f812-b9cd-be3ae1f53b9a.png)

##ファイルのダウンロード
ファイルの取得も、下記のように共有名とファイル名を指定することで行うことが出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/13465050-02f5-ccf2-08ca-699f5592e7fe.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/de81f26a-73a6-4315-3dd5-e6de249ab5ef.png)

##ファイルのアップロード
こちらも、Blobと同じようにPayloadを渡してファイルを作成することが出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/99c0660e-e9a4-ef8e-fa07-e88b2eb93299.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/d3b95d03-5632-8004-7290-5a162d24c676.png)

成功したときに戻ってくるのは、シンプルにステータス200とTrueです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615564/a74f69b9-8ea1-6bc1-9b2c-bbfe4fe6980a.png)