Cloud Code for IntelliJ でのローカル開発を高速化するには、ファイル同期とホットリロード、保存時の自動デプロイを利用します。そして、Skaffold モジュールを使用して、アプリケーションの一部を個別に開発します。
Skaffold ファイルの同期とホットリロードを有効にする
ローカルの開発用ワークフローの効率を高め、Pod の再ビルド、再デプロイ、再起動を行わずに済むように、Skaffold は変更されたファイルをデプロイ済みコンテナにコピーできます。つまり、静的ファイルとソースコード ファイルに変更を加えた場合、その変更は数秒で反映されるため、フィードバック ループが高速化されます。
静的ファイル(HTML ファイルや CSS ファイルなど)の場合、このファイルをコピーする動作はファイルの同期と呼ばれます。
ソースコード ファイルの場合、この動作はホットリロードと呼ばれ、次のファイル形式をサポートしています。
- Go: *.go
- Java: *.java, *.kt, *.scala, *.groovy, *.clj
- NodeJS: *.js、*.mjs、*.coffee、*.litcoffee、*.json
ホットリロードを構成すると、Skaffold はサポートされているファイルの変更を検出し、これらの変更をクラスタで実行中のコンテナに同期します。ホットリロードをサポートしていないファイル形式が変更されると、イメージの再ビルドがトリガーされ、Pod が再起動します。
Buildpacks を優先ビルダーとして使用している場合、ファイルの自動同期とホット リロードはデフォルトで有効になっています。Docker などの他のビルダーでは、カスタマイズするアーティファクトの skaffold.yaml
ファイルで sync
セクションを指定できます。
次の同期設定のいずれかを行うことができます(優先順位順)。
auto
: Skaffold が同期を自動的に構成します。(Jib および Buildpacks のアーティファクトのみ)これは Buildpack のデフォルトです。infer
: 変更された各ファイルの宛先は、ビルダーから推測されます。manual
: ローカル ワークスペース内のファイルと、実行中のコンテナ内での各ファイルの宛先を指定する必要があります。
skaffold.yaml
ファイル内の次のサンプル sync
セクションでは、manual
同期を指定して、すべての /static-html
HTML ファイルをコンテナ内の static
フォルダに同期しています。
build: artifacts: - image: gcr.io/k8s-skaffold/node-example context: node sync: manual: - src: 'static-html/*.html' dest: static
ファイルの同期と同期ルールの指定の詳細については、ファイル同期に関する Skaffold のガイドをご覧ください。
Kubernetes で開発する際の新機能を追加する
ファイル同期とホットリロードを設定したら、反復サイクルを開始してプロジェクトに機能を追加します。変更は Kubernetes Deployment にデプロイされます。Deployment の停止と削除、手動でのイメージのビルドとタグ付け、クラスタの更新は行われません。
標準的な反復サイクルは次のようになります。
プロジェクトに変更を加えます。たとえば、Cloud Code Java Guestbook アプリを使用する場合は、次のように新しいエンドポイントを
FrontendController
クラスに追加します。src/main/java/cloudcode/guestbook/frontend
からFrontendController.java
ファイルを開き、次のものを追加します。@RequestMapping("/greeting") @ResponseBody public String greeting(@RequestParam(value="name", defaultValue="World") String name) { return String.format("Hello from Kubernetes with IntelliJ, %s!", name); }
新しいアノテーションである
RequestMapping
とResponseBody
に必要なインポートを追加します。
変更を保存するか(
Ctrl
またはCmd+S
)、プロジェクトをビルドします。コンソール ウィンドウでは、進行状況とデプロイのログを確認できます。 変更がデプロイされたら、更新を確認します。
継続的な開発セッションを終了するには、[停止] アイコンをクリックします。
Cloud Code によって、開発セッションに使用されたすべての Kubernetes リソースが削除されます。
Skaffold 構成を使用してマイクロサービス アプリケーションを開発する
マイクロサービス アプリケーションを開発する場合は、デバッグとデプロイを簡素化するために別々のセクションに個別に取り組むと便利です。
アプリケーションを Skaffold モジュールに分割することで、アプリケーションの一部を個別に開発、デバッグできます。たとえば、Bank of Anthos サンプルは、10 個のマイクロサービスを含むアプリケーションです。サンプルの skaffold.yaml
ファイルでは、これらのサービスを setup
、db
、frontend
、backend
、loadgenerator
という名前の 5 つの skaffold モジュールにグループ化します。
Skaffold モジュールと構成の依存関係を定義する
Skaffold モジュールと構成の依存関係を定義するには、次の手順を行います。
モジュールを定義するプロジェクトを開きます。
skaffold.yaml
ファイルを開きます。skaffold.yaml
ファイルに複数の構成がある場合に、構成を Skaffold モジュールにするには、次の行を指定します。metadata: name: MODULE_NAME_1
たとえば、Bank of Anthos
skaffold.yaml
のdb
モジュールでは、データベースのデプロイを次のように定義します。現在の構成をデプロイする前に別の構成がデプロイされることに依存する構成の場合は、その構成を依存関係に追加する必要があります。構成依存関係を指定するには、
skaffold.yaml
ファイルのrequires
セクションにconfigs
リストを追加します。たとえば、Bank of Anthos の
skaffold.yaml
ファイルには、構成依存関係setup
が含まれています。依存関係を定義するには、次のものを
skaffold.yaml
ファイルに追加します。ここで、DEPENDENCY_NAME は依存関係の名前です。requires: - configs: DEPENDENCY_NAME
この方法でリストされた構成は、同じファイルまたは現在のプロジェクト内の他の
skaffold.yaml
ファイルで定義された依存関係を参照できます。構成の依存関係をテストするには、特定の Skaffold モジュールとその依存関係を構築するの手順に沿って、各 Skaffold モジュールを個別にビルドして、依存関係とともにデプロイされることを確認します。
特定の Skaffold モジュールとその依存関係を構築する
モジュールとその依存関係を定義したら、[Run] > [構成を編集]を選択するときに、[Build / Deploy] タブで実行するモジュールを指定できます。最新の Insiders ビルドをインストールします。
[Run] > [Edit configurations] に移動し、[Build/Deploy] タブを開きます。
[Skaffold 構成] で、skaffold.yaml を選択します。
次のいずれかを選択します。
- すべてのモジュールと依存関係を使用してビルドとデプロイする
- ビルドおよびデプロイ(モジュールが使用可能な場合)を行い、ビルドとデプロイするモジュールを選択します。
選択は、以降のデプロイで保持されます。 モジュールのサブセットを選択すると、Cloud Code は、システム全体ではなく、モジュールのサブセットをデプロイすることに関する警告を表示します。
Kubernetes での継続的な開発
必要なオプションで実行ターゲットを構成したら、アプリケーションの通常実行を選択するか、IDE で開発の反復サイクルを開始してソースに加えられた変更を反映し、ライブ アプリケーションの依存関係を定義できます。
Develop on Kubernetes の実行ターゲットは、Kubernetes クラスタ上で開発サイクルを開始します。開発サイクルが開始されると、Skaffold を使用して Cloud Code でプロジェクト用のイメージを作成し、タグ付けして構成済みのリポジトリに push し、kubectl を使用してプロジェクトの Kubernetes マニフェストをデプロイします。
- [Develop on Kubernetes] アイコンをクリックし、[構成の編集] をクリックして [実行 / デバッグ構成] ダイアログを開きます。
- 利用可能な構成オプションを使用してデプロイをカスタマイズします。
- 変更を保存した後に Cloud Code でアプリケーションを自動的に再デプロイする場合は、[Watch mode - rebuild and redeploy] で [On file save] を選択します。新しい Kubernetes アプリケーションでは、デフォルトで [On demand] が選択されています。ウォッチモードの詳細については、ウォッチモードをご覧ください。
- アプリケーションが Skaffold モジュールを使用するように構成されている場合は、特定のモジュールのみをビルドまたはデプロイするように選択できます。
- 構成に問題がなければ、[OK] をクリックして、[実行] アイコンをクリックします。
次のステップ
- ローカル開発に Cloud Code の組み込み minikube クラスタを使用する。
- Cloud Code でアプリケーションをデバッグする。
- Skaffold のファイル同期機能の詳細を確認する。