Skip to Content
Technical Articles

Kymaではじめるサーバレス

このブログは、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%20Kyma

Enable Kyma

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

Set%20Entitlements

Set Entitlements

2. ロールの割当

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

最初に、ロールコレクションを作成します。

Create%20Role%20Collection

Create Role Collection

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

Edit%20Role%20Collection

Edit Role Collection

3. Kyma コンソール UI を開く

Link to Dashboard をクリックして、Kyma コンソールにアクセスします。

Go%20to%20Kyma%20Console%20UI

Go to Kyma Console UI

Kyma%20Console%20UI

Kyma Console UI

Kubernetes のコマンドラインツールである kubectl を利用することもできます。その場合は、右上のユーザアイコン > Get Kubeconfig をクリックして、クラスタにアクセスするための設定ファイルをダウンロードします。

Kubeconfig には有効期限があり、有効期限が切れたら再ダウンロードする必要があります。

Get%20Kubeconfig

Get Kubeconfig

4. Namespace の作成

新しい Namespace を作成します。

Add%20New%20Namespace

Add New Namespace

5. Function の作成

作成した Namespace を選択して、Development > Functions をクリックします。

Click%20Function

Click Functions

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

Create%20Function

Create Function

Runtime は、以下がサポートされています。

  • Node.js 12
  • Node.js 10
  • Python 3.8

Source Type は Inline editor と Git Repository から選択することができます。

初期状態のソースコードはこちらです。main 関数がエントリポイントで、event と context パラメータを受けつけます。

Inline%20Editor

Inline Editor

実際の開発では、依存パッケージを必要とすることが多いです。Dependencies タブから、package.json / requirements.txt を書くことができます。

Dependencies

Dependencies

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

Resources

Resources

6. API エンドポイントの設定

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

Configuration タブ > API Rules > Expose Function をクリックします。

Expose%20Function

Expose Function

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

Create%20API%20Rule

Create API Rule

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

API%20Rule%20Status

API Rule Status

7. API のテスト

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

Test%20with%20Postman

Test with Postman

 

なぜ Kyma なのか

関数を作成して、API として公開しました。非常に簡単に出来ることが分かりましたが、同時にある疑問が湧いてきました。なぜ SAP Cloud Platform, Kyma Runtime なのか、ということです。直接 Kubernetes を使ってもいいですし、FaaS で言えば SAP Cloud Platform Functions があります。マイクロサービスで言えば Cloud Foundry 環境でも同じことができるはずです。そこで、Kyma の存在意義について少し考えてみます。

Kubernetes は、コンテナの運用管理と自動化を目的に設計されたオープンソースのプラットフォームです。コンテナのライフサイクルを管理するための多くのコンポーネントが提供されていますが、アプリケーション固有の目的に応じて必要なコンポーネントを選択し使いこなすためには、専門的な知見や高いスキルが必要になります。オープンソースコミュニティでは、多様なニーズに対応するために、多くのプロジェクトが開発されてきました。このように、柔軟性があり自由度が高いことはメリットとも言えますが、その一方で、どのプロジェクトを使えばよいのか、選択が困難になる場合があります。また、運用面を考慮すると、継続的な調査や学習も必須になるでしょう。

Kyma は、モノシリックなソフトウェアの拡張や統合を簡単に実現するために必要なプロジェクトの集合体で構成されています。マイクロサービスアーキテクチャ、イベント、認証、ログ / 監視などに対応しています。今回は使用しませんでしたが、サービスカタログでは、オープンサービスブレーカーを使用して、様々なクラウドサービス、アプリケーションと接続することができます。Kyma に含まれるこれらのプロジェクトは、オープンソースコミュニティによって継続的にメンテナンスや修正が行われます。統合するアプリケーションやシステム、依存関係を気にすることなく、統一された方法で実装できることは、エンジニアにとって非常に喜ばしいことです。

Kyma%20Components

Kyma Components

Service%20Catalog%20-%20Services

Service Catalog – Services

Service%20Catalog%20-%20Add-Ons

Service Catalog – Add-Ons

つまり Kyma は、オープンでシンプルな、クラウド拡張 / 統合のための共通プラットフォームです。Kubernetes を強く意識することなく、プラットフォームとして各機能を使うことができます。サーバレスもコンテナも、ひとつのランタイムでメッシュ化されるのも特徴的です。SAP Cloud Platform Functions でも、Cloud Foundry 環境でも、確かに同じことはできると思います。しかし、サーバレスとマイクロサービスをひとつのランタイムで開発でき、統一された手法でオープンかつセキュアに、クラウドネイティブ開発ができる Kyma は、使えば使うほど、よりメリットを感じることができそうです。

さて、Kyma はオープンソースプロジェクトなので、オープンソースバージョンをインストールして独自に環境を用意することもできます。ただし、私たちが本来やりたいことはもっとシンプルなはずです。特別な利用がない限りは、SAP Cloud Platform, Kyma Runtime で問題ありません。既存のサービスを柔軟に組み合わせながら、素早くクラウドネイティブに開発したい。そんな時には、Kyma を検討してみてはいかがでしょうか。

 

参考情報

Kyma

Be the first to leave a comment
You must be Logged on to comment or reply to a post.