この Codelab について
1. 始める前に
App Engine アプリは作成とメンテナンスが簡単で、トラフィックとデータ ストレージのニーズの変化に合わせて簡単にスケールできます。App Engine では、サーバーを維持管理する必要もありません。必要な作業は、アプリをアップロードするだけです。
App Engine アプリは受信トラフィックに基づいて自動的にスケーリングされます。負荷分散、マイクロサービス、認可、SQL および NoSQL データベース、メモリ キャッシュ、トラフィック分割、ロギング、検索、バージョニング、ロールアウトとロールバック、セキュリティ スキャンはすべてネイティブにサポートされており、自由にカスタマイズできます。
App Engine スタンダード環境と App Engine フレキシブル環境では、Java、Python、PHP、NodeJS、Go などのさまざまなプログラミング言語がサポートされています。この 2 つの環境では、デベロッパーはアプリケーションの動作に最大限の柔軟性を提供できます。どの環境にも一定の強みがあります。詳細については、App Engine 環境の選択をご覧ください。
Spring Boot アプリを App Engine スタンダード環境にデプロイする方法を学習します。スタンダード環境は、誰も使用していない場合にゼロにスケールダウンし、自動的にスケールアップします。
前提条件
- Java プログラミング言語とツールに精通していること
- Linux の標準的なテキスト エディタ(Vim、Emacs、nano など)に関する知識
演習内容
- App Engine で Spring Boot Java アプリを作成する方法
必要なもの
- Google Cloud プロジェクト
- Google Chrome などのブラウザ
2. 設定と要件
セルフペース型の環境設定
- Cloud Console にログインして新しいプロジェクトを作成するか、既存のプロジェクトを再利用します。(Gmail または G Suite アカウントをまだお持ちでない場合は、作成する必要があります)。
プロジェクト ID を忘れないようにしてください。プロジェクト ID はすべての Google Cloud プロジェクトを通じて一意の名前にする必要があります(上記の名前はすでに使用されているので使用できません)。以降、このコードラボでは PROJECT_ID
と呼びます。
- 次に、Google Cloud リソースを使用するために、Cloud Console で課金を有効にする必要があります。
この Codelab を実施した場合、費用は数ドルを超えることはありませんが、より多くのリソースを使用する場合や、実行を継続する場合は、さらにコストがかかる可能性があります。
Google Cloud の新規ユーザーは 300 ドル分の無料トライアルをご利用いただけます。
Cloud Shell
Google Cloud で実行するコマンドライン環境である Cloud Shell を使用します。
Cloud Shell をアクティブにする
- Cloud Console で、Cloud Shell をアクティブにするアイコン
をクリックします。
Cloud Shell を起動したことがない場合、その内容を説明する中間画面が(スクロールしなければ見えない範囲に)が表示されます。その場合は、[続行] をクリックします(以後表示されなくなります)。このワンタイム スクリーンは次のようになります。
Cloud Shell のプロビジョニングと接続に少し時間がかかる程度です。
この仮想マシンには、必要な開発ツールがすべて用意されています。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働するため、ネットワーク パフォーマンスが充実しており認証もスムーズです。このコードラボでの作業のほとんどは、ブラウザまたは Chromebook から実行できます。
Cloud Shell に接続すると、すでに認証は完了しており、プロジェクトに各自のプロジェクト ID が設定されていることがわかります。
- 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 ウェブアプリを作成する
Cloud Shell が起動したら、コマンドラインを使用して、Spring Initializr で新しい Spring Boot アプリを生成できます。
$ curl https://start.spring.io/starter.tgz \ -d bootVersion=2.1.8.RELEASE \ -d dependencies=web \ -d baseDir=gae-standard-example | tar -xzvf - $ cd gae-standard-example
4. Maven pom.xml を更新する
Java サーバーアプリをデプロイするには、Maven App Engine Plugin または Gradle App Engine プラグインを使用する方法と、war
パッケージ ディレクトリをデプロイする方法の 2 つがあります。Maven App Engine プラグインを使用してアプリをデプロイします。
Maven App Engine Plugin を追加する
pom.xml
を更新して、デプロイ プロセスを簡素化する Google Cloud プラグインを含めます。Vim、nano、または Emacs を使用してファイルを編集できます。
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" ...>
...
<build>
<plugins>
...
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>2.1.0</version>
<configuration>
<version>1</version>
<projectId>GCLOUD_CONFIG</projectId>
</configuration>
</plugin>
...
</plugins>
</build>
</project>
5. App Engine 記述子を追加する
- アプリを App Engine スタンダード環境にデプロイするには、新しい
src/main/appengine/app.yaml
記述子ファイルを作成する必要があります。
$ mkdir -p src/main/appengine/ $ touch src/main/appengine/app.yaml
src/main/appengine/app.yaml
ファイルを編集して、次の内容を追加します。
src/main/appengine/app.yaml
runtime: java11
instance_class: F4
6. コントローラを追加
DemoApplication.java
に "hello world!"
を返す新しいコントローラを追加します。
src/main/java/com/example/demo/DemoApplication.java
package com.example.demo;
...
// Add imports
import org.springframework.web.bind.annotation.*;
@SpringBootApplication
@RestController
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@GetMapping("/")
public String hello() {
return "hello world!";
}
}
7. アプリをローカルで実行する
- Spring Boot プラグインを使用して Spring Boot アプリを起動できます。
$ ./mvnw -DskipTests spring-boot:run
- アプリが起動したら、Cloud Shell ツールバーの [ウェブでプレビュー]
をクリックし、[ポート 8080 でプレビュー] を選択します。
ブラウザのタブが開き、起動したサーバーに接続されます。
8. App Engine にアプリをデプロイする
- まず、App Engine アプリを実行できるようにプロジェクトを初期化します。また、米国中部リージョンで実行するようにプロジェクトを初期化します。
$ gcloud app create --region us-central You are creating an app for project [...]. WARNING: Creating an App Engine application for a project is irreversible and the region cannot be changed. More information about regions is at https://cloud.google.com/appengine/docs/locations
- 次に、
mvn appengine:deploy
を実行して、アプリを App Engine スタンダード環境にデプロイします。
$ ./mvnw -DskipTests package appengine:deploy ... first time deploy may take a couple of minutes
- デプロイされたアプリは、ウェブブラウザで http://<project-id>.appspot.com を開くか、Cloud Shell で次のコマンドを使用します。
$ gcloud app browse ... [It may print out the URL for your app]