コンテンツに移動
Google Cloud

GCP で Node-RED によるローコード プログラミングが可能に

2020年2月26日
https://storage.googleapis.com/gweb-cloudblog-publish/images/Google_Cloud_App_Dev.max-2600x2600.jpg
Google Cloud Japan Team

※この投稿は米国時間 2020 年 2 月 13 日に、Google Cloud blog に投稿されたものの抄訳です。

ウェブブラウザでドラッグ&ドロップするように、新しいアプリケーションを簡単に構築できたら素晴らしいと思いませんか?この記事では、GCP サービスを活用しながら、ビジュアル プログラミング形式で幅広いソリューションを構築できる、人気のオープンソースを開発、実行するプラットフォーム Node-RED を使用し、Google Cloud Platform(GCP)でホストされるアプリケーションを簡単に構築する方法を説明します。

https://storage.googleapis.com/gweb-cloudblog-publish/images/1_node_red.max-1200x1200.png

Node-RED では、提供されるビルディング ブロック(ノード)を使用して、プログラム(フロー)を作成します。ブラウザには、使用可能なノードのパレットとともにキャンバス領域が表示されます。ノードをパレットからキャンバスにドラッグ&ドロップし、ワイヤーでつなげて描画することでそれらのノードを接続します。フローには、ステップとその実行順序を指定することで、実行する必要があるロジックを記述し、その後 Node-RED 実行エンジンにデプロイできます。

Node-RED を成功に導いた重要な機能の一つに、追加のカスタムノードによる簡単な拡張が挙げられます。新しい API やテクノロジーが使用可能になると、新しい Node-RED ノードとしてカプセル化され、パレットで使用可能なノードのリストに追加されます。このノードはパレットからフローに追加することができ、元々提供されているノードとまったく同じ方法で使用できます。こうした追加ノードは、作成者が Node-RED コミュニティに貢献するために提供したものとして公開し、他のプロジェクトでも使うことができます。提供された Node-RED ノードについては、ノードの検索が可能でインデックス付けされたカタログをご覧ください。

ノードでは、内部処理の仕組みが隠され、新しい機能をより速く使用できるように、使いやすいインターフェースが表示されます。

では、GCP で Node-RED を実行して GCP サービスで使用する方法を確認しましょう。 

Node-RED のインストール

Node-RED は、Node Package Manager(npm)を使用して Node.JS ランタイムがある環境にインストールできます。GCP の場合、これには Compute Engine、Google Kubernetes Engine(GKE)、Cloud Run、Cloud Shell、その他の GCP 環境が含まれます。また、一般公開されている Docker イメージもあります。この例では、Docker イメージを使用しています。

Google Cloud Console を使用して Compute Engine インスタンスを作成し、実行するパブリック Node-RED Docker イメージを指定してみましょう。

Cloud Console にアクセスし、Compute Engine に移動します。新しい Compute Engine インスタンスを作成します。[この VM インスタンスにコンテナ イメージをデプロイします] チェックボックスをオンにします。コンテナ イメージの名前として「nodered/node-red」と入力します。

https://storage.googleapis.com/gweb-cloudblog-publish/images/2_install_node_red.max-700x700.png

その他の設定はすべてデフォルトのままにして、VM の作成を完了させます。

VM が開始されると Node-RED が実行されます。Node-RED を使用するには、ブラウザから Node-RED に接続する必要があります。Node-RED は、ポート 1880 でリッスンします。デフォルトの VPC ネットワーク ファイアウォールは、意図的に受信リクエストを制限します。つまり、ポート 1880 へのリクエストは拒否されることになります。次のステップでは、Node-RED ポートでネットワークへの接続を許可します。なお、開発用に無制限にアクセスできるように Node-RED を公開しないでください。代わりに、ブラウザが提示する IP アドレスからの上り(内向き)のみを許可するようにファイアウォール ルールを定義します。Google で「my ip address」を検索すると、ブラウザで使用している IP アドレスを見つけることができます。 

Node-RED への接続

GCP で Node-RED が実行されるようになったので、ポート 1880 で VM の外部パブリック IP アドレスを渡すことにより、ブラウザから Node-RED に接続できます。次に例を示します。

http://35.192.185.114:1880

使用中のブラウザに Node-RED の開発環境が表示されるようになりました。

https://storage.googleapis.com/gweb-cloudblog-publish/images/3_Connecting_to_Node-RED.max-1500x1500.png

GCP ノードの操作

この時点で、GCP で Node-RED が実行されています。ノードをパレットからキャンバスにドラッグ&ドロップしてそれらを接続することで、フローの作成を開始できます。あらかじめ提供されているノードは、単に開始用のセットです。今後のフローでインストールして使用できるノードは多数用意されています。

