0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GAE環境でNode-REDを使う

Posted at

こんにちは。
この記事は「Google Cloud Platform Advent Calendar 2020」10日目の記事です。

はじめに

Node-REDが好きでプライベートでも仕事でもよく使ってますが、GCP環境と親和性が高く、GAEで動かせる情報がなかなかなかったため、GAE用のスターターコードNode-RED-Starter-GoogleAppEngineを作ってみました。今回はそのスターターコードをGAEにデプロイ/動作確認するまでの流れを纏めてみました。
https://gitlab.com/ktsz/node-red-starter-googleappengine.git

構成

今回は、ローカルで開発したNode-REDを、GitlabのCI/CDを利用しGAEにデプロイして使う、以下のような構成で構築します。
スクリーンショット 2020-12-10 21.26.52.png

環境準備

Google Cloud Platform の準備

Node-RED-Starter-GoogleAppEngineは、実行環境としてGCPのApp Engine FlexibleもしくはStandard環境を利用します。今回はFlexibleで構築します。GAEの詳細については、以下サイトをご確認ください。
https://cloud.google.com/appengine?hl=ja
(GAE Standardでも動作可能ですが、GAE Standardの制約はそのまま受けますので、Node-REDの利用上は例えばDebugタブにログを出力することができないなど、制約があります。)

API有効化

以下5つのAPIが必要となります。左上のハンバーガーメニュー >「APIとサービス」>「ダッシュボード」>「APIとサービスを有効化」を開き、有効化ください。

  • Compute Engine API
  • App Engine Admin API
  • Google App Engine Flexible Environment
  • Cloud Build API
  • Cloud Deployment Manager V2 API

サービスアカウント作成

デプロイ時に使用するサービスアカウントと、Node-RED storageModuleで使用するサービスアカウントを作成します。左上のハンバーガーメニュー >「IDとセキュリティ」>「ID」>「サービスアカウント」>「サービスアカウントを作成」より作成ください。

  • gitlab-ci デプロイ用 必要権限
    • App Engine サービス管理者
    • App Engine デプロイ担当者
    • Cloud Build 編集者
    • ストレージオブジェクト 管理者
    • サービス アカウント ユーザー
  • Node-RED storageModule用 必要権限
    • ストレージ 管理者

作成後、JSON形式でキーを作成し、ダウンロードしてください。(安全に保管してください。)

GAE有効化

GAEを有効化します。以下設定値を参考に有効化ください。

項目
Region 任意(ここでは asia-northeast1(東京)を選択)
Language Node.js
Environment フレキシブル

Gitlab の準備

GAE用のNode-REDスターターコードの準備と、GAEに自動デプロイするためのCI/CDの設定を行います。

スターターコード準備

スターターコードを自分のGitプロジェクトへインポートします。以下に「Node-RED-Starter-GoogleAppEngine」スターターコードがありますので、こちらをインポートください。
https://gitlab.com/ktsz/node-red-starter-googleappengine.git

CI/CD設定

CI/CDの変数を設定します。Gitlabプロジェクトより、左メニューの設定 > CI/CD を開き、Variablesセクションを展開、以下変数を設定ください。

キー
GCP_PROJECT_ID GCPのプロジェクトID
GCP_SERVICE_ACCOUNT GAEへのデプロイ時に使用するサービスアカウント キーJSONファイル内本文をコピーし設定
NODE_RED_CREDENTIAL_SECRET Node-REDフロー暗号化キー(任意の値)
NODE_RED_USE_EDITOR Node-REDのエディタ使用可否(デフォルトはfalse)
NODE_RED_USE_APPMETRICS AppMetricsの使用可否(デフォルトはfalse)
NODE_RED_USERNAME Node-REDのエディタのログインユーザーID
NODE_RED_PASSWORD Node-REDのエディタのログインユーザーPW
NODE_RED_GCS_ACCOUNT Node-RED storageModuleで使用するGCS用サービスアカウント キーJSONファイル内本文をコピーし設定(未設定の場合はlocalStorage)
NODE_RED_GCS_LOCATION Node-RED storageModuleで使用するGCSのBucketロケーション(デフォルトはASIA-NORTHEAST1)
NODE_RED_LOG_LEVEL Node-REDのログ出力レベル(デフォルトはinfo)
スクリーンショット 2020-12-10 22.06.53.png

