Spring BootをGoogle App Engineフレキシブル環境へデプロイする
前回はSpring BootをApp Engineのスタンダード環境にデプロイしましたが、今回はフレキシブル環境を試してみます。
こちらもGithubで公開されているgetting-start-javaリポジトリが参考になり、helloworld-springbootがほぼそのまま動きました。
ローカル環境
- Windows 10 Pro
- Spring Tool Suite 3.9.5
- Oracle JDK 8u181
- Google cloud SDK 210.0.0
- app-engine-java 1.9.64
手順
ログインやプロジェクトの設定(gcloud init)を行っていることを前提とします。
また、gcloudでapp-engine-javaをインストールしていることが前提となります。
まずは以下の手順でSpring Bootのプロジェクトを作成しました。
- Spring Tool Suiteでプロジェクト作成
- webにチェック(spring-boot-starter-webを使う)
- 動作確認用のControllerを作成
あとはGithubのソースコードを参考に、以下を変更しました。
- pom.xmlの編集
- App Engine Pluginの追加
- コンパイラのsourceとtargetのバージョンを追加
- spring-boot-maven-pluginのexecutionにrepackageを追加
- src/main/appengine/app.yamlの作成
その後、Windows Power Shellを立ち上げて以下のコマンドを実行すればデプロイできました。
.\mvnw.cmd appengine:deploy
サンプルコードにはヘルスチェック用のコードが入っていましたが、これ自体はなくてもデプロイできるようです。 ヘルスチェックについての詳細は公式ドキュメントに記載があります。
デプロイ時に引っかかった点としては、Spring Bootのテストコードで以下のようにランダムポートを指定しないとエラーになるようです。
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
自分の試した構成はGithubにあります。
所感
スタンダード環境に比べ、フレキシブル環境ではjar形式でそのままデプロイできるのはとても快適でした。
Spring Bootはクラウドでのデプロイまで考えられたフレームワークと言われますが、それをまさに実感できるユースケースでした。
一方でデプロイにかかる時間はスタンダード環境より長くなり、何度もデプロイするのは結構大変でした。
スタンダード環境は1~2分程度でしたが、フレキシブル環境では10分程度かかっています。
両方試してみた印象では、スタンダード環境は静的コンテンツが多めのサイト向きで、フレキシブル環境はがっつりWebアプリに向いていると感じました。
最初の印象ではフレキシブル環境はスタンダード環境の上位互換で、スタンダード環境は今後廃止されていくのかと思っていましたが、実際に動かしたり詳細を調べるうちにそうでもないことが分かりました。
公式ドキュメントの静的サイトのホスティングやフレキシブル環境を使用すべき場合を読んでも、うまく使い分けることが推奨されているように読み取れます。
スタンダード環境はGCPのエッジキャッシュが効きますし、SSL証明書(Let’s Encrypt)の取得・更新もワンクリックで自動でできるメリットもあります。
これが一定規模までなら無料で使えてしまうというのは、よくよく考えると恐ろしい時代ですね。
ちなみにこのサイトもPHPのスタンダード環境で構築しています。