Node-REDからIBM Cloud Object Storageへ接続する際に気をつけるメモ

# はじめに

IBM CloudのLiteアカウントで作成したNode-REDアプリからCloud Object Storageへ接続する際に気をつけることをメモに残しておきます。

Cloud Object Storageのバケットを作成する際に、事前定義されたバケットから「すぐに始める」を選択・作成して、あまり考えずに進めてしまったのが良くなかったのかもしれません。
(バケット名、回復力、ロケーションなどの情報が自動的に割り当てられます)

![バケット2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/174be880-9564-a679-92d2-d4fe836b0d7c.jpeg)

![すぐに始める.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/0826633c-4b4f-15ab-00e5-3c589b1513e8.jpeg)

カスタム・バケットを選択していれば、仕組みを理解してからバケット名を指定し、回復力・ロケーションを選択していたかもしれません。

![バケット1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/907023e3-ec39-6dad-55a2-eba8fef07d00.jpeg)

![カスタムバケット.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/cf166199-7e42-6097-dcf9-8277d993edc5.jpeg)

## 知っておいた方が良い前知識

Cloud Object Storageへの接続方法はプライベート、ダイレクト、パブリックの3種類あります。

![スクリーンショット 2021-05-07 20.23.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/36fcfd42-a422-a974-b25e-6584d5e27e54.png)

Cloud Foundryで作成したNode-REDアプリからプライベート接続は不可ということで、ダイレクト接続を選択します。
外部のNode-REDからはパブリック接続を選択します。

### エンドポイントの設定に注意

どの接続方法でもサービス資格情報(クレデンシャル)は共通で使用できますが、エンドポイントの設定は回復力・ロケーションの設定によってバケット毎に異なる可能性があります。
例えば、回復力がCross Regionalの場合、エンドポイントは4つの中から選択しますが、Regionalの場合、1つしか選択肢がありません。
また、バケットを作成したロケーションによってエンドポイントが異なる点にも注意が必要です。

|回復力 |ロケーション |パブリック |プライベート |ダイレクト |
|---|---|---|---|---|
|Cross Regional |ap-geo |s3.ap.cloud-object-storage.appdomain.cloud <br><br> s3.tok.ap.cloud-object-storage.appdomain.cloud <br><br> s3.seo.ap.cloud-object-storage.appdomain.cloud <br><br> s3.hkg.ap.cloud-object-storage.appdomain.cloud |s3.private.ap.cloud-object-storage.appdomain.cloud <br><br> s3.private.tok.ap.cloud-object-storage.appdomain.cloud <br><br> s3.private.seo.ap.cloud-object-storage.appdomain.cloud <br><br> s3.private.hkg.ap.cloud-object-storage.appdomain.cloud |s3.direct.ap.cloud-object-storage.appdomain.cloud <br><br> s3.direct.tok.ap.cloud-object-storage.appdomain.cloud <br><br> s3.direct.seo.ap.cloud-object-storage.appdomain.cloud <br><br> s3.direct.hkg.ap.cloud-object-storage.appdomain.cloud |
|Regional |jp-tok |s3.jp-tok.cloud-object-storage.appdomain.cloud |s3.private.jp-tok.cloud-object-storage.appdomain.cloud |s3.direct.jp-tok.cloud-object-storage.appdomain.cloud |

# 手順

## 1. Node-REDのインストール

<a href="https://qiita.com/Kakimoty_Field">Daichi Kakimoto</a>さんの記事を参考にさせていただきました。

https://qiita.com/Kakimoty_Field/items/ed30531445cafcb30a63

## 2. Cloud Object Storageでバケットの作成

事前定義されたバケットから「すぐに始める」を選択、または、カスタム・バケットを選択してバケットを作成します。
外部から(パブリック接続で)バケットへアクセスする場合、作成したバケットを選択し、「アクセス・ポリシー」→「パブリック・アクセス」→「アクセス・ポリシーの作成」の順に選択し、有効化のボタンを押します。

![バケット1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/43fc211f-8bd6-1c1a-bd14-e9d9db0e4656.jpeg)

![パブリックアクセス1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/8b2952d5-d84d-6a10-cbba-bab2d0489893.jpeg)

![パブリックアクセス2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/d73b0ab5-7ae6-740a-435b-d94847bd58c6.jpeg)

