AppEngine × Spring Boot × Kotlin
Pros
● モバイルアプリとバックエンドを同じ言語で実装できる(Android)
● 大抵のSpring Bootアプリはちゃんと動く
● うれしい無料枠
Cons
● エコシステムが未発達なのでLow Level APIに頼らざるを得ない
● Too long spin up time
● AppEngineとSpring Bootの相性
8
Slide 9
Slide 9 text
⚠ Too long spin up time問題
トラフィックが増えてスケールアウトする
と、
大きなレイテンシが発生する
約20~25秒のレイテンシ
● 7秒(コンテナの起動)
● 5秒(JVMやJettyの起動)
● 8秒(Springの初期化)
9
Slide 10
Slide 10 text
⚠ AppEngineとSpring Bootの相性問題
⚠ Problem
● Spring Security OAuth2でセッションにアクセストークンが保存されない
https://stackoverflow.com/questions/45217234/issue-with-using-spring-oauth-o
n-java8-standard-environment
Workaround
● AppEngine標準のセッションハンドラを使わない
● Spring SessionでMemcache/Datastoreにセッション情報を保存
https://github.com/int128/spring-session-appengine
Slide 11
Slide 11 text
appengine-spring-boot-plugin
Gradle plugin for App Engine Standard and Spring Boot
https://github.com/int128/appengine-spring-boot-plugin
Features
● Watch and Sync resources(テンプレートを編集したらリロードで反映)
● Spring Bootのデバッグモードを有効化(テンプレートのキャッシュオフ等)
● 環境依存値の管理
- deploy:
name: Deploy
command: |
if [ "$CIRCLE_TAG" ]; then
echo "$GCP_SERVICE_ACCOUNT_KEY" |
base64 -d > "$HOME/gcp-service-account-key.json"
gcloud auth activate-service-account \
--key-file "$HOME/gcp-service-account-key.json"
./gradlew appengineDeploy
fi
14
Slide 15
Slide 15 text
まとめ
AppEngine × Spring Boot × Kotlinを快適に使うためのTipsを紹介しました
● Gradle plugin for App Engine Standard and Spring Boot
https://github.com/int128/appengine-spring-boot-plugin
● CircleCIによる継続的デプロイ
15