LAC WATCH

セキュリティとITの最新情報

RSS

株式会社ラック

メールマガジン

サイバーセキュリティや
ラックに関する情報をお届けします。

Facebook X Instagram
サービス・製品 | 

OCIでローコード開発環境を用意してStreamingサービスと連携してみる(2)

クラウドサービス部の石田です。

運用の場面でも使いやすいローコード開発環境をOracle Cloud Infrastructure(以下、OCI)上に構築する連載の第1回では、Node-REDとStreamingサービスの準備までをご説明しました。第2回となる今回は、これらを接続し連携させていきましょう。

StreamingサービスのKafka API互換機能

Node-REDとStreamingサービスを連携させるやり方はいくつか考えられますが、今回はStreamingサービスのKafka API互換機能を利用します。

Kafkaは、リアルタイムのストリーミング処理を実現するOSSで、ストリーミングのソフトウェアとしてはデファクトスタンダードと言えます。そのため、主要なパブリッククラウドのサービスでもKafkaと互換機能を持つものは多くあります。Microsoft AzureではEvent Hubs、AWSではManaged Streaming for Apache Kafkaなど、Kafkaクライアントから直接利用できる仕組みが整っています。

今回利用するStreamingサービスもKafkaのAPIと互換性を備えており、様々なKafkaクライアントから接続可能です。そしてNode-REDにもKafkaのクライアント機能を持ったノードが提供されているため、GUIベースでストリーミング連携を構築できます。今回はこれらを用いてNode-REDとStreamingサービスを接続していきます。

Streamingサービス側の準備

Kafka API互換機能を使用するには、権限の設定が必要です。OCIのIAMユーザの権限で接続する形になるので、Kafka API接続用の専用IAMユーザを作成した後、そのユーザに権限を与えます。

IAMユーザ・グループの作成

通常の手順でOCIコンソールやOCI CLIでユーザを作成します。既存のユーザの兼用も可能ですが、実際のシステムに使用する場合はStreamingサービス接続専用のアカウントにしておきましょう。また権限付与用のグループを作成し、作成したユーザを参加させておきます。

認証トークンの作成

先の手順で用意したユーザでログインし、認証トークンを作成します。一般的な手順なので公式ドキュメント※1等を参考にして実施してください。できたトークンは保管しておきます。すでに作成済みの転用可能なトークンがあれば、それを使用しても構いません。

※1 認証トークンの作成

権限付与

権限付与のために以下のようなポリシーを作成します。

Allow group <your-group> to manage stream-family in compartment <your-compartment>

ここで<your-group>は先ほど作成した権限付与用のグループを指定します。<your-compartment>は今回ストリームを作成したコンパートメントを指定します。

このポリシーは、Kafka API互換機能を使用する際は明示的に設定する必要があります。all-resourcesでまとめて権限付与するだけではこのAPI互換機能は利用できないようなので、注意が必要です(Streamingサービスのネイティブ接続の方は、all-resourcesでの権限付与だけで利用可能です)。

接続情報確認

ここまで設定できれば、Kafka API互換機能を使えるようになっています。最後にこの機能をクライアントから利用するための接続情報を確認しましょう。

最初の手順で用意したIAMユーザでログインし、ストリーム・プールの詳細画面に移動します。「Kafka接続設定」のタブをクリックすると、Kafka APIに接続するのに必要な各種情報が表示されるので、コピーして保存しておいてください。特に必要なのは「ブートストラップ・サーバー」と「SASL接続文字列」です。

ストリーム・プールの詳細画面の「Kafka接続設定」のタブ表示

Node-RED側の準備

Node-RED側を設定します。

Node-REDではサードパーティーからKafka接続用のノードが提供されています。複数あるのですが、今回は「node-red-contrib-rdkafka-secure」というノードを使用します。これはlibrdkafkaというライブラリを使用しており、このライブラリはStreamingサービスでサポートが(ベストエフォートと断りはありますが)明示されているからです。※2

※2 Apache Kafkaでのストリーミングの使用 Kafkaクライアント

このノードをインストールする際はコンパイルが発生するので、まずはOS側で必要な設定を行います。Node-REDをインストールしたVMにログインし、以下のコマンドを実行します。コンパイル環境と、「node-red-contrib-rdkafka-secure」のコンパイルに必要なライブラリのインストールになります。

sudo dnf groupinstall "Development Tools"
sudo dnf install openssl-devel lz4-devel cyrus-sasl-devel compat-openssl11

次はNode-RED上の設定です。Node-REDにWebブラウザで接続し、右上のハンバーガーメニューから「パレットの管理」を選択します。

Node-REDのハンバーガーメニューから「パレットの管理」を選択

すると、パレットの管理画面が表示されるので、「ノードを追加」に切り替えた後、検索欄から「node-red-contrib-rdkafka-secure」を検索します。検索された「node-red-contrib-rdkafka-secure」から「ノードを追加」ボタンをクリックします。

