Camel の開発ツール - Camel JBang (Camel CLI) のご紹介 (2)

レッドハットのソリューションアーキテクトの森です。

Red Hat build of Apache Camel(旧 Red Hat Fuse)では、開発のためのツールをいくつかご用意しています。

今回は、Camel JBang の Kubernetes Plugin をご紹介します。 Camel JBang Kubernetes Plugin を使うと、ローカル環境でカジュアルにCamelのルートを試すのと同じ感覚で、コマンド一発でKubernetesクラスタにデプロイしたり削除したりできます。

前回の記事はこちら

rheb.hatenablog.com

事前準備

以下のものをインストールしておきます。

  • JBang
  • Camel JBang (Camel CLI)
  • OpenShift CLI

JBang 及び Camel JBang (Camel CLI) のインストールについては、前回記事を参照ください。

OpenShift CLI のインストール手順については、製品ドキュメントを参照ください。

今回使用するCamelのサンプルについて

指定した都市の3日間分の気温予測データを取得する、REST APIサービスを作ってみます。

今回は2つの Free API を組み合わせて作ります。

  • Open-Meteo:
    • 無料の気象データ API で、緯度・経度を指定して、その地点の天気予報を取得可能。
  • GeoDB Cities:
    • 都市や地域に関する詳細な地理データ(緯度、経度、人口、標高、時差、ISO コードなど)を取得可能。

以下は サンプルのフローです。VSCodeの拡張機能として提供しているGUIエディタの Kaoto で作成しています。

サンプルのソースコードです。

- route:
    id: route-3280
    from:
      id: from-2281
      description: /temp
      uri: platform-http
      parameters:
        path: /temp
      steps:
        - setVariable:
            name: location
            simple:
              expression: ${header.location}
        - removeHeaders:
            pattern: "*"
        - toD:
            description: geodb-free-service.wirefreethought.com/v1/geo/places
            uri: http
            parameters:
              httpMethod: GET
              httpUri: geodb-free-service.wirefreethought.com/v1/geo/places
              limit: 1
              namePrefix: ${variable.location}
              sort: -population
        - unmarshal:
            json:
              library: Jackson
        - removeHeaders:
            pattern: "*"
        - toD:
            description: api.open-meteo.com/v1/forecast
            uri: https
            parameters:
              daily: temperature_2m_max,temperature_2m_min
              forecast_days: 3
              httpMethod: GET
              httpUri: api.open-meteo.com/v1/forecast
              latitude: ${body[data][0][latitude]}
              longitude: ${body[data][0][longitude]}
        - unmarshal:
            json:
              library: Jackson
        - setBody:
            simple:
              expression: |-
                {
                  "city": "${variable.location}",
                  "unit": "celsius",
                  "temperature": {
                    "today": {
                      "maximum": "${body[daily][temperature_2m_max][0]}",
                      "manimum": "${body[daily][temperature_2m_min][0]}"
                    },
                    "forecast": {
                      "${body[daily][time][1]}": {
                        "maximum": "${body[daily][temperature_2m_max][1]}",
                        "manimum": "${body[daily][temperature_2m_min][1]}"
                      },
                      "${body[daily][time][2]}": {
                        "maximum": "${body[daily][temperature_2m_max][2]}",
                        "manimum": "${body[daily][temperature_2m_min][2]}"
                      }
                    }
                  }
                }

Camel JBang Kubernetes Plugin で OpenShift にデプロイしてみる

それでは、Camel JBang Kubernetes Plugin を使って、サンプルをOpenShiftにデプロイしてみます。

まずはローカルの環境に、上記のサンプルコードをyaml形式で保存し、OpenShift CLI で OpenShiftにログインした状態にします。

Kubernetes Plugin は、以下のコマンドで Camel JBangに追加することができます。

camel plugin add kubernetes

インストールされている Plugin は、以下のコマンドで確認できます。

camel plugin get

Kubernetes Plugin がリストに表示されていればOKです。

 NAME        COMMAND     DEPENDENCY                                      DESCRIPTION
 kubernetes  kubernetes  org.apache.camel:camel-jbang-plugin-kubernetes  Run Camel applications on Kubernetes

Kubernetes Plugin の詳細については以下のリンクを参照してください。

Camel Kubernetes plugin :: Apache Camel

Kubernetes Plugin を使って OpenShift にデプロイをするには、以下のコマンドを実行します。 今回は REST API で OpenShiftに外部からアクセス可能にするための Route 生成と、Route における TLS Termination 設定 をオプションで指定しました。

camel kubernetes run sample.yaml \
    --cluster-type=openshift \
    --trait route.enabled=true \
    --trait route.tls-termination=edge

デフォルトではランタイムは Quarkus が選択されますが、--runtime=spring-boot を指定すると、Spring Boot のアプリケーションとしてデプロイされます。

ローカル上でコマンドを実行すると、OpenShift上でビルドが始まります。

しばらくすると、ビルドが完了して、アプリケーションが起動します。 Route に 記載されたURLに、/temp?location=<都市名> でアクセスします。(残念ながら都市名は日本語には対応していません・・・!)

上記の通り、札幌の3日間分の気温予報データを取得することができました。

おわりに

いかがでしょうか?

Camel JBang Kubernetes Plugin は、手軽さと素早い実行にフォーカスしており、 Kubernetes や OpenShift 上でのCamelアプリケーションの開発に非常に便利です。 設定作業や準備も最小限で済むため、PoCや小規模実装のスタートアップに特にメリットがあります。

Red Hat build of Apache Camel に関して興味がある・もう少し詳しい内容が聞きたい、などありましたら、是非弊社までお問合せ頂ければと思います。

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