The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.

Google Cloud Platform (GCP)へのデプロイ

このガイドでは以下をカバーしています:

  • Googleクラウドにログイン

  • Google Cloud Functions に Function をデプロイする

  • JARをGoogle App Engineスタンダード環境にデプロイする

  • DockerイメージをGoogle App Engineフレキシブル環境カスタムランタイムへデプロイする

  • Dockerイメージを Google Cloud Run にデプロイする

  • Cloud SQLの使用

前提条件

このガイドを完成させるには、以下が必要です:

本ガイドでは、 入門ガイドで開発したアプリケーションを入力とします。

手元に get-started アプリケーションがあることを確認するか、Git リポジトリをクローンします: git clone https://github.com/quarkusio/quarkus-quickstarts.git 、もしくは archive をダウンロードしてください。ソリューションは getting-started ディレクトリーにあります。

Googleクラウドにログイン

アプリケーションのデプロイにはGoogle Cloudへのログインが必要です。以下のように行います。

gcloud auth login

Google Cloud Functions へのデプロイ

Quarkusは、次のエクステンションを使用して、アプリケーションをGoogle Cloud Functionsにデプロイすることをサポートしています。

各エクステンションは特定の種類のアプリケーション開発をサポートしており、それらを使用してアプリケーションを開発、パッケージ化、デプロイする方法の詳細については、特定のガイドに従ってください。

Google App Engineスタンダード環境へのデプロイ

まずはじめに、Google Cloud プロジェクト用に App Engine 環境が初期化されていることを確認してください。もしまだであれば、 gcloud app create --project=[YOUR_PROJECT_ID] で初期化してください。

次に、 src/main/appengine/app.yaml ファイルを作成する必要がありますので、選択したエンジンのみの最低限のものにしておきましょう。

runtime: java11

これにより、App Engineアプリケーションのデフォルトサービスが作成されます。

代わりに runtime: java17 を定義することで、新しい Java 17 ランタイムを使用することもできます。

App Engineスタンダード環境は、デフォルトのQuarkus固有のパッケージングレイアウトをサポートしていないため、アプリケーションをuber-jarとしてパッケージングするよう、application.properties ファイルを設定する必要があります。

quarkus.package.jar.type=uber-jar

次に、アプリケーションを手動で構築するか、その責任を gcloud または Google Cloud Maven プラグインに任せるかを選択することができます。

アプリケーションを手動でビルドする

mvn clean package を使用してアプリケーションをビルドするために Maven を使用します。依存関係を含むアプリケーションのすべてのクラスを含む単一の JAR を生成します。

最後に、 gcloud を使用して、アプリケーションを App Engine サービスとしてデプロイします。

gcloud app deploy target/getting-started-1.0.0-SNAPSHOT-runner.jar

このコマンドは、アプリケーション jar をアップロードし、App Engine で起動します。

コマンド実行が完了すると、出力にはアプリケーションの URL (ターゲット URL) が表示されます。curlを使うか、 gcloud app browse を使ってブラウザで直接アプリケーションを開くことができます。

gcloud 経由でアプリケーションをビルドする

gcloud にアプリケーションをビルドさせることができます。これは App Engine にデプロイする最もシンプルな方法です。

最後に、プロジェクトのルートで gcloud app deploy を実行すると、すべてのプロジェクトファイルをアップロードし( .gcloudignore ファイルを介してリストを縮小することができます)、Maven(または Gradle)で JAR をパッケージして、App Engine で起動することができます。

コマンド実行が完了すると、出力にはアプリケーションの URL (ターゲット URL) が表示されます。curlを使うか、 gcloud app browse を使ってブラウザで直接アプリケーションを開くことができます。

Google Cloud Mavenプラグインを介したアプリケーションのビルド

また、App Engine Mavenプラグインを使用して、Mavenでアプリケーションのデプロイを制御することもできます。

まず、プラグインを pom.xml に追加します。

<plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>appengine-maven-plugin</artifactId>
    <version>2.4.4</version>
    <configuration>
        <projectId>GCLOUD_CONFIG</projectId> (1)
        <version>gettingstarted</version>
        <artifact>${project.build.directory}/${project.artifactId}-${project.version}-runner.jar</artifact> (2)
    </configuration>
</plugin>
1 デフォルトの gcloud 設定を使用します。
2 デフォルトのJAR名を、Quarkus Mavenプラグインによって生成されたものにオーバーライドします。

