はじめに
IBM CloudのLiteアカウントで作成したNode-REDアプリからCloud Object Storageへ接続する際に気をつけることをメモに残しておきます。
Cloud Object Storageのバケットを作成する際に、事前定義されたバケットから「すぐに始める」を選択・作成して、あまり考えずに進めてしまったのが良くなかったのかもしれません。
(バケット名、回復力、ロケーションなどの情報が自動的に割り当てられます)
カスタム・バケットを選択していれば、仕組みを理解してからバケット名を指定し、回復力・ロケーションを選択していたかもしれません。
知っておいた方が良い前知識
Cloud Object Storageへの接続方法はプライベート、ダイレクト、パブリックの3種類あります。
Cloud Foundryで作成したNode-REDアプリからプライベート接続は不可ということで、ダイレクト接続を選択します。
外部のNode-REDからはパブリック接続を選択します。
エンドポイントの設定に注意
どの接続方法でもサービス資格情報(クレデンシャル)は共通で使用できますが、エンドポイントの設定は回復力・ロケーションの設定によってバケット毎に異なる可能性があります。
例えば、回復力がCross Regionalの場合、エンドポイントは4つの中から選択しますが、Regionalの場合、1つしか選択肢がありません。
また、バケットを作成したロケーションによってエンドポイントが異なる点にも注意が必要です。
回復力 | ロケーション | パブリック | プライベート | ダイレクト |
---|---|---|---|---|
Cross Regional | ap-geo | s3.ap.cloud-object-storage.appdomain.cloud s3.tok.ap.cloud-object-storage.appdomain.cloud s3.seo.ap.cloud-object-storage.appdomain.cloud s3.hkg.ap.cloud-object-storage.appdomain.cloud |
s3.private.ap.cloud-object-storage.appdomain.cloud s3.private.tok.ap.cloud-object-storage.appdomain.cloud s3.private.seo.ap.cloud-object-storage.appdomain.cloud s3.private.hkg.ap.cloud-object-storage.appdomain.cloud |
s3.direct.ap.cloud-object-storage.appdomain.cloud s3.direct.tok.ap.cloud-object-storage.appdomain.cloud s3.direct.seo.ap.cloud-object-storage.appdomain.cloud 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のインストール
Daichi Kakimotoさんの記事を参考にさせていただきました。
2. Cloud Object Storageでバケットの作成
事前定義されたバケットから「すぐに始める」を選択、または、カスタム・バケットを選択してバケットを作成します。
外部から(パブリック接続で)バケットへアクセスする場合、作成したバケットを選択し、「アクセス・ポリシー」→「パブリック・アクセス」→「アクセス・ポリシーの作成」の順に選択し、有効化のボタンを押します。
バケットへ接続する際に必要になるサービス資格情報を作成します。
「サービス資格情報」を選択し、既に作成されている鍵名を選択、または、「新規資格情報」を選択して新たに資格情報を作成(追加)します。
鍵名を選択すると、バケットへの接続に必要な情報が表示されますので、"apikey"と"resource_instance_id"の情報をメモしておきます。
少し紛らわしいですが、"endpoints"の情報は使用しません。
("endpoints"の情報はバケットへの接続には使用しません。私は"endpoints"の情報をそのままバケット接続に設定してハマりました。)
Cloud Foundryからダイレクト接続する場合、念のため「接続情報」が設定されているか確認します。
設定されていなければ「接続の作成」を選択して設定します。
3. node-red-contrib-cosモジュールの追加
Node-REDのメニューから「パレットの管理」を選択します。
「ノードを追加」タブの検索欄でnode-red-contrib-cosを入力し、表示されたリストから「ノードを追加」のボタンを押します。
正常にインストールが完了すると、Node-REDの左側のパレットにノードが追加されます。
サンプルノード
ブラウザからNode-REDヘアクセスして、バケットに保存されているtest.txtファイルを取得するフローで設定方法を説明します。
Node-REDの左側のパレットから「http in」ノード、「http response」ノード、「cos - get」ノードをフローへ移動して接続します。
設定
http inノード
URLに「/test.txt」と入力します。
http responseノード
設定することはありません。
cos - getノード
「Cloud Object Storage Configuration」「Bucket」「Object Name」「Mode」を設定します。
「Cloud Object Storage Configuration」は鉛筆マークを押してプロパティを作成します。
Cloud Object Storage Configuration
「API Key」「Service Instance ID」「Location」「Endpoint」を設定します。
「API Key」はサービス資格情報の"apikey"、「Service Instance ID」はサービス資格情報の"resource_instance_id"、「Location」はプルダウンメニューから「Manual」、「Endpoint」はバケットに応じて適切なエンドポイントを設定します。
入力が完了したら「更新」ボタンを押します。
「Bucket」はバケット名、「Objetct Name」はオブジェクト名(ここではtest.txt)、「Mode」はプルダウンメニューから「File」を選択します。
Node-REDの画面で「デプロイ」ボタンを押してフローの変更を反映します。ブラウザから/test.txtへアクセスしてtest.txtの内容が表示、または、ダウンロードされれば正常です。
(例えば、Node-REDのフローエディタのURLが https://tfjs-node.mybluemix.net/red/ であれば、https://tfjs-node.mybluemix.net/test.txt へアクセスする)
まとめ
みなさま、IBM CloudのLiteアカウントで良きNode-REDライフを!