-
タグ
タグ
- アーキテクト
- アジャイル開発
- アプリ開発
- インシデントレスポンス
- イベントレポート
- カスタマーストーリー
- カルチャー
- 官民学・業界連携
- 企業市民活動
- クラウド
- クラウドインテグレーション
- クラブ活動
- コーポレート
- 広報・マーケティング
- 攻撃者グループ
- 子育て、生活
- サイバー救急センター
- サイバー救急センターレポート
- サイバー攻撃
- サイバー犯罪
- サイバー・グリッド・ジャパン
- サプライチェーンリスク
- システム開発
- 趣味
- 障がい者採用
- 初心者向け
- 白浜シンポジウム
- 情シス向け
- 情報モラル
- 情報漏えい対策
- 人材開発・教育
- 診断30周年
- スレットインテリジェンス
- すごうで
- セキュリティ
- セキュリティ診断
- セキュリティ診断レポート
- 脆弱性
- 脆弱性管理
- ゼロトラスト
- 対談
- ダイバーシティ
- テレワーク
- データベース
- デジタルアイデンティティ
- 働き方改革
- 標的型攻撃
- プラス・セキュリティ人材
- モバイルアプリ
- ライター紹介
- ラックセキュリティアカデミー
- ランサムウェア
- リモートデスクトップ
- 1on1
- AI
- ASM
- CIS Controls
- CODE BLUE
- CTF
- CYBER GRID JOURNAL
- CYBER GRID VIEW
- DevSecOps
- DX
- EC
- EDR
- FalconNest
- IoT
- IR
- JSOC
- JSOC INSIGHT
- LAC Security Insight
- NDR
- OWASP
- SASE
- Tech Crawling
- XDR
クラウドサービス部の石田です。普段はパブリッククラウド、特にOracle Cloud Infrastructure(以下、OCI)を活用したインフラ構築業務を担当しています。
最近、ローコード開発環境と呼ばれる、ロジックをプログラムコードではなくグラフィカルなインターフェイスで開発する技法が注目を浴びています。MicrosoftのPower Automateをはじめ、AWSのStep FunctionsやAzure Logic Appsなど、主要クラウドが実務レベルで活用できる環境を提供しています。一方、OCIにも同等のものとしてプロセス自動化というサービスが用意されていますが、これはOracle Integration※1の機能の一部で、どちらかというと業務システムの実装向きで日々の運用には少々重い印象があります。
※1 Oracle Integration Cloud (OIC) | Oracle 日本
そこで今回は、運用の場面でも使いやすいローコード開発環境を、OCI上に構築して試してみようと思います。ローコード開発環境としては、OSSのNode-REDを使います。さらに、OCIのイベントサービスなどの運用系サービスと連携するため、今回はOCIのStreamingサービス(以下、Streamingサービス)を利用します。ストリーミングと呼ばれるサービスは、パブリッククラウド化に伴って活用シーンが急速に拡大しているので、合わせて紹介していきます。
なお、この記事は全3回の連載で、第1回の今回は、Node-REDとStreamingサービスの紹介と導入方法について説明します。第2回ではそれらの接続方法を解説し、第3回ではNode-REDとStreamingサービスを連携させ、簡単なNode-REDフローを構築して動作を試してみたいと思います。
Node-REDの導入
まず、Node-REDの導入から説明します。ツールを活用すると直感的に操作できるため、初めてでも気軽に取り組めます。
Node-REDについて
Node-RED※2とは、Webインターフェイスからフローをグラフィカルに編集して実行可能な、Node.jsベースのツールです。
上の図のように、様々な機能を持つノードをグラフィカルに配置し、その間をフローで接続してロジックを開発していきます。ノードも標準で様々なものが用意されており※3、サードパーティーがノードを開発して追加することも可能です。また、JavaScriptを直接実行するノードもあり、複雑な要件や個別仕様が必要な際は、自分でロジックを記述することもできます。視覚的な操作で素早く形にでき、必要なときは深く作り込める軽快な使い勝手と拡張性が、Node-REDの最大の魅力です。
※3 代表的なものが「コアノード : Node-RED日本ユーザ会」にあげられています。
Node-REDの導入
それでは、実際にNode-REDを導入して動かしてみましょう。
VMインスタンスの用意
Node-REDが動作するサーバとして、OCI上にCompute VMインスタンスを作成します。特にアーキテクチャの制限はないので、ARM/x86_64どちらでも問題なく利用できます。数個のフローを編集・実行する程度であればARMでも十分に快適に動作します。OSは、Windowsも対応していますがLinuxの方が容易なので、Oracle Linux 9を使用します。
その他の設定は環境に応じて問題ありませんが、Node-REDは1880番ポートを使用するので、セキュリティリストやネットワークセキュリティグループを設定する場合は、このポートへのアクセス許可が必要になります。また、Node-REDは初期状態では認証やアクセス制御が有効化されていないため、いきなりパブリックIPを付与するのは避けた方が安全です。
インストール中に外部リポジトリへアクセスする場合があるため、インターネット接続が可能なようにルーティングやアクセス制限を設定しておいてください。さらに、後ほどStreamingサービスに接続するので、サービスゲートウェイにもアクセス可能にしておくとスムーズです。
Node-REDのインストール
Node-REDのインストールには公式のスクリプトを利用します。基本はこの手順で問題ありませんが、環境にそのまま適合しない部分があるため、事前にいくつか調整が必要になります。
まず、Node.js関連のRPMの署名に使用される証明書が更新されているにもかかわらず、スクリプト側がまだ古い証明書を参照している点です。このままでは署名検証でエラーとなり、インストールが進みません。
新しい証明書はhttps://rpm.nodesource.com/gpgkey/ns-operations-public.keyから手動でダウンロードし、インストール先のVMに、/etc/pki/rpm-gpg以下に配置します。その後以下のようなコマンドでインポートしてください。
sudo rpm --import /etc/pki/rpm-gpg/ns-operations-public.key
次は、インストールスクリプト自体の修正を行います。環境の更新に追従できていない部分があり、このままでは正常に動作しないため、少し手を入れる必要があります。インストールスクリプトは以下にあるのでダウンロードします。
https://github.com/node-red/linux-installers/releases/latest/download/update-nodejs-and-nodered-rpm
このスクリプトをテキストエディタで開いて、194~204行目をコメントアウトします。以下にコメントアウト済みの状態を提示します。
# check internet, if failure exit
#if curl -f https://www.npmjs.com/package/node-red >/dev/null 2>&1
#then
# echo " "
#else
# echo " "
# echo "Sorry - cannot connect to internet - not going to touch anything."
# echo "https://www.npmjs.com/package/node-red is not reachable."
# echo "Please ensure you have a working internet connection."
# echo " "
# exit 1
#fi
このスクリプトをVMの任意のディレクトリに置いて実行します。内部でsudoを使うので、sudoをパスワードなしで使えるユーザで実行してください。
bash update-nodejs-and-nodered-rpm
実行すると以下のようにメッセージが表示され、確認項目が2点質問されます。
**************************************
*** Node-RED RPM install Script ***
**************************************
No user has been set, this script is run as user 'opc'.
Would you like to change to the recommended the target user to 'nodered'? [y/N] y
Would you like to add Node-RED port 1880 to the firewall public zone ? [y/N] ? y
nodered : Node-RED update
1つ目はNode-REDをどのユーザで実行させるかという点です。通常はデフォルトの「nodered」でよいのでそのまま「y」を回答します。次は、Node-REDが使うポート1880をローカルファイアウォールで許可するかどうかを問われます。特別な理由がなければ「y」を回答します。これらの選択後、設定内容の確認メッセージが表示されるので問題なければ「y」で回答します。
Are you really sure you want to do this ? [y/N] ?y
すると、以下のようにインストール処理が始まり、実行中の過程が表示されます。
Stop Node-RED ✓
Install Node.js LTS ✓ Node v18.20.8 Npm 10.8.2
npm noticeNode-RED core
npm notice New major version of npm available! 10.8.2 -> 11.6.2
npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.6.2
npm notice To update run: npm install -g npm@11.6.2
npm notice
Install Node-RED core ✓ 4.1.0
Add shortcut commands ✓
Update systemd script ✓
Update public zone firewall rule ✓
今回はnpmのアップデートも走ってしまって多少表示が乱れましたが、最終的に以下のようなメッセージが表示されればインストール完了です。
Started Fri Oct 10 05:18:30 AM GMT 2025 - Finished Fri Oct 10 05:19:27 AM GMT 2025
後は、Node-REDのインストールしたVMの1880番ポートにWebブラウザで接続します。うまくいっていれば、以下のようにNode-REDの画面が表示されます。初回起動時には「更新の通知を有効化」が表示されるので、有効にしておいた方がいいでしょう。
これでNode-REDのインストールが完了しました。
Streamingサービスの導入
OCIのイベント機能とNode-REDを連携させるために、Streamingサービスを利用します。まず、パブリッククラウドサービスで提供されるStreamingを説明し、実際にOCIのStreamingサービスを設定してみます。
ストリーミングとは
ストリーミングとは、リアルタイムで生成されるデータを時系列で蓄積し、連続的に処理できるデータストア・メッセージングシステムです。AWSのKinesis、Microsoft AzureでのEvent Hubs、OSSのApache Kafkaなど多くのパブリッククラウドのサービスや独立アプリケーションが存在し、他にもSnowflakeやTinybirdのような分析系SaaSでも、サービスの一環としてこの機能を提供していることが多いです。
アプリケーションとしては以前から存在していたのですが、パブリッククラウドやデータ分析SaaSがマネージドのサービスを提供し始めてから利用が一気に拡大しました。その背景は大きく2つの変化があります。
1つは、データ量の急増です。以前は大量のデータを処理するのにバッチ処理が使われていました。一定期間のデータを保管しておき、一定の時間内でそれを一括処理する方式です。ですがデータ量が増えるに連れ、この方式では処理時間が追いつかなくなります。そのため、データ生成直後のリアルタイム処理が求められるようになりました。
もう1つは、サイトのサービス内容の高度化です。例えばECサイトによくある、おすすめ商品がユーザの閲覧履歴によってリアルタイムに更新される機能ですが、これを実現するには上記のようなバッチ処理では間に合いません。ほぼリアルタイムにユーザの閲覧履歴を取得・解析しおすすめ商品に反映させる必要があります。
こうしたニーズの高まりに加え、クラウドによるマネージド提供が加速させたことで、ストリーミングは特別な技術ではなく、企業の競争力を左右する基盤として一般化しつつあります。
さて、具体的な機能の説明に話を移しましょう。まずはストリーミングが格納するストリーミングデータとはどのようなものかを説明します。ストリーミングデータの主な特徴は以下の通りです。
- 時系列的
リアルタイムで生成されるデータを対象とするため、データが生成された時系列が重要です。 - 継続的
いつ発生するかを予測できないため、常にデータが到着する可能性を前提に扱う必要があります。 - 再現困難
データの再送信や再生成をするのは難しいことが多いです。そのため場合によってデータの欠落・欠損を前提にしたアーキテクチャが求められます。 - データ形式の多様性
生成元によって形式が統一されておらず、変換処理もリアルタイム性を損なうため、ほぼ「生データ」のまま送られてくることが多いです。
このようなデータを一時的に保管して利用するためのデータストレージが、ストリーミングというサービスです。特徴は以下の通りです。
- 複数データ生成元から送信されるデータを、時系列を維持しながら格納する。
- 複数データ取得先がデータを時系列通りに取得できる(それぞれで別のデータ位置から読み取り可能)。
- データ取得先はイベントドリブンでデータを取得できる(無駄なポーリングをしなくてよい)。
- データ形式に制限なし(テキストのみ対応でバイナリはテキストエンコーディグして格納という仕様もある)。
- 一つ一つのデータ自体は小さい(数MB以下。リアルタイム生成される分一つ一つは大きくない)。
- 複数のデータの一貫性を維持する機能はないことが多い(トランザクション機能など)。
- 一時的な格納(リアルタイムデータは処理が終わると不要になることが多い)。
ちなみにこのような方式は、パブリッシャー・サブスクライバー方式と呼ばれます。複数のパブリッシャー(データ生成元)と複数のサブスクライバー(データ取得先)が、ストリーミングのようなメッセージングシステムを仲介することで、シンプルかつ柔軟で拡張性のある構成で大量のメッセージを効率よく処理できます。
最後に、ストリーミングがよく使われる用途についても触れておきましょう。
- IoTアプリケーション
IoT(Internet of Things)、いわゆる「もののインターネット」では、様々に設置された多数のセンサが、リアルタイムで生成するデータを取得して保存する必要があります。センサからのデータを一時格納するために、ストリーミングは利用されます。多数のセンサから来る多様な生データをまずストリーミングに格納し、その後バックエンドのロジックがそれらを読み取り処理していきます。 - 機械学習・AI
リアルタイムで発生するセンサーデータなどを機械学習させる際にも、ストリーミングは使用されます。センサーデータを一度ストリーミングに格納してから、バックグラウンドで学習させていきます。 - リアルタイムレコメンデーション
ECサイトでよく見られる、ユーザの行動履歴を元にリアルタイムでおすすめ商品を変化させる機能ですが、ここにもストリーミングが使われることがあります。リアルタイムで生成されるユーザの行動履歴(HTTPアクセスログやDB変更履歴など)がまずストリーミングに格納され、随時バックエンドのロジックがそれを読み取り、おすすめ商品を更新していきます。 - 非同期メッセージングハブ
複数のモジュール間でデータの送受信が発生し、システム内のモジュール間の通信経路が複雑になる場合に、その間に入ってデータ生成側とデータ処理側の構成が独立した疎結合構成を実現するために用いられることもあります。
Streamingサービスの設定
それでは、OCI上でStreamingサービスを使用してみましょう。Streamingサービスを使用するには、まずストリーム・プールというものを作成してから、その中にストリームを作成します。まずは、OCIのメニューの「アナリティクスとAI」から「メッセージング」の下にある「ストリーミング」をクリックします。
すると、以下のようにStreamingサービスのトップ画面が表示されます。まずはストリーム・プールを作成するので、左上のメニューアイコンをクリックしてメニューを表示させ、その中の「ストリーム・プール」を選択します。
ストリーム画面のトップは以下のようになっているので、「ストリーム・プールの作成」ボタンを押します。
ストリーム・プールの作成画面は以下のようになります。
今回は以下のように設定します。
| 項目 | 設定内容 |
|---|---|
| ストリーム・プール名 | 「from-event」にします。 |
| リソース・コンパートメント | 任意のコンパートメントにします。 |
| エンドポイント・タイプの選択 | 「パブリック・エンドポイント」にします。 |
| 暗号化設定の構成 | 「Oracle管理キーを使用した暗号化」にします。 |
ちなみに、エンドポイント・タイプのパブリック・プライベートの種別ですが、パブリックはインターネットに公開されるというような意味ではなく、OCIの他のリソースからもサービスゲートウェイ経由でアクセスできるようにするという意味になります。一方プライベート・エンドポイントは特定のVCN/サブネット内に生成される形になるため、そのサブネットのアクセス制限が適用されます。今回は、後々OCIのイベントサービスから使用したいため、パブリックを使用します。
ここまで設定できたら、右下の「作成」ボタンを押して作成します。すると、以下のようにステータスが「アクティブ」表示になり、ストリーム・プールが作成されたことが確認できます。
ここで目的のストリーム・プールの名前(ここでは「from-event」)をクリックすると、詳細画面に移行します。この画面の「ストリーム」タブをクリックするとストリームの作成画面に移ります。
ストリームを作成するために、「ストリームの作成」ボタンを押します。
するとストリームの作成画面になるので、以下のように設定します。他の設定値はひとまずデフォルトのままでよいです。
| 項目 | 設定内容 |
|---|---|
| ストリーム名 | 「to-mailing-topic」にします。 |
| コンパートメント | 任意のコンパートメントにします。 |
| ストリーム・プール | 「既存のストリーム・プールの選択」に、先ほど作成した「from-event」を選択します。 |
ここまで設定したら、右下の「作成」ボタンを押して作成します。すると以下の画面に遷移し、作成されたことが確認できます。
Streamingサービスの動作確認
ここで、できあがったストリームの動作を確認します。上記ストリームの一覧表記から目的のストリーム名(今回は「to-mailing-topic」)をクリックすると、詳細画面に切り替わります。右上に「テスト・メッセージの生成」のボタンがあるのでクリックします。
以下のような画面が表示されるので、データの欄に適宜メッセージを入れ、右下の「生成」ボタンをクリックします。
戻った画面から「最近のメッセージ」タブに切り替え、「メッセージのロード」ボタンをクリックします。すると、その下に今入れたメッセージが出力されたことがわかります。ここは1分以内に生成されたメッセージしか表示されません。ゆっくりしていると見られなくなるので注意してください。
これでStreamingサービスを利用できるようになりました。
おわりに
Node-REDとStreamingサービスが稼働し、リアルタイムデータ処理の基盤が整いました。次回はこれらのサービスを実際に接続して、連携させていきます。お楽しみに。
プロフィール
石田 翼
ハードウェア側からインフラ業務に入ったのに今や1mmもハードウェアを使わないクラウドのお仕事が中心になって困惑しているインフラエンジニア。LinuxやOracle DBの設計・構築などに従事しつつスキルをクラウドシフト中。
タグ
- アーキテクト
- アジャイル開発
- アプリ開発
- インシデントレスポンス
- イベントレポート
- カスタマーストーリー
- カルチャー
- 官民学・業界連携
- 企業市民活動
- クラウド
- クラウドインテグレーション
- クラブ活動
- コーポレート
- 広報・マーケティング
- 攻撃者グループ
- もっと見る +
- 子育て、生活
- サイバー救急センター
- サイバー救急センターレポート
- サイバー攻撃
- サイバー犯罪
- サイバー・グリッド・ジャパン
- サプライチェーンリスク
- システム開発
- 趣味
- 障がい者採用
- 初心者向け
- 白浜シンポジウム
- 情シス向け
- 情報モラル
- 情報漏えい対策
- 人材開発・教育
- 診断30周年
- スレットインテリジェンス
- すごうで
- セキュリティ
- セキュリティ診断
- セキュリティ診断レポート
- 脆弱性
- 脆弱性管理
- ゼロトラスト
- 対談
- ダイバーシティ
- テレワーク
- データベース
- デジタルアイデンティティ
- 働き方改革
- 標的型攻撃
- プラス・セキュリティ人材
- モバイルアプリ
- ライター紹介
- ラックセキュリティアカデミー
- ランサムウェア
- リモートデスクトップ
- 1on1
- AI
- ASM
- CIS Controls
- CODE BLUE
- CTF
- CYBER GRID JOURNAL
- CYBER GRID VIEW
- DevSecOps
- DX
- EC
- EDR
- FalconNest
- IoT
- IR
- JSOC
- JSOC INSIGHT
- LAC Security Insight
- NDR
- OWASP
- SASE
- Tech Crawling
- XDR








