コンテンツに移動
デベロッパー

Cloud Code と Skaffold モジュールで Kubernetes マイクロサービス アプリケーションの開発とデバッグを迅速化

2022年2月2日
Google Cloud Japan Team

※この投稿は米国時間 2022 年 1 月 22 日に、Google Cloud blog に投稿されたものの抄訳です。

マイクロサービス アプリケーションの利用が広がってきました。それには十分な理由があります。マイクロサービス アプリケーションは、モノリシック アプリケーションに比べ柔軟性があります。また、コンテナ化されて Kubernetes にデプロイされた場合に優れたスケーラビリティを実現します。マイクロサービス アプリケーションを機能させるには、そのサービスすべてを実行する必要があります。

CI / CD パイプラインのためにまとまった 1 つのアプリケーションを構築しつつ、サブセットとしてマイクロサービスを開発するとなると問題が発生します。このような場合に、Skaffold モジュールを利用できます。

マイクロサービス デベロッパーは、Skaffold モジュールを利用すると、アプリケーションの各部分を個別にビルドしてデプロイできます。これにより、以下のことを実現する効率的な開発フローを確立できます。

  • マイクロサービスのサブセットのイテレーションとデバッグ

  • マイクロサービスの境界を越えたデバッグ

  • リモートの依存関係やビルド済みのアーティファクトを使用する際のビルド時間の短縮とイテレーションの迅速化

Skaffold は、クラウド ネイティブ アプリケーションの継続的な開発を容易にするコマンドライン ツールです。Skaffold は、アプリケーションのビルド、push、デプロイのワークフローを処理するとともに、CI / CD パイプラインを作成するための構成要素を提供します。

IDE を使用する Skaffold ユーザーがマイクロサービスを反復的に開発できるように、最近、Cloud Code にモジュールのサポートが追加されました。Cloud Code は、IntelliJ と Visual Studio Code 向けに Google Cloud が提供する IDE プラグインです。Cloud Code を使用すると、Skaffold を任意の環境で利用できるため、お好きな IDE でローカルで開発を行えます。

この投稿では、ご使用の IDE から Skaffold モジュールを使用してサンプルのマイクロサービス アプリケーションの開発とデバッグを行う方法を説明します。また、Skaffold モジュールのサポートを独自のアプリケーションに追加する方法も紹介します。

マイクロサービスを個別に開発、デバッグする

IntelliJ バージョンの Cloud Code を使用した Skaffold モジュールの実例を見てみましょう。Cloud Code のサンプルの Guestbook を使用して Skaffold モジュールを試してみます。サンプルの Guestbook は、Node.js、Java、Python、Go で使用できるシンプルなマイクロサービス アプリケーションです。

Visual Studio Code ユーザーの場合は、Cloud Code をインストールし、Google Cloud のドキュメントでサンプルの Kubernetes アプリを作成する方法モジュールを構成する方法をご確認ください。

始める前に

1. JetBrains IDE 向け Cloud Code プラグインをインストールします。

2. IntelliJ を開き、[File] > [New] > [Project…] > [Cloud Code: Kubernetes] > [Java: Guestbook] に移動して、Cloud Code プロジェクトを新規作成します。
https://storage.googleapis.com/gweb-cloudblog-publish/images/1_Skaffold.max-1000x1000.jpg

3. [Next] をクリックして、プロジェクトの作成を完了します。

アプリケーションを実行する

サンプルの Java Guestbook には、フロントエンドとバックエンドのマイクロサービスが含まれています。ご想像のとおり、フロントエンド マイクロサービスは UI を提供し、バックエンド マイクロサービスはデータベースのレコードの保存と取得を行います。サンプルの Guestbook アプリケーションの詳細については、サンプルの README.md ファイルを開いてご確認ください。

まず、「Develop on Kubernetes」構成を編集します。[Run] タブで、既存の Kubernetes クラスタを選択するか、[Deploy locally to a minikube cluster] を選択して minikube クラスタを無料で作成します。

https://storage.googleapis.com/gweb-cloudblog-publish/images/2_Skaffold.max-700x700.jpg

次に、「Develop on Kubernetes」構成を実行して、Guestbook アプリケーション全体をデプロイします。

https://storage.googleapis.com/gweb-cloudblog-publish/images/3_Skaffold.max-500x500.jpg

これで、Cloud Code によりサンプルの Guestbook アプリケーションがビルドされてコンテナにパッケージ化され、ご使用のマシン上で構成されている現在の Kubernetes クラスタにデプロイされます。アプリケーションがデプロイされると、[Run] ツール ウィンドウは次のようになります。各ステップをクリックすると、表示されるログの範囲が絞り込まれるため、特定のコンテナを確認できます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/4_Skaffold.max-1100x1100.jpg

ポート転送されたアプリケーションのエンドポイントにローカルでアクセスするには、[Service URLs] タブを開きます。URL の java-guestbook-frontend をクリックすると、アプリケーションが動作していることをテストできます。

アプリケーションが動作していることを確認できたら、停止ボタンをクリックします。Cloud Code によってアプリケーションが停止され、クラスタ内の Deployment がクリーンアップされます。

単一のマイクロサービスを実行する

お気づきのように、このアプリケーション全体のデプロイには時間がかかります。1 つのマイクロサービスしか開発しないときに、十数個ものマイクロサービスが含まれるもっと大規模なアプリケーションをデプロイしなければならない状況を想像してみてください。そのような状況で、Cloud Code と Skaffold モジュールが役立ちます。