バケットへ接続する際に必要になるサービス資格情報を作成します。
「サービス資格情報」を選択し、既に作成されている鍵名を選択、または、「新規資格情報」を選択して新たに資格情報を作成(追加)します。

![サービス資格情報1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/a46787e1-7b50-d3b8-5a03-fe684c368826.jpeg)

![資格情報3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/c9036eea-cf78-60aa-f5a3-41e2dc1ec6aa.jpeg)

鍵名を選択すると、バケットへの接続に必要な情報が表示されますので、"apikey"と"resource_instance_id"の情報をメモしておきます。
少し紛らわしいですが、"endpoints"の情報は使用しません。
<b><font color=#FF0000>("endpoints"の情報はバケットへの接続には使用しません。私は"endpoints"の情報をそのままバケット接続に設定してハマりました。)</font></b>

![サービス資格情報2-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/a9632623-064f-b460-0d69-5a3196eb87a1.jpeg)

Cloud Foundryからダイレクト接続する場合、念のため「接続情報」が設定されているか確認します。
設定されていなければ「接続の作成」を選択して設定します。

![接続2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/39c815f9-1e0f-7d7b-06d6-c050c6aafa80.jpeg)

## 3. node-red-contrib-cosモジュールの追加

Node-REDのメニューから「パレットの管理」を選択します。

![メニュー1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/a0f67c01-81f2-13a1-086a-219098d8a03c.jpeg)

「ノードを追加」タブの検索欄でnode-red-contrib-cosを入力し、表示されたリストから「ノードを追加」のボタンを押します。

![ノードを追加.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/1512b2f4-e7a2-a22f-caa0-e1fcd6d57c12.jpeg)

正常にインストールが完了すると、Node-REDの左側のパレットにノードが追加されます。

![スクリーンショット 2021-05-07 22.23.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/721b4079-0e43-f658-7a97-f95e06fba338.png)

# サンプルノード

ブラウザからNode-REDヘアクセスして、バケットに保存されているtest.txtファイルを取得するフローで設定方法を説明します。
Node-REDの左側のパレットから「http in」ノード、「http response」ノード、「cos - get」ノードをフローへ移動して接続します。

![スクリーンショット 2021-05-07 22.48.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/862b4268-c8a2-d72d-1daa-6d9bfc7c98e7.png)

## 設定

### http inノード

URLに「/test.txt」と入力します。

![スクリーンショット 2021-05-07 22.53.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/625fada6-ee80-c29c-e95e-09db48e35133.png)

### http responseノード

設定することはありません。

### cos - getノード

「Cloud Object Storage Configuration」「Bucket」「Object Name」「Mode」を設定します。
「Cloud Object Storage Configuration」は鉛筆マークを押してプロパティを作成します。

![スクリーンショット 2021-05-07 22.55.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/137ab9b8-9658-858f-a114-baf2234a8871.png)

### Cloud Object Storage Configuration

「API Key」「Service Instance ID」「Location」「Endpoint」を設定します。
「API Key」はサービス資格情報の"apikey"、「Service Instance ID」はサービス資格情報の"resource_instance_id"、「Location」はプルダウンメニューから「Manual」、「Endpoint」はバケットに応じて適切なエンドポイントを設定します。
入力が完了したら「更新」ボタンを押します。

![プロパティ1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/ba00af0d-fa63-1974-8a76-b6711ea10d53.jpeg)

「Bucket」はバケット名、「Objetct Name」はオブジェクト名(ここではtest.txt)、「Mode」はプルダウンメニューから「File」を選択します。

![cos-get.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/f4e34f1c-38f3-a882-c502-356192ebae05.png)

Node-REDの画面で「デプロイ」ボタンを押してフローの変更を反映します。ブラウザから/test.txtへアクセスしてtest.txtの内容が表示、または、ダウンロードされれば正常です。
(例えば、Node-REDのフローエディタのURLが https://tfjs-node.mybluemix.net/red/ であれば、https://tfjs-node.mybluemix.net/test.txt へアクセスする)

![フロー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/3cd646d8-ed24-2bdb-d0d1-166347a373e4.jpeg)

# まとめ

みなさま、IBM CloudのLiteアカウントで良きNode-REDライフを！