Nutanix Objects でオブジェクトストレージ API特訓 Node-RED編
IoT で簡単に可視化といえば、Node-RED!というか他知らないので、KPS for IoT(Xi IoT)との相性も良いので、Python に続いてオブジェクトストレージとの連携にトライ
Node-REDからNutanix Objectsへ接続方法を探す
まずは手探りで Node-RED 上でパレットからノードを検索してみます
なんとなくそれらしいのがいくつか見つかりましので、新しい方をインストールしてみます
追加されたノードで設定できる項目を確認します
Access Key、Secret Keyを設定する場所はありましたが
接続先がAWSのリージョンしか指定できず、完全にAWS S3専用ですね
Boto3のように簡単にはいかなさそう。。。。
「node-red s3」とか「node-red オブジェクトストレージ」で検索してみても、独自の有力な情報はみつかりません
IBMさんやNECさんはクラウド型オブジェクトストレージはNode-REDに専用のノードが用意されている模様、Nutanix Objects用はもちろん無いです
だからといってイチから作るのは大変そう。。。
minIOノードを試す
ということで、汎用的に使えそうなノードを探してみましょう
そこで目をつけたので minIOノードです
S3互換な プライベートクラウド向けな Kubernetes Nativeな オブジェクトストレージなので、ピッタシ当てはまりそうです
Node-RED上で検索してみても最近アップデートもされているので、(気分的に)使えそうなヨカンです
「@alpine-code/node-red-contrib-minio」をインストールしてみます
5つのノードがインストールされています
接続先の設定項目を見てみるとホストの指定ができるので、なんとなくできそうな気がします
バケット一覧表示
minIOの bucketsノードを使って、バケット一覧を取得にトライしてみます
Nutanix Objectsの接続情報を入力して、Operationで「listBucketes」を選択してみます
あ、簡単にとれちゃいました
(トリガにタイムスタンプ使ってますが、なんか送信してくれればなんでも良いです)
オブジェクトの一覧表示
オブジェクトのリストもサクッと取得できます
あっさり出来すぎて拍子抜けです、minIOノードに辿り着くまで結構苦労したのですが。。。
オブジェクトの内容取得
次にオブジェクトの内容を「getPartialObject」で取得します
(原因はわかりませんが「getObject」ではだめでした)
アスキーコードで出力されますが、「raw」と書いてるところクリックすると文字列に変換してくれます
オブジェクトストレージから画像取得
無事にオブジェクトも取得できたので、Node-REDならではの簡単可視化で画像表示にもチャレンジ
そのまま取得すると、バイナリなんで
Base64通してそれっぽい文字列にして、htmlの imgタグ
こんな感じで表示してやろう試みます
が。
同じ画像なのに、なんだか毎回サイズが違います。。。どういうこと???
サイズ指定してみたりとかしたんですが、よくわからない\(^o^)/
Presigned URLの取得
その他使える方法が無いか、みてみると「presigned」というのがあります
というわけで、発想の転換してみまして Boto3でも使った
「Presigned URL」を使って、Webに埋め込んでみましょう
(オブジェクト業界ではこれが正義なのかもしれない)
あれ?なんかエラーばっかでURL取得できない。。
どうやら、Bucket名にスペースが入ってしまっている模様(バグ?)
めっちゃ時間使ったやん
しょうがないので、changeノードで「bucketName」を飛ばしてやると
すんなりオブジェクトのURLを取得できました
あとは、テンプレートノードにこんな感じの html書いておけば
<center> <a href=“{{{payload.presignedGetObject}}}” target=“_blank” rel=“noopener noreferrer”><img src=“{{{payload.presignedGetObject}}}“></a> <br><b1><i>{{{objectName}}}</i></b1> </center>
無事、Web表示されましたとさ
(アンダーテイカーはアメリカンバッドアス時代が好きだったのです)
他にもElasticsearchなんかと組み合わせて、IoTやエッジAI処理結果のお手軽可視化にはよいんではないかと思うんだ
それはまたの機会