このブログは、
SAP Advent Calendar 2020 の12月17日分の記事として執筆しています。
はじめに
このブログでは、Kyma Environment でサーバレス開発をする方法を共有します。現在 SAP Cloud Platform には、以下 3 つの環境があります。
- Cloud Foundry Environment
- ABAP Environment
- Kyma Environment
Kyma Environment は、フルマネージドな Kubernetes ベースのランタイムを提供します。これにより、私たちはマイクロサービスとサーバレスの両方を使用して拡張開発をすることができます。
サーバレスとは、アプリケーションのインフラをクラウドプロバイダが管理するアーキテクチャのことです。サーバの管理をすることなく、柔軟なスケーラビリティと高可用を実現することができます。また、ステートレスでイベントドリブンなロジックを実装したい場合には、高い費用対効果が期待できます。需要に応じたダイナミックなリソース割当を行うことができるため、アイドル状態時のコストは発生しません。
Kyma は、AWS や Azure、GCP のようなクラウドプロバイダと同様に、Function as a Service (FaaS) を提供します。このブログでは、非常にシンプルな関数を Kyma Environment にデプロイして、API エンドポイントを公開します。
では、早速やってみましょう。
開発手順
1. Kyma 環境の有効化
SAP Cloud Platform のトライアル環境にログインして、Kyma 環境を有効化します。利用可能になるまで、1 時間〜2 時間ほどかかります。

Enable Kyma
Entitlements が設定されていないと、Kyma 環境の有効化ができません。ボタンが表示されない場合は、以下の設定を確認します。

Set Entitlements
2. ロールの割当
Kyma のコンソール UI にアクセスするためのロールを作成して、ユーザに割当ます。今回は、Kyma ランタイムトライアルで提供されるすべての機能にアクセスできる管理者ロールを作成します。
最初に、ロールコレクションを作成します。

Create Role Collection
作成したロールコレクションに KymaRuntimeNamespaceAdmin ロールを追加します。続いて、ロールコレクションを割り当てるユーザを指定します。

Edit Role Collection
3. Kyma コンソール UI を開く
Link to Dashboard をクリックして、Kyma コンソールにアクセスします。

Go to Kyma Console UI

Kyma Console UI
Kubernetes のコマンドラインツールである kubectl を利用することもできます。その場合は、右上のユーザアイコン > Get Kubeconfig をクリックして、クラスタにアクセスするための設定ファイルをダウンロードします。
Kubeconfig には有効期限があり、有効期限が切れたら再ダウンロードする必要があります。

Get Kubeconfig
4. Namespace の作成
新しい Namespace を作成します。

Add New Namespace
5. Function の作成
作成した Namespace を選択して、Development > Functions をクリックします。

Click Functions
Create Function をクリックして、Function を作成します。

Create Function
Runtime は、以下がサポートされています。
- Node.js 12
- Node.js 10
- Python 3.8
Source Type は Inline editor と Git Repository から選択することができます。
初期状態のソースコードはこちらです。main 関数がエントリポイントで、event と context パラメータを受けつけます。
Inline Editor
実際の開発では、依存パッケージを必要とすることが多いです。Dependencies タブから、package.json / requirements.txt を書くことができます。

Dependencies
また、Resources タブでは Scaling Options や Runtime Profile、Build Job Profile などが設定できます。あらかじめ用意されたプリセットから選択するか、カスタムで独自のサイズを指定することもできます。

Resources
6. API エンドポイントの設定
クラスタ内の関数にアクセスするためには、
{function-name}.{namespace}.svc.cluster.local エンドポイントを使用します。クラスタ外に関数を公開するためには、API Rules を構成する必要があります。
Configuration タブ > API Rules > Expose Function をクリックします。

Expose Function
今回は、次のような設定としました。認証方式は、OAuth2 や JWT を構成することができます。

Create API Rule
API Rule が作成されました。ステータスが OK になっていることを確認します。

API Rule Status
7. API のテスト
では、実際にエンドポイントにアクセスします。ステータスコード 200 で、Hello World! が表示されました。

Test with Postman
なぜ Kyma なのか
関数を作成して、API として公開しました。非常に簡単に出来ることが分かりましたが、同時にある疑問が湧いてきました。なぜ SAP Cloud Platform, Kyma Runtime なのか、ということです。直接 Kubernetes を使ってもいいですし、FaaS で言えば SAP Cloud Platform Functions があります。マイクロサービスで言えば Cloud Foundry 環境でも同じことができるはずです。そこで、Kyma の存在意義について少し考えてみます。
Kubernetes は、コンテナの運用管理と自動化を目的に設計されたオープンソースのプラットフォームです。コンテナのライフサイクルを管理するための多くのコンポーネントが提供されていますが、アプリケーション固有の目的に応じて必要なコンポーネントを選択し使いこなすためには、専門的な知見や高いスキルが必要になります。オープンソースコミュニティでは、多様なニーズに対応するために、多くのプロジェクトが開発されてきました。このように、柔軟性があり自由度が高いことはメリットとも言えますが、その一方で、どのプロジェクトを使えばよいのか、選択が困難になる場合があります。また、運用面を考慮すると、継続的な調査や学習も必須になるでしょう。
Kyma は、モノシリックなソフトウェアの拡張や統合を簡単に実現するために必要なプロジェクトの集合体で構成されています。マイクロサービスアーキテクチャ、イベント、認証、ログ / 監視などに対応しています。今回は使用しませんでしたが、サービスカタログでは、オープンサービスブレーカーを使用して、様々なクラウドサービス、アプリケーションと接続することができます。Kyma に含まれるこれらのプロジェクトは、オープンソースコミュニティによって継続的にメンテナンスや修正が行われます。統合するアプリケーションやシステム、依存関係を気にすることなく、統一された方法で実装できることは、エンジニアにとって非常に喜ばしいことです。

Kyma Components

Service Catalog - Services

Service Catalog - Add-Ons
つまり Kyma は、オープンでシンプルな、クラウド拡張 / 統合のための共通プラットフォームです。Kubernetes を強く意識することなく、プラットフォームとして各機能を使うことができます。サーバレスもコンテナも、ひとつのランタイムでメッシュ化されるのも特徴的です。SAP Cloud Platform Functions でも、Cloud Foundry 環境でも、確かに同じことはできると思います。しかし、サーバレスとマイクロサービスをひとつのランタイムで開発でき、統一された手法でオープンかつセキュアに、クラウドネイティブ開発ができる Kyma は、使えば使うほど、よりメリットを感じることができそうです。
さて、Kyma はオープンソースプロジェクトなので、オープンソースバージョンをインストールして独自に環境を用意することもできます。ただし、私たちが本来やりたいことはもっとシンプルなはずです。特別な利用がない限りは、SAP Cloud Platform, Kyma Runtime で問題ありません。既存のサービスを柔軟に組み合わせながら、素早くクラウドネイティブに開発したい。そんな時には、Kyma を検討してみてはいかがでしょうか。
参考情報
Kyma