Spring Boot Kotlin アプリをコンテナ化して、Cloud Run にデプロイします。

Spring Boot Kotlin アプリをコンテナ化して Cloud Run にデプロイする

この Codelab について

subject最終更新: 4月 22, 2020
account_circleGoogle 社員により作成

1. 始める前に

Google では、Java アプリケーション向けに最適化された Docker コンテナ イメージを Docker や Dockerfile なしで簡単にビルドし、公開できる強力なイメージビルド ツールを提供しています。Google Cloud は、ステートレス コンテナを自動的にスケールするマネージド コンピューティング プラットフォームである Cloud Run を使用して、コンテナにサーバーレスを実現します。この Codelab では、Spring Boot Kotlin アプリのコンテナ化、Container Registry への公開、Google Cloud でのイメージのシームレスな実行がいかに簡単かについて学習します。

この Codelab では、Kotlin でシンプルなアプリを設定する方法について説明します。このアプリでは、JibContainer RegistryCloud Run などの Google Cloud サービスとツールを使用します。

Prerequisites

  • Java プログラミング言語とツールに精通していること
  • Linux の標準的なテキスト エディタ(Vim、Emacs、nano など)に関する知識

演習内容

  • Spring Boot Kotlin アプリを設定します。
  • 最適化された Docker イメージをビルドします。
  • イメージを Container Registry に公開します。
  • コンテナ化されたアプリを Cloud Run で実行する。

必要なもの

  • Google Cloud プロジェクト
  • Google Chrome などのブラウザ

2. 設定方法

セルフペース型の環境設定

  1. Cloud Console にログインして新しいプロジェクトを作成するか、既存のプロジェクトを再利用します。(Gmail または G Suite アカウントをまだお持ちでない場合は、作成する必要があります)。

プロジェクト ID を忘れないようにしてください。プロジェクト ID はすべての Google Cloud プロジェクトを通じて一意の名前にする必要があります(上記の名前はすでに使用されているので使用できません)。以降、このコードラボでは PROJECT_ID と呼びます。

  1. 次に、Google Cloud リソースを使用するために、Cloud Console で課金を有効にする必要があります。

この Codelab を実施した場合、費用は数ドルを超えることはありませんが、より多くのリソースを使用する場合や、実行を継続する場合は、さらにコストがかかる可能性があります。

Google Cloud の新規ユーザーは 300 ドル分の無料トライアルをご利用いただけます。

Cloud Shell

Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では Google Cloud で実行されるコマンドライン環境である Cloud Shell を使用します。

Cloud Shell をアクティブにする

  1. Cloud Console で、Cloud Shell をアクティブにするアイコン をクリックします。

Cloud Shell を起動したことがない場合、その内容を説明する中間画面が(スクロールしなければ見えない範囲に)が表示されます。その場合は、[続行] をクリックします(以後表示されなくなります)。このワンタイム スクリーンは次のようになります。

Cloud Shell のプロビジョニングと接続に少し時間がかかる程度です。

この仮想マシンには、必要な開発ツールがすべて用意されています。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働するため、ネットワーク パフォーマンスが充実しており認証もスムーズです。このコードラボでの作業のほとんどは、ブラウザまたは Chromebook から実行できます。

Cloud Shell に接続すると、すでに認証は完了しており、プロジェクトに各自のプロジェクト ID が設定されていることがわかります。

  1. Cloud Shell で次のコマンドを実行して、認証されたことを確認します。
gcloud auth list

コマンド出力

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
gcloud config list project

コマンド出力

[core]
project = <PROJECT_ID>

上記のようになっていない場合は、次のコマンドで設定できます。

gcloud config set project <PROJECT_ID>

コマンド出力

Updated property [core/project].

3. Spring Boot アプリケーションを初期化する

  1. Spring Initializr を使用して新しい Spring Boot アプリを生成します。
$ curl https://start.spring.io/starter.tgz \
    -d language=kotlin \
    -d dependencies=web \
    -d baseDir=kotlin-jib-cloud-run | tar -xzvf -

Initializr により、spring-boot-starter-web がテンプレート アプリの pom.xml の依存関係に自動的に追加されます。

  1. テンプレート アプリのディレクトリに移動します。
$ cd kotlin-jib-cloud-run
  1. Maven を使用してアプリをビルドして実行します。
$ ./mvnw -DskipTests spring-boot:run
  1. 起動されると、アプリはポート 8080 のリッスンを開始します。Cloud Shell ツールバーの [ウェブでプレビュー] をクリックし、[ポート 8080 でプレビュー] を選択してアプリにアクセスします。

  1. アプリはまだ何もしないため、404 レスポンスが返されます。Control+C でアプリを停止します。

