Node-REDでストレージサービスを使う（Microsoft Azure ストレージアカウント編） 

# はじめに
Node-REDでファイルをクラウドに保存したい時があります。
今回はAzureのストレージサービスにアクセスする方法をご紹介します。

# Azureの準備

## ストレージアカウントの設定

ストレージアカウントを新規で作成します。

### ストレージアカウントを作成

サブスクリプションの配下にリソースグループ`test`を新規作成リンクから作成して紐付けます。

- 名称　`test20221125`
- 地域 `East US`
- その他の設定は今回は以下の画像のように設定しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266424/71bfc2f4-c676-4758-2d65-5944b6ad1974.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266424/2bbc4bef-2fc0-e4bd-ea8d-3231a6636bb0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266424/462a52c4-4b17-c1a7-7ad7-a1dae7590a9c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266424/c9b25334-2304-9d29-59f8-325d76561599.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266424/e62cd5c6-ff5b-d123-68bd-b144f0f682e5.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266424/4f668fbe-2023-5fdb-c72a-18b129162b9b.png)

デプロイが完了し、ストレージアカウントが作成されました。


### セキュリティとネットワーク

左のメニューの一覧から、セキュリティとネットワークのセクションを見つけたら、アクセス キーを選択します。
このKey1のキーあとでノードに設定しますので、ウィンドウを開いたままにしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266424/f5bf0548-45de-9721-b488-acbb552d7482.png)


# フロー

enebular editorで、フローを作成していきます。
azureのストレージにデータを保存するノードは色々とありましたが、今回は、@intres/node-red-azure-storageノードを使いました。

## put

### フロー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266424/a84a5ccf-4044-9dac-bf61-8e3c34c30b60.png)

### プロパティ

- `File path` アップロードしたいファイルのフルパスを指定します。
- `Container name` フォルダ名のようなものです。今回は`newcontainer`としました。
- `Blob name` アップロードしたときのファイル名です
- `Account name`　ストレージアカウントの名前を記載します。
- `Account Key`　先ほどAzureの管理画面にあったキーをコピーして貼り付けます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266424/03589a5c-f402-a526-d111-1afc654ff60d.png)

### フローの実行

injectノードを実行してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266424/5f88270a-a715-0b7f-d9a3-9914319feffd.png)

Azureの管理画面でアップロードされたファイルを確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266424/ded00251-8c5b-d459-6a3f-7c2aebfe7eaf.png)



## get

### フロー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266424/b7a6913f-3a3f-4811-b96d-7c6e1d034a03.png)

### プロパティ

- `Mode` fileとします。
- `File path to store` 保存する場所を指定します。
- `Container name` 取得したいファイルが格納されているコンテナ名を指定します。
- `Blob name` 取得したいファイル名を指定します。
- `Account name`　ストレージアカウントの名前を記載します。
- `Account Key`　先ほどAzureの管理画面にあったキーをコピーして貼り付けます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266424/e47527a8-ca55-0d09-6a89-908a83c6a8e9.png)

### フローの実行
injectノードを実行してみると、ファイルがローカルに保存されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266424/48ec6f2c-050b-696b-42ca-1a0dbbef591c.png)

# まとめ

今回は以下のノードを試しました。手軽に使えるなと感じました。

[@intres/node-red-azure-storage](https://flows.nodered.org/node/@intres/node-red-azure-storage)

:::note warn
注意
今回ご紹介したノードでは、アカウントキーによってアクセスが可能になりますが、Azureでは、おすすめの方法ではないようです。
Azure ADに対応したNode-REDノードが出てくれるといいなと思いましたが、そのようなノードは現時点ではないようです。

引用：「BLOB およびキューのデータに対する要求を認可するには、アカウント キー (共有キーによる認可) を使用するのではなく、可能であれば Azure Active Directory (Azure AD) を使用することをお勧めします。 Azure AD を使用して認可すると、共有キーによる認可よりも優れたセキュリティと使いやすさが実現されます。」
引用元：https://learn.microsoft.com/ja-jp/azure/storage/common/storage-account-keys-manage?tabs=azure-portal
:::