パレットの管理画面の「ノードを追加」タブの表示

以下のように確認メッセージが表示されるので、「追加」ボタンをクリックしインストールを開始します。インストール時にはコンパイルを行うので1分ほど時間がかかります(ARMの場合)。

確認のメッセージウインドウ。「追加」ボタンをクリック。

インストールが終わり「現在のノード」タブに切り替えると、そこに「node-red-contrib-rdkafka-secure」が表示されていることがわかります。

パレットの管理画面の「現在のノード」タブ表示

ここまでできれば、Node-REDの画面右側のノードリストの「ネットワーク」の下に、「Kafka in」「Kafka out」の2つのノードが表示されるようになります。

Node-REDの画面右側に表示されるノードリスト

動作確認

それでは試しにNode-REDとStreamingサービスを接続してみましょう。Node-REDの画面で「Kafka in」をドラッグアンドドロップして、中央のフロー画面に配置します。

フロー画面

この「Kafka in」のノードをダブルクリックして設定を行います。表示された画面から、まずはKafkaブローカー(Kafkaサービスを提供しているインスタンス)の設定をします。Broker欄の「+」ボタンを押してください。

「Kafka inのノードを編集」画面。Broker欄のプラスボタンを押す。

以下のような画面になるので設定していきます。先ほど「Streamingサービス側の準備」で取得したKafka接続設定の情報を使うので、用意しておいてください。

Broker設定ノードの追加を確認する画面。
項目 設定内容
Broker List Kafka接続設定の「ブートストラップ・サーバー」の内容を記載します。
Client ID 空欄
Security protocol 「sasl_ssl」を選択します。
SASL mechanism 「PLAIN」を選択します。
SASL username Kafka接続設定の「SASL接続文字列」の中の、「username=」で指定されている値を記載します。
SASL password 「IAMユーザ・グループの作成」で用意した、Streamingサービス接続用のIAMユーザの認証トークンを記載します。
SSL CA location 空欄
Enable SSL cert verification デフォルト(チェック済み)

設定ができたら、右上の「追加」ボタンを押します。

Kafka inノードの編集画面に戻るので、以下のように設定します。

Kafka inノードの編集画面

Brokerには今設定したものが入っているはずなので、他に設定する必要があるのは「Topic」だけです。これはStreamingサービスでいうストリームのことなので、今回作成したストリームである「to-mailing-topic」を記入します。これで設定は終わりなので、右上の「完了」ボタンをクリックします。

次はフローの構成画面で「debug」ノードを配置しKafka inノードと接続します。

フローの構成画面

このノードは、前ノードから流れてきた情報を右側のデバッグウインドウに表示するノードです。これでStreamingサービスの「to-mailing-topic」ストリームに書き込まれたメッセージがKafka inノードに読み取られ、debugノードに受け渡されてこのデバッグウインドウに表示されることになります。ここまでできたら、Node-RED画面右上の「デプロイ」ボタンを押します。うまくいけばデプロイ成功のメッセージが表示され、フロー画面のKafka inノードの下に「connected」のメッセージが表示されます。

Kafka inノードの下に「connected」のメッセージが表示される

この状態で、先ほど「Streamingサービスの動作確認」でやったようにテスト・メッセージを送ります。

テスト・メッセージの生成画面

すると、Node-REDのデバッグウインドウにそのメッセージが表示されます。

Node-REDのデバッグウインドウ

これでStreamingサービスとNode-REDの間で通信ができるようになりました。逆方向(Node-REDのフローからStreamingサービスにメッセージを書き込む)の機能もありますが、今回使うのはこの方向のみなので、動作確認はこれまでにしておきます。逆方向の動作確認は読者諸氏で挑戦してみてください。

おわりに

StreamingサービスとNode-REDの間で通信できるようになり、リアルタイム処理を前提としたさまざまな連携が可能になりました。次回はこれを使って簡単なフローを作って動かしてみたいと思います。それではお楽しみに。

プロフィール

石田 翼

石田 翼
ハードウェア側からインフラ業務に入ったのに今や1mmもハードウェアを使わないクラウドのお仕事が中心になって困惑しているインフラエンジニア。LinuxやOracle DBの設計・構築などに従事しつつスキルをクラウドシフト中。

この記事は役に立ちましたか?

はい いいえ

関連記事

LAC WATCH

関連記事をご紹介します

  • OCIでローコード開発環境を用意してStreamingサービスと連携してみる(1)

    OCIでローコード開発環境を用意してStreamingサービスと連携してみる(1)

  • 「OCIセキュリティ導入支援サービス」で始める、安心・安全なクラウド運用の第一歩

    「OCIセキュリティ導入支援サービス」で始める、安心・安全なクラウド運用の第一歩

  • OCI Functionsサービスでイベント通知メールを成型してみる(1)

    OCI Functionsサービスでイベント通知メールを成型してみる(1)

page top