Red Hat OpenShift Platform 4 ハンズオンワークショップ紹介 〜Dev Module4:イベント駆動型サーバーレス編〜

Red Hatのソリューションアーキテクトの井上たかひろです。

「Module3:サービスメッシュによるアプリの制御とセキュリティ」に続いて「Dev Module4:イベント駆動型サーバーレス編」についてざっくり紹介いたします。

Cloud Native アプリケーションの作成し、Kafkaクラスターを作成し、イベントドリブンサービスに改修し、さらにはサーバレス化します。最後はTekton を使った CI/CD Pipelines の作成を実践します。

使うソフトウェア:Red Hat AMQ Streams(Apache Kafka ),Red Hat Runtimes(Quarkus, Spring BootNode.js), Red Hat Data Grid, Knative, Tektonなど

Module3:イベント駆動型サーバーレス編

ハンズオンで実施する項目

  • Cloud Native アプリケーションの作成
  • イベントドリブンサービスの作成(Kafkaクラスターの作成)
  • サーバレスの作成
  • Tekton を使った CI/CD Pipelines の作成

Cloud Native アプリケーションの作成

5 つのマイクロサービスを OpenShift上で開発します。
これらの アプリケーションは PostgreSQL や MongoDB 等の複数のデータソースとのトランザクションを持ちます。
特に、 Quarkus Extensions を使ってデータソースを簡単に設定する方法を学びます。
最終的には、エンドユーザー(顧客)の満足度を高めるために、 Cache(Data Grid)サーバー と統合することで、
ショッピングカートサービスの データトランザクションパフォーマンス を最適化します。

作ろうとしているアプリのアーキテクチャは以下になります。

f:id:tinoue0219:20210620095848p:plain:w800

ガイドを見ながら、やっていきます。
利用したことないプログラミング言語やフレームワークでも、ガイドに詳細に手順があるので、大丈夫です。
3つのアプリケーションができた状態です。赤枠の部分は、QuarkusとCache(Data Grid)のアプリの部分になります。
f:id:tinoue0219:20210620100106p:plain:w600

5つのアプリケーションができた状態です。 f:id:tinoue0219:20210620102330p:plain:w600

次では、一部をAMQ Streams(Apache Kafka ベース)を使って、イベントドリブンな処理を追加していきます。

イベントドリブンサービスの作成(Kafkaクラスターの作成)

ここでは、ショッピングカートと注文の実装を変更し、イベントドリブン/リアクティブアプリケーションとして決済サービスを追加します。
これらの アプリケーションでは、メッセージング/ストリーミングのバックボーンとして、AMQ Streams(Apache Kafka ベース)を使用します。
f:id:tinoue0219:20210620102554p:plain:w800

AMQ Streams は、OpenShift 上で Apache Kafka を簡単に構築できます
Kafka クラスターを作成します。
カタログからKafka クラスターを選びます。

f:id:tinoue0219:20210620103351p:plain:w600

Kafka クラスタを定義するYAMLエディタが表示されます。デフォルトのままCreateボタンを押すと、クラスターが作成できます。

f:id:tinoue0219:20210620103416p:plain:w600

次に、Kafka Topicを作成します。
カタログからKafka Topicを選びます。

f:id:tinoue0219:20210620103732p:plain:w600

KafkaTopicを定義する YAML エディタに入ります。
Topic名を orders に変更し、下部にあるCreateボタンを押すと、Topicが作成できます。

f:id:tinoue0219:20210620103753p:plain:w600

出来上がるとこのようになります。KafkaTopicはもう1つ追加しています。
簡単にKafkaが構築できてしまいます。

f:id:tinoue0219:20210620103939p:plain:w600

あとはガイドを見ながら、アプリケーションの修正や追加をやっていきます。

サーバレスの作成

ここでは、さきほど作成した決済サービスをサーバレスにします。

f:id:tinoue0219:20210620104942p:plain:w800

まずは、さきほど作成した決済サービスをネイティブ実行ファイルにして、高速起動、低メモリ消費にします。
これは GraalVM を使って実現しています。先行コンパイル、積極的なデッドコードの排除、起動ロジックの多くをビルド時に移動させるネイティブバイナリとしての最適なパッケージ化などにより、起動時間と必要なメモリリソースを大幅に削減します。
起動してみると、0.012secで12ミリ秒で起動していることがわかります。

__  ____  __  _____   ___  __ ____  ______
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
INFO  [io.quarkus] (main) getting-started 1.0-SNAPSHOT native (powered by Quarkus xx.xx.xx) started in 0.012s. <xxx>
INFO  [io.quarkus] (main) Profile prod activated.
INFO  [io.quarkus] (main) Installed features: [cdi, resteasy]

ガイドを見ながら、Kafkaのメッセージからネイティブ実行ファイルにしたアプリをサーバレスで起動する設定をやっていきます。
以下が完成した状態です。

f:id:tinoue0219:20210620121322p:plain:w600

Kafkaのメッセージを入れると、サーバレスでアプリが実行されます。また、 一定期間経過するとPodが停止します。

f:id:tinoue0219:20210620121443p:plain:w600

Tekton を使った CI/CD Pipelines の作成

サーバレスをやって結構満足になるのですが、まだ終わっていません。 最後に、 CI/CD Pipelines の作成をやります。
OpenShift Pipelines は、Cloud Native なCI/CDソリューションで、Tekton をベースにしたスタンダードな CI/CD パイプラインの定義ができ、 複数のプラットフォーム(Kubernetes、サーバーレス、VM など)におけるデプロイの自動化を可能にします。

ガイドを見ながら、パイプランを作っていきます。 f:id:tinoue0219:20210620122535p:plain:w600

実際にパイプランを実行した様子は以下になります。 f:id:tinoue0219:20210620122603p:plain:w600


手順の類はだいぶ端折っているので、短く感じるかもしれませんが、実際にハンズオンを行うとかなりのボリュームです。このモジュールが一番ボリュームがあります
ガイドに従って進めればAMQ Strems(Apache Kafka)の構築、Java(Quarkus)からのネイテイブアプリケーションの作成、Knativeでのサーバレースアプリ、Tekton を使った CI/CD Pipelinesの作成の流れが体験できます。
ワークショップにご興味があればご連絡ください。

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。