次のように「Develop on Kubernetes」実行構成を編集して、[Build/Deploy] タブを選択してみましょう。

https://storage.googleapis.com/gweb-cloudblog-publish/images/5_Skaffold.max-1500x1500.jpg

ここには、アプリケーションのすべてのマイクロサービスが表示されています。このリストにマイクロサービスを表示するには、skaffold.yaml ファイルにそのマイクロサービスを Skaffold モジュールとして定義しておく必要があります。skaffold.yaml には、アプリケーションのワークフローの仕様が含まれます。このサンプルでは、すでに定義が済んでいます。

フロントエンド マイクロサービスをビルドしてデプロイしてみましょう。

https://storage.googleapis.com/gweb-cloudblog-publish/images/6_Skaffold.max-600x600.jpg

[OK] をクリックして、「Develop on Kubernetes」をもう一度実行します。今回は、Cloud Code によってフロントエンド マイクロサービスのみがビルド、デプロイされます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/7_Skaffold.max-1100x1100.jpg

バックエンド マイクロサービスをデプロイしていないので、フロントエンド マイクロサービスはデータのない単なる UI ビューです。フロントエンドのみをデプロイすることで、バックエンドが使用不可の場合にフロントエンドが適切に失敗することをテストできます。

マイクロサービスの開発とデバッグは、共有開発クラスタで行う可能性が高いです。共有開発クラスタでは、バックエンド チームが、フロントエンド マイクロサービスとやり取りできるバックエンド マイクロサービスをデプロイします。このようにして、バックエンド チームとフロントエンド チームは、Cloud Code IDE を活用しながら、より大規模なアプリケーションを個別に開発できます。

Skaffold モジュールを使用すると、バックエンド コードとフロントエンド コードは、同じリポジトリまたは別々のリポジトリに保持できます。すべてのモジュールが選択されている場合、skaffold.yaml ルートファイルで複数のマイクロサービスをまとめてビルドできます。各チームは、個別のモジュールを開発することで、それぞれの担当部分に取り組むことができます。Skaffold モジュールの一般的なユースケースの詳細については、Google Cloud のドキュメントをご覧ください。

アプリケーションの規模が大きく、それに含まれる独立したマイクロサービスが多いほど、このワークフローによる生産性の向上は顕著になります。

マイクロサービスをデバッグする

マイクロサービスのデバッグは、リモートの Kubernetes クラスタでマイクロサービスを実行するプロセスとほぼ同じです。「Develop on Kubernetes」構成をデバッグモードで実行します。

https://storage.googleapis.com/gweb-cloudblog-publish/images/8_Skaffold.max-800x800.jpg

Cloud Code により、Cloud Code 内のコンテナとアプリケーションが確実にデバッグ モードで実行され、それらのコンテナとアプリケーションが IDE に接続されます。

これで、ローカルで実行して操作しているかのようにブレークポイントを設定してから、リモート クラスタで実行されているアプリケーションの動作を確認できます。デバッグの詳細については、こちらをご覧ください。

アプリケーションの Skaffold モジュールを構成する

サンプルの Guestbook では、きわめてシンプルなマイクロサービス アプリケーションに Skaffold モジュールを使用する 1 つの方法を確認できます。小規模なマイクロサービス アプリケーションの開発に取り組んでいる場合は、サンプルの Guestbook の skaffold.yaml ルートファイルを参照してください。このルートファイルは、Skaffold 構成ファイルを構造化する際の最適な出発点となります。

読み込んでいます...

このルート構成ファイルには、対象のアプリケーションのすべてのマイクロサービスがリストされます。各マイクロサービスに、そのマイクロサービスをビルドして Kubernetes にデプロイする方法を定義する独自の Skaffold 構成が含まれます。このサンプルには、フロントエンドバックエンドの 2 つの Skaffold 構成が含まれています。

ローカルの開発用ルート(ローカルの MySQL インスタンスまたは PostgreSQL インスタンスでバックエンドを構成するものや、特定の Skaffold プロファイルを有効にするものなど)といった他のルート構成を指定することもできます。

Skaffold モジュールの大規模な実装例については、Bank of Anthos アプリケーションをご確認ください。Bank of Anthos アプリケーションは、5 つ以上の大規模なマイクロサービスが Skaffold モジュールとして構成されており、Cloud Code IDE で完全にサポートされています。これは、Cloud Code による開発と Cloud Deploy によるデプロイに同じ Skaffold 構成を使用できる大規模なアプリケーションの優れた例です。

Skaffold モジュールの構成の詳細については、Skaffold のドキュメントをご覧ください。

次のステップ

マイクロサービス プロジェクトを Skaffold モジュールで構成して、Skaffold と Cloud Code の優れた機能と生産性向上を体験してみることをおすすめします。

サポートが必要な場合は、GCP コミュニティの Slack チャンネル(#cloud-code)にご参加ください。コミュニティとの交流を通してご不明な点などをお問い合わせいただけます。

Skaffold と Cloud Code が連動する仕組みの詳細については、Kubernetes 開発の簡素化 - Skaffold が一般提供へをご覧ください。

- ソフトウェア エンジニア Ivan Portyankin

- デベロッパー アドボケイト Abby Carey

投稿先