Node-RED開発環境の準備

ローカル環境へインストール

以下コマンドでインストールください。

sudo npm install -g --unsafe-perm node-red

参考: https://nodered.jp/docs/getting-started/local

Node-REDプロジェクト機能有効化

<インストール先>/settings.jsファイルの一番下にプロジェクト機能のセクションがあります。デフォルトは false になってますので、ここを true に変更し、プロジェクト機能を有効化します。

// Customising the editor
editorTheme: {
    projects: {
        // To enable the Projects feature, set this value to true
       enabled: true
    }
}

Node-REDを起動

以下コマンドで起動ください。

node-red

プロジェクトをクローン

ブラウザでローカルのNode-REDへアクセスhttp://127.0.0.1:1880、右上のハンバーガーメニュー > プロジェクト > 新規 を開き、「プロジェクトをクローン」を押下、以下必要情報を入力し、「プロジェクトをクローン」ボタンを押下ください。

項目
プロジェクト名 任意
GitリポジトリのURL 先程インポートし準備したGitlabリポジトリのURL
ユーザー名 GitlabのログインユーザーID
パスワード GitlabのログインユーザーPW

フロー暗号化設定

ノードに設定するAPIトークン等のセキュリティ情報を暗号化するため、フローの暗号化設定を行います。右上のハンバーガーメニュー > プロジェクト > 設定 > 左タブの設定 を開きます。そのウィンドウの右上に「編集」ボタンがありますので、こちらから設定ください。

項目
新規の暗号化キー GitlabのCI/CD変数にて設定したフロー暗号化キーと同じ値

以上で準備は完了です。

GAEへデプロイ

続いてフローをGAEへデプロイします。GitlabのMasterにPUSHされたタイミングでCI/CDが動作するよう構成されてますので、まずは変更をGitにPushします。
準備が完了した初期状態では、Node-RED上にはHello, Node-RED-Starter-GoogleAppEngine !!と答えてくれる動作確認用のフローがあります。
スクリーンショット 2020-12-10 22.39.38.png

これを位置の変更など少しだけ変更し、commit/pushしましょう。Node-RED画面右側のサイドバーの「履歴」タブを開きます。「ローカルの変更」セクションを確認し、対象の変更を追加します。全ての場合は「全て」ボタンを押下し「コミット対象とする変更」に追加します。コミットコメントを入力し、「コミット」ボタンを押下します。「コミット履歴」セクションを開き、「↑↓」ボタンを押下、プッシュ先のリモートブランチを選択し、「プッシュ」ボタンを押下します。これでリモートGitブランチへのプッシュが完了です。
スクリーンショット 2020-12-10 22.36.32.png

PushしますとGitlabでCI/CDジョブが走り始めます。GAE Flexible環境なのでデプロイにちょっと時間がかかりますが、、、最後にJob succeededと出てくれば完了です。
スクリーンショット 2020-12-10 22.59.16.png

動作確認

HTTP Requestを投げてみる

動作確認用のフローのendpointにrequestを投げてみます。ブラウザを起動し、https://xxxxxx/helloにアクセスください。以下のようなメッセージが表示されれば成功です。
スクリーンショット 2020-12-10 23.20.55.png

Cloud Loggingの確認

Node-RED-Starter-GoogleAppEngineのアプリケーションログは、Cloud Loggingに対応してます。Loggingの画面、ログフィールドのLOG_NAMEをwinston_logで絞り込んでください。そうすると、図のようなAP起動ログが確認できるかと思います。
スクリーンショット 2020-12-10 23.11.24.png

Cloud Storageの確認

GCSには、Node-REDのフロー定義が保管されます。デフォルトの設定でデプロイした場合、以下にフローが保管されますので確認してみましょう。

  • Bucket:<GCP PJID>-gae-<GAE サービス識別子>-node-red
  • フォルダ:GAE バージョン名

スクリーンショット 2020-12-10 23.32.56.png

GAE上のNode-REDのEditorでフローに変更を加えた場合、ここに保管されているフロー定義に保管されます。このような形でサーバーレスサービスであるGAE上の変更を永続化しています。

まとめ

いかがでしたでしょうか。GAE環境でもNode-RED、ぜひ使ってみてください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?