その後、Mavenを使用してアプリケーションをビルドし、 mvn clean package appengine:deploy を経由してApp Engineにデプロイすることができます。

コマンド実行が完了すると、出力にはアプリケーションの URL (ターゲット URL) が表示されます。curlを使うか、 gcloud app browse を使ってブラウザで直接アプリケーションを開くことができます。

Google App Engineフレキシブル環境カスタムランタイムへのデプロイ

まずはじめに、Google Cloud プロジェクト用に App Engine 環境が初期化されていることを確認してください。もしまだであれば、 gcloud app create --project=[YOUR_PROJECT_ID] によって初期化してください。

App Engineフレキシブル環境カスタムランタイムはDockerイメージを使用してアプリケーションを実行します。

まず、プロジェクトのルートに以下の内容の app.yaml ファイルを作成します。

runtime: custom
env: flex

App Engineフレキシブル環境カスタムランタイムは、アプリケーションをDockerコンテナーとしてデプロイしますが、アプリケーション内で提供されるDockerfileのいずれかを選択してデプロイすることができます。

JVM版とネイティブ実行可能ファイル版の両方が動作します。

JVMアプリケーションをデプロイするには

  • JVMのDockerfileをプロジェクトのルートディレクトリーにコピーします: cp src/main/docker/Dockerfile.jvm Dockerfile .

  • mvn clean package を使用してアプリケーションを構築します。

ネイティブアプリケーションをデプロイするには

  • ネイティブのDockerfileをプロジェクトのルートディレクトリーにコピーします: cp src/main/docker/Dockerfile.native Dockerfile .

  • mvn clean package -Dnative を使用して、アプリケーションをネイティブ実行可能ファイルとしてビルドします。

最後に、プロジェクトのルートで gcloud app deploy を起動すると、すべてのプロジェクトファイルをアップロードし( .gcloudignore ファイルを介してリストを縮小することができます)、Dockerfile をビルドし、App Engine Flexible カスタムランタイム上で起動します。

Cloud Buildを使用してDockerイメージをビルドし、Google Container Registry(GCR)にデプロイします。

完了すると、出力にはアプリケーションの URL (ターゲット URL) が表示されます。curlを使うか、 gcloud app browse を使ってブラウザで直接開くことができます。

App Engineフレキシブルカスタムランタイムは ヘルスチェックをサポートしていますが、Quarkus Smallrye Healthのサポートによりヘルスチェックを行うことが強く推奨されます。

Google Cloud Runへのデプロイ

Google Cloud Runでは、Google Cloud Platform内でDockerコンテナーをマネージドな方法で実行することができます。

デフォルトでは、Quarkusは8080番ポートをリッスンし、これはCloud Runのデフォルトポートでもあります。Cloud Runで定義された環境変数 PORT を使用して、QuarkusのHTTPポートをカスタマイズする必要はありません。

Cloud RunはCloud Buildを使用してDockerイメージを構築し、Google Container Registry(GCR)にデプロイします。

JVM版とネイティブ実行可能ファイル版の両方が動作します。

JVMアプリケーションをデプロイするには

  • JVMのDockerfileをプロジェクトのルートディレクトリーにコピーします: cp src/main/docker/Dockerfile.jvm Dockerfile .

  • mvn clean package を使用してアプリケーションを構築します。

ネイティブアプリケーションをデプロイするには

  • ネイティブのDockerfileをプロジェクトのルートディレクトリーにコピーします: cp src/main/docker/Dockerfile.native Dockerfile .

  • mvn clean package -Dnative を使用して、アプリケーションをネイティブ実行可能ファイルとしてビルドします。

次に、Cloud Buildのためにアップロードすべきでないファイルをgcloudに伝えるための .gcloudignore ファイルを作成します。これがない場合、デフォルトは .gitignore で、通常はパッケージ化されたアプリケーションが作成されたターゲットディレクトリーを除外します。

この例では、 src ディレクトリーだけを除外しています。

src/

その後、Cloud Buildを使ってイメージをビルドすると、アプリケーションのすべてのファイル(`.gcloudignore`fileで無視されたファイルを除く)をGoogle Cloud Storageバケットにアップロードし、DockerイメージをビルドしてGoogle Container Registry (GCR)にプッシュします。

