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のスタンダード環境で構築しています。

関連記事


  1. Spring BootをGoogle App Engineスタンダード環境にデプロイする
  2. 脆弱性診断ええんやで for ルーキーズ に参加しました
  3. JSUG勉強会2019その2 に参加しました
  4. Javaサーブレットにおける部分URLやファイルパスの取得
  5. Spring BootアプリにFlywayを導入してみた
  6. Spring Web MVCのAuto Configuration周辺のクラス図を描いてみた
  7. ModelMapperで1対1に対応しないフィールドのマッピング

tosi avatar
tosi
Web Application Engineer, Java / Spring / Azure / GCP
comments powered by Disqus