4. ウェブ コントローラを追加する

  1. デモ パッケージに次の Controller クラスを作成します。
$ vi src/main/kotlin/com/example/demo/Controller.kt
    or
$ nano src/main/kotlin/com/example/demo/Controller.kt

src/main/kotlin/com/example/demo/Controller.kt

package com.example.demo

import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController

@RestController
class Controller {
 
 
@GetMapping("/")
  fun saySomething
(): String {
   
return "Kotlin app on Cloud Run, containerized by Jib!"
 
}
}
  1. アプリを再ビルドして実行します。
$ ./mvnw spring-boot:run
  1. ウェブでプレビュー アイコン を使用してアプリを再度確認します。今回は「Kotlin app on Cloud Run, containerized by Jib!」というメッセージが表示されます。アプリは Control+C で停止します。

5. アプリをコンテナ化して Container Registry に公開する

Jib を使用すると、Docker を使わずに最適化された方法でアプリをコンテナ化し、任意のコンテナ レジストリに公開できます。

  1. 続行する前に、Container Registry API を有効にする必要があります。これは、プロジェクトごとに 1 回だけ行うだけで、API にアクセスできるようにします。
$ gcloud services enable containerregistry.googleapis.com
  1. Jib を実行して Docker イメージをビルドし、Container Registry に公開します。
$ ./mvnw com.google.cloud.tools:jib-maven-plugin:1.8.0:build \
    -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/kotlin-jib-cloud-run

最終的に、アプリがコンテナ化されて Container Registry に push されたことを示すメッセージが表示されます。

[INFO] Built and pushed image as gcr.io/PROJECT_ID/kotlin-jib-cloud-run
...
[INFO] BUILD SUCCESS

エラーが表示された場合は、$GOOGLE_CLOUD_PROJECT が Google Cloud プロジェクト ID(PROJECT_ID)に正しく設定されているかどうかを再度確認します。

  1. 次に進む前に、イメージが正常にパブリッシュされているかどうかを確認してください。Cloud Console に戻り、ナビゲーション メニュー をクリックして、[Container Registry] を選択します。

イメージが正常にパブリッシュされます。

6. コンテナ化されたアプリを Cloud Run で実行する

Cloud Run は、サーバーレスでコンテナを作成し、ステートレス コンテナを自動的にスケールします。

  1. もう一度ナビゲーション メニュー をクリックして、[Cloud Run] を選択します。

Cloud Run に初めてアクセスする場合は、1 回限りの設定として次のダイアログが表示されます。[Cloud Run の使用を開始] が表示されたらクリックします。

  1. Cloud Run ページで、[サービスを作成] をクリックします。

  1. 次の画面で、[Source] の下にある [Select] をクリックします。ソースは Cloud Run で実行するイメージです。

  1. ダイアログには以前にビルドした画像が表示されます。画像を選択し、[続行] をクリックします。

  1. あと数回クリックするだけでアプリのデプロイが可能です。[デプロイ プラットフォーム] で [Cloud Run(フルマネージド)] を選択して、Google Cloud でサービスを完全に管理します。適切なリージョンを選択し、[未認証の呼び出しを許可] を選択して [作成] をクリックします。完了です!

イメージが完全にデプロイされると、Cloud Run ページにアプリにアクセスするための URL が表示されます。ぜひご覧ください。

最後に、アプリに表示されるメッセージが表示されます。

Kotlin app on Cloud Run, containerized by Jib!

これで、今後、アプリの新しいバージョンをデプロイする必要がある場合は、ページで [Deploy New Revision] をクリックします。

7. クリーンアップ

  1. 環境をクリーンアップするには、Cloud Run にデプロイされたアプリと Container Registry に公開されたイメージを削除する必要があります。Cloud Run に移動し、アプリを選択して、[削除] をクリックします。

  1. 同様に、Container Registry ページに移動してイメージを削除します。

8. 完了

これで、これで、Spring Boot Kotlin アプリがコンテナ化され、Cloud Run にデプロイされました。

Jib を使用して、Docker をインストールするか、Dockerfile を記述せずに、最適化されたコンテナ イメージをビルドし、Container Registry に公開しました。Jib は、Docker の深い知識がなくても誰でも Java アプリを迅速かつ効率的にコンテナ化できるように、イメージ構築を最適化します。その後、数回クリックするだけで、アプリを Cloud Run にデプロイしてすぐにサービスを開始できました。

詳細