gcloud builds submit --tag gcr.io/PROJECT-ID/helloworld
また、イメージをローカルにビルドして、公開されているDockerレジストリーにプッシュし、次のステップでこのイメージを使用することもできます。

最後に、Cloud Runを使ってアプリケーションを起動します。

gcloud run deploy --image gcr.io/PROJECT-ID/helloworld

Cloud run から、サービス名、リージョン、認証されていない呼び出しが許可されているかどうかについて質問されます。これらの質問に答えると、アプリケーションがデプロイされます。

デプロイが完了すると、出力にはアプリケーションにアクセスするためのURLが表示されます。

Cloud Runは ヘルスチェックをサポートしていますが、Quarkus Smallrye Healthのサポートによりヘルスチェックを行うことが強く推奨されます。

Cloud SQLの使用

Google Cloud SQLは、MySQL、PostgreSQL、Microsoft SQL Serverのマネージドインスタンスを提供します。Quarkusはこの3つのデータベースをサポートしています。

JDBCドライバーでのCloud SQLの使用

アプリケーションをCloud SQLで動作させるには、まず対応するJDBCエクステンションを使用する必要があります。例えば、PostgreSQLの場合は、 quarkus-jdbc-postgresql エクステンションを追加します。

次に、Cloud SQLへの追加の接続性を提供するCloud SQL JDBCライブラリを pom.xml に追加する必要があります。PostgreSQLの場合は、以下の依存関係を追加する必要があります。

<dependency>
    <groupId>com.google.cloud.sql</groupId>
    <artifactId>postgres-socket-factory</artifactId>
    <version>${postgres-socket-factory.version}</version>
</dependency>

最後に、ソケットファクトリを使用するために、データソースを特別に設定する必要があります。

quarkus.datasource.db-kind=postgresql
quarkus.datasource.jdbc.url=jdbc:postgresql:///mydatabase (1)
quarkus.datasource.username=quarkus
quarkus.datasource.password=quarkus
quarkus.datasource.jdbc.additional-jdbc-properties.cloudSqlInstance=project-id:gcp-region:instance (2)
quarkus.datasource.jdbc.additional-jdbc-properties.socketFactory=com.google.cloud.sql.postgres.SocketFactory (3)
1 JDBCのURLには、データベースのホスト名/IPを含めないようにしてください。
2 インスタンスIDを構成するために、 cloudSqlInstance JDBCプロパティを追加しています。
3 socketFactory additional JDBC プロパティを追加して、Cloud SQL への接続に使用するソケットファクトリを構成します。このプロパティは postgres-socket-factory の依存関係に由来します。
#15782の問題により、現時点ではdevモードではPostgreSQLのソケットファクトリを使用することはできません。

リアクティブSQLクライアントでのCloud SQLの使用

JDBCクライアントの代わりに、私達のリアクティブSQLクライアントの1つを使用することもできます。Cloud SQLでこれを行うには、以下の依存関係を追加してください(プラットフォームに応じて分類子を調整してください)。

<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-transport-native-epoll</artifactId>
    <classifier>linux-x86_64</classifier>
</dependency>

次に、リアクティブデータソースをホスト名なし、Nettyネイティブトランスポートで設定します。

quarkus.datasource.reactive.url=postgresql://:5432/db-name?host=/cloudsql/project-id:zone:db-name
quarkus.vertx.prefer-native-transport=true
これは、アプリケーションがApp EngineなどのGoogle Cloudマネージドランタイム内で実行されている場合にのみ機能します。

ネイティブ実行ファイルでのCloud SQLの使用

ネイティブ実行ファイルを生成する際には、 jnr.ffi.provider.jffi.NativeFinalizer$SingletonHolder を実行時初期化済としてマークする必要があります。

quarkus.native.additional-build-args=--initialize-at-run-time=jnr.ffi.provider.jffi.NativeFinalizer$SingletonHolder

さらに詳しく

PubSub、BigQuery、Storage、Spanner、Firestore、Secret Managerなど、さまざまなGoogle Cloud Servicesにアクセスするためのエクステンションのセットが、Quarkiverse(コミュニティによって維持されているQuarkusエクステンションのためのGitHub organization)にあります(サポートされているサービスの正確なリストについては、リポジトリをご覧ください)。

これらについてのドキュメントは、 Quarkiverse Google Cloud Services ドキュメント にあります。

関連コンテンツ