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のサンプルを作ってデプロイ、しばらく、そのままにしていたら、ご、ごせんよんひゃくえん!?と結構な額の使用料!

gae_invoice

まだ、プロモーション用にいただいた、残額が結構あったから、実際の支払いにはいたらなかったが、うーん怖い。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 を利用する

https://codelabs.developers.google.com/codelabs/cloud-app-engine-springboot/index.html?index&authuser=0#0

おお、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 を検索して、インストール

gae_java_std_sb01

4.プロジェクトの作成

FIle – New – Spring Starter Project から、Webアプリケーションのプロジェクトを作成する。

gae_java_std_sb02

Type は Maven とする!あとは、Mavenのお作法に従って入力し、次へ

gae_new_project

Webにチェックを入れて、プロジェクト作成。細かい手順については、上記書籍を購入すると捗るのでは。

この段階で、一度実行すると、エラーとなる。このくだりも書籍通りで、想定内。

gae_java_std_sb03

5.Google App Engine 化

とりあえず、想定通り、Spring Boot アプリケーションが動いたので、GAE化をしていく。

5.1 pom.xml の編集。以下を追記

https://codelabs.developers.google.com/codelabs/cloud-app-engine-springboot/index.html?index&authuser=0#3

<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

ファイルを追加し、以下を記述

https://codelabs.developers.google.com/codelabs/cloud-app-engine-springboot/index.html?index&authuser=0#4

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <threadsafe>true</threadsafe>
  <runtime>java8</runtime>
</appengine-web-app>

gae_java_std_sb04

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をハンドリングする、メソッドを追加し、以下とする。

https://codelabs.developers.google.com/codelabs/cloud-app-engine-springboot/index.html?index&authuser=0#5

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 !";
	}
}

再度実行し、ローカル環境で動くことを確認!

gae_java_std_sb05

7.Google App Entineにデプロイ

http://typea.info/tips/wiki.cgi?page=Google+App+Engine%28Java%29#p4

pom.xml のディレクトリで、以下のコマンドを実行

>mvn appengine:deploy

gae_java_std_sb06

成功したのを確認し、以下のコマンドで、ブラウザをたちあげる

>gcloud app browse

おお。Spring Boot Application が、Google App Engine Starndard環境で実行された!

gae_java_std_sb07

めでたし!!