Spring BootをGoogle App Engineスタンダード環境にデプロイする
個人的にGoogle Cloud Platformをいろいろ試してみようと思い、よく使っているSpring BootでApp Engineへデプロイしてみました。
いろいろ試行錯誤しましたが、Githubで公開されているgetting-start-javaリポジトリ内のspringboot-appengine-standardがほぼそのまま動きました。
Google Cloud Platformに用意されているドキュメントは情報が古く、コマンドが変わったりしていますが、こちらのGithubにあるサンプルはほぼ最新に保たれているようです。
ローカル環境
- 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でプロジェクト作成
- Packagingをwarに変更
- webにチェック(spring-boot-starter-webを使う)
- 動作確認用のControllerを作成
あとはほとんどGoogle Cloud PlatformのGithubに書いてあることですが、以下を実行しました。
- pom.xmlの編集
- Tomcatの除外
- Servlet APIの追加
- App Engine Pluginの追加
- src/main/webapp/WEB-INF/appengine-web.xmlの作成
- src/main/resources/logging.propertiesの作成
その後、Windows Power Shellを立ち上げて以下のコマンドを実行すればデプロイできました。
.\mvnw.cmd appengine:deploy
デプロイでエラーが出る場合はmavenのApp Engine PluginやGoogle Cloud SDKを最新にして実行すると良さそうです。
自分の試した構成はGithubにあります。
所感
最初のインスタンスの立ち上がりにはそこそこ時間がかかりますが、一度立ち上がってしまえばあとは快適にアクセスできました。
最もスペックの低いインスタンス1台であれば一か月無料で使用できますし、いろいろ遊べそうです。
ただし、個人的にはSpring Bootのjar形式に慣れすぎてしまったため、テストが大変だと感じました。
この構成だと組み込みTomcatがないため、ローカルではそのままSpring Bootのような起動はできません。
Spring Tool Suiteでテスト用サーバを設定すればできるのかもしれませんが、開発環境で使うサーバもpom.xmlに定義して引っ張ってこれるのがSpring Bootのメリットの一つだと感じているので、この点はちょっとイマイチだと思いました。
フレキシブル環境ではjarファイルでデプロイできるようなので、そちらも試してみたいと思います。