LoginSignup
12
8

More than 5 years have passed since last update.

App Engine Flexible で SpringBoot のプロジェクトを Gradle でデプロイするまで

Posted at

Google App Engine の Flexible Environment が公開されてだいぶ立ちますが、gradleでspring-bootのプロジェクトをデプロイして動かすようなサンプルが見つからなかったのでメモです
公式ドキュメントはmaven中心だしなっ

とりあえずソース

githubに置いておきます
appenginetest

環境

OS

Windows10 pro

Java

Java SE 1.8.0_121

Gradle

3.4.1

Eclipse

Pleiades All in One 4.6.3.v20170323

準備

Google Cloud Platform のアカウント作成などはここでは省略します

Google Cloud SDK のインストール

公式ドキュメントがわかりやすいですので省略

App Engine SDK for Java のインストール

SDKの初期化まで完了したら、以下のコマンドを投げてJava用のSDKをインストールします

gcloud components install app-engine-java

GCPでテスト用プロジェクトの作成

Google Cloud Platform で新規のプロジェクトを作成します
今回はspringboottestという名前で作っていきます
プロジェクトIDはあとで使うのでメモしておきましょう

Spring-Boot プロジェクトの準備

Eclipse を使用して作っていきます

プロジェクト作成

ファイル -> 新規 -> その他 から Gradleプロジェクトを選択
プロジェクト名はappenginetestとでもしておきます

次の画面では、インストールしたGradleを指定します
Eclipseの設定によってはデフォルトのままでもいけたかな?

次の画面で構成を確認し、警告とか出てなければ完了
gradleの設定がうまくないと警告出てきます

完了後はsrc配下にLibrary.javaとLibraryTest.javaが作られていますが、使わないので削除しておきます

gradleの設定

build.gradle を開き、いろいろと設定します

App Engine プラグイン

この辺を参考にしながら設定します
公式ではgrettyというプラグインを使用していますが、今回はSpring-Bootを使おうと思うので外します

まぁ使い方がわからんかっただけなんですけどね・・・

build.gradle サンプル

で、spring-boot とかも設定したのがこちら

build.gradle
buildscript {
    repositories {
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.google.cloud.tools:appengine-gradle-plugin:1.1.1'
        classpath 'org.springframework.boot:spring-boot-gradle-plugin:1.5.+'
    }
}

apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'com.google.cloud.tools.appengine'
apply plugin: 'eclipse'

def defaultEncoding = 'UTF-8'
[compileJava, compileTestJava]*.options*.encoding = defaultEncoding

def jdkVersion = 1.8
sourceCompatibility = jdkVersion
targetCompatibility = jdkVersion

jar {
    baseName = 'appenginetest'
    version = '1.0-SNAPSHOT'
}

repositories {
    maven {
        url 'https://maven-central.storage.googleapis.com'
    }
    jcenter()
    mavenCentral()
}

dependencies {
    compile 'javax.servlet:javax.servlet-api:3.1.0'
    compile 'com.google.appengine:appengine:+'

    compile('org.springframework.boot:spring-boot-starter-web:1.5.+'){
        exclude module: 'spring-boot-starter-tomcat'
    }

    compile group: 'org.springframework.boot', name: 'spring-boot-starter-jetty', version: '1.5.+'
}

とりあえずデプロイして何かしら表示するだけなのでこんなもんですかね

ソースとか

次にSpring-Bootで使用するjavaファイル

Application.java
package appenginetest;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @RequestMapping(value = "/")
    String hello() {
        return "Hello World!";
    }
}

デプロイできて動いてるのが確認するだけなので"Hello World!"が表示できるだけです

AppEngine用の設定

次にAppEngine用の設定ファイルを書きます
場所はsrc/main/appengineになります

app.yaml
runtime: custom
env: flex

runtime_config:
   jdk: openjdk8

automatic_scaling:
  min_num_instances: 1
  max_num_instances: 1

標準のjava8+jettyを使うならruntimejavaと指定しますが、今回はSpring-Boot + jettyのカスタム環境なのでcustomとします
automatic_scalingは起動するインスタンスの数で、未指定の場合だと最低で2つ起動してしまうので1を指定しておきます

他にも色々ありますが、あとは公式を参照

Dockerfileの設定

AppEngineで動くDocker用の設定を書きます
場所はsrc/main/Dockerになります

Dockerfile
FROM gcr.io/google_appengine/openjdk8
VOLUME /tmp
ADD appenginetest-1.0-SNAPSHOT.jar app.jar
CMD [ "java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

appenginetest-1.0-SNAPSHOT.jarのところはプロジェクトをビルドしたときに作られるjarファイルを指定します

ビルドしてみる

コマンドプロンプトとかで作ったプロジェクトのルートまで移動し、以下のコマンド実行

gradle appengineStage

設定がうまくいっていればBUILD SUCCESSFULで終了します

App Engine にデプロイ

プロジェクトの設定

今回のプロジェクトの用の設定を作ります
以下のコマンドで設定を作ります

gcloud config configurations create [NAME]

[NAME]にはなにかわかりやすい名前をつけてください

設定後は設定を有効にさせます

gcloud config configurations activate [NAME]

設定を有効にし、Google Cloud Platform で作ったプロジェクトを紐付けます
で、ここで注意、プロジェクト名はプロジェクトIDの方を使用してください
2017-04-02_19h00_46.png
ここの赤いとこですね、間違ってプロジェクト名を指定しても特にエラーは出ませんが、最後のデプロイで失敗します

gcloud config set project [PROJECT]

プロジェクトのデフォルトゾーンの設定

gcloud config set compute/zone us-east1-b

設定の内容を表示するには以下のコマンド

gcloud config configurations describe [NAME]

有効な設定が何かは以下のコマンドで確認できます

gcloud config list

有効な設定ができたらログインします

gcloud auth login

ブラウザが開き、ログインするアカウント一覧が出ますのでGoogle Cloud Platform でログインできるアカウントを選択
次の画面で Google Cloud SDK にアクセス許可の確認が出るので許可します

この辺の手順はちょっと自信ないなー
余計なコマンド投げてるかも・・・

公式のドキュメントはここです

App Engine にデプロイ

有効な設定まで確認できたらいよいよデプロイです
以下のコマンドをプロジェクトのルートから実行します

gradle appengineDeploy

コマンド実行後は結構待ちます
この小さなサンプルプロジェクトでも5分程度かかります

見てみる

デプロイコマンドが帰ってきたら App Engine のダッシュボードの右上にリンクが表示されているので、そこから確認してみましょう
"Hello World!"が表示されていれば成功です

これで最低限はできました
次はDB関係ですが、別にあげようと思います

12
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
8