Google では、GCP の機能と対話するために Node-RED を拡張する方法を示す、一連の GCP ノードを構築しました。これらのノードをインストールするには、Node-RED システム メニューに移動して [パレットの管理] を選択します。

https://storage.googleapis.com/gweb-cloudblog-publish/images/4_deploying_node-red.max-500x500.png

[パレット] タブに切り替えてから、その中の [インストール] タブに切り替えます。「node-red-contrib-google-cloud」というノードセットを探して、[インストール] をクリックします。

https://storage.googleapis.com/gweb-cloudblog-publish/images/5_install_node-red.max-1000x1000.png

インストールが完了したら、利用可能なパレットノードのリストを下にスクロールすると、現在利用可能な GCP ビルディング ブロックが含まれた [GCP] セクションが表示されます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/6_gcp_building_blocks.max-200x200.png

現在利用可能な GCP ノードのリストは次のとおりです。

PubSub in - 名前付きサブスクリプションに関連付けられた新しいメッセージの受信によってトリガーされるフロー

PubSub out - 名前付きトピックに新しいメッセージを公開

GCS read - Cloud Storage オブジェクトのコンテンツの読み取り

GCS write - 新しい Cloud Storage オブジェクトへの書き込み

Language sentiment - テキストの感情分析の実行

Vision - 個別の属性のイメージ分析

Log - Stackdriver Logging へのログメッセージの書き込み

Tasks - Cloud Tasks インスタンスの開始

Monitoring - Stackdriver への新しいモニタリング レコードの書き込み

Speech to Text - オーディオ入力をテキストデータ表現に変換

Translate - テキストデータをある言語から別の言語に変換

DLP - 入力データに対してデータ損失防止(DLP)処理を実行

BigQuery - Google の BigQuery データベースとの対話

FireStore - Google の Firestore データベースとの対話

Metadata - Node-RED が実行されている Compute Engine のメタデータを取得

今後より多くの GCP ノードを提供していく予定です。また、自分で簡単にカスタムノードを作成することもできます。パブリック GitHub リポジトリにアクセスして、簡単な作成方法をご確認ください。

Node-RED のサンプルフロー

以下にフローの例を示します。

https://storage.googleapis.com/gweb-cloudblog-publish/images/7_sample_Node-RED_flow.max-800x800.png

大まかに言うと、このフローは受信 REST リクエストをリッスンし、受信したリクエストごとに新しい Google Cloud Storage オブジェクトを作成します。

このフローは HTTP 入力ノードで始まり、Node-RED が /test URL パスの HTTP GET リクエストをリッスンします。受信 REST リクエストが到着すると、受信データには、いくつかの操作が行われます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/8_properties.max-700x700.png

具体的には、2 つのフィールドが設定されます。1 つは Cloud Storage で作成するファイルの名前である msg.filename、もう 1 つは作成している新しいファイルのコンテンツである msg.payload です。この例では、HTTP リクエストで渡されたクエリ パラメータはログに記録されています。

フローの次のノードは GCP ノードで、新しいファイルの書き込みと作成を行う Cloud Storage オブジェクトの書き込みを実行します。最後のノードは、フローをトリガーした元の HTTP リクエストを完了させるレスポンスを送信します。

Node-RED のセキュリティ保護

Node-RED は、できるだけ速やかに起動して実行できるように設計されています。そのため、デフォルトの環境ではセキュリティの構成が行われていません。この状態での使用はおすすめしませんが、Node-RED には素早く有効にできるセキュリティ機能が備わっています。このセキュリティ機能には、フローの変更を行うための承認や、受信および送信データの暗号化に対する SSL/TLS の有効化が含まれます。Node-RED を学習し始めた段階では、ブラウザの IP アドレスからの上り(内向き)のみを許可するファイアウォール ルールを定義するようにしてください。

Node-RED による GCP でのビジュアル プログラミング

Node-RED には、長年にわたるデータフローおよびイベント プロセッサとしての実績があります。非常にシンプルなアーキテクチャ モデルで容易に取り組めるため、初心者でも短期間で Node-RED を使いこなすことができるようになるでしょう。簡単なインターネット検索で YouTube の多くのチュートリアルがヒットし、ドキュメント類も充実しています。また、コミュニティ活動も活発に行われています。さまざまな GCP ノードがコミュニティに貢献するために提供されているため、ホストが GCP か、別のパブリック クラウドか、オンプレミスかにかかわらず、Node-Red に GCP サービスを組み込むことができるようになりました。

関連情報

Node-RED - Node-RED ホームページ

GitHub: Google Cloud Node-RED リポジトリ

Node-RED のセキュリティ保護

- By Neil Kolbanm, Customer Engineer and Ron Pantofaro, Solutions Architect

投稿先