Google App Engine Java Standard 環境で手っ取り早くSpring Boot アプリケーションを開発する
Xamarin を試したく、バックエンドのサービスを、GAE(.NET) として、C#で言語をそろえて、なるべきスピーディーに開発を目論見るが、以下の記述。
https://cloud.google.com/appengine/docs/flexible/java/flexible-for-standard-users?hl=ja
フレキシブル環境は、スタンダード環境を補完することを目的としています。既存のアプリケーションをスタンダード環境で実行している場合、アプリケーション全体をフレキシブル環境に移行することは、通常必要ありません。そうではなく、アプリケーションの中で、より多くの CPU やメモリ、特殊なサードパーティ ライブラリやプログラムを必要とする部分や、スタンダード環境では不可能な動作を必要とする部分を見極めてください。アプリケーションにそのような部分があったら、その部分だけをフレキシブル環境を使用して処理する小さな App Engine サービスを作成します。
まぁそうだよなと思いつつ、フレキシブル環境に、ASP.NET MVCのサンプルを作ってデプロイ、しばらく、そのままにしていたら、ご、ごせんよんひゃくえん!?と結構な額の使用料!
まだ、プロモーション用にいただいた、残額が結構あったから、実際の支払いにはいたらなかったが、うーん怖い。AWSも支払苦で撤収しているので、やはりここは、無料枠もあるスタンダード環境で行こう。
1.Google App Engine Standard 環境 Java
https://cloud.google.com/appengine/docs/standard/java/building-app/environment-setup?hl=JA
ということで、上記を参照してチュートリアルをこなしてみようとしたが、、、
うーん懐かしすぎる。バージョンは進んでいるが、10年以上前、まだ JavaがSunのころに受験したWebこんぽーねんとでべろっぱー的なチュートリアル。。。
これはこれで、初学者には勉強になるが、ちょっとらちが空かない。何らかのフレームワークを導入せねば、Slim3とかまだあるのか?と思いつつ、
2. Google App Engine で Spring Boot を利用する
おお、Spring がそのまま使えそう。上記チュートリアルを片手間にこなし、自分の中のSpringのバージョンが、3.5 くらいで止まっているので、書籍を購入。
DIやら、AOPやらのコンセプトは、よいので、手順などが知りたかったのだが、この書籍は丁寧な記述で分かりやすい。
3.環境構築
Spring 開発環境のSpring Tool Suite を導入する、、前に Eclipse + Google Cloud Platform SDK導入済みだったので、Eclipseのプラグインとして、STSを導入する。
http://typea.info/tips/wiki.cgi?page=Google+App+Engine%28Java%29
https://cloud.google.com/appengine/docs/standard/java/building-app/environment-setup?hl=JA
上記を参考に、以下のツール類をインストール。
- Eclipse
- Maven
- Google SDK コマンドラインツール
できたら、Eclipse を立ち上げ、Help – Eclipse Marketplace から、sts を検索して、インストール
4.プロジェクトの作成
FIle – New – Spring Starter Project から、Webアプリケーションのプロジェクトを作成する。
Type は Maven とする!あとは、Mavenのお作法に従って入力し、次へ
Webにチェックを入れて、プロジェクト作成。細かい手順については、上記書籍を購入すると捗るのでは。
この段階で、一度実行すると、エラーとなる。このくだりも書籍通りで、想定内。
5.Google App Engine 化
とりあえず、想定通り、Spring Boot アプリケーションが動いたので、GAE化をしていく。
5.1 pom.xml の編集。以下を追記
<plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>appengine-maven-plugin</artifactId> <version>1.3.2</version> <configuration> <version>1</version> </configuration> </plugin>
5.2 App Engine のディスクリプタを追加
src/main/webapp/WEB-INF/appengine-web.xml
ファイルを追加し、以下を記述
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <threadsafe>true</threadsafe> <runtime>java8</runtime> </appengine-web-app>
6.アプリケーションの作成
上記で実行したときにエラーになっていたが、それは、リクエストを処理するコントローラーが指定されていなかったため。
package info.typea; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class FavPhraseApplication { public static void main(String[] args) { SpringApplication.run(FavPhraseApplication.class, args); } }
自動生成された、アプリケーションには、@SpringBoolApplication により、SpringBootApplicationであることを識別し、Spring Bootで起動するようになっているため、チュートリアルに従い、URIをハンドリングする、メソッドを追加し、以下とする。
package info.typea; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class FavPhraseApplication { public static void main(String[] args) { SpringApplication.run(FavPhraseApplication.class, args); } @GetMapping("/") public String hello() { return "Hello GAE Java std env with Spring boot !"; } }
再度実行し、ローカル環境で動くことを確認!
7.Google App Entineにデプロイ
http://typea.info/tips/wiki.cgi?page=Google+App+Engine%28Java%29#p4
pom.xml のディレクトリで、以下のコマンドを実行
>mvn appengine:deploy
成功したのを確認し、以下のコマンドで、ブラウザをたちあげる
>gcloud app browse
おお。Spring Boot Application が、Google App Engine Starndard環境で実行された!
めでたし!!