IK.AM

@making's tech note


Spring Boot + DockerでAWS Elastic Beanstalkにデプロイ

🗃 {Programming/Java/org/springframework/boot}
🏷 AWS 🏷 AWS Elastic Beanstalk 🏷 Docker 🏷 Java 🏷 Spring Boot 
🗓 Updated at 2014-12-01T12:47:49Z  🗓 Created at 2014-12-01T12:47:49Z   🌎 English Page

Spring Bootは実行可能jar形式でパッケージングするのが普通なので、CloudFoundryやHerokuといったPaaSにデプロイするのは簡単だけれども、AWS Elastic Beanstalkみたいにwarのみサポートしている環境だと、warに変換する手間があった(そんなに大変ではない)。

せっかくなのでjarを使いたい。warを捨てたい。なので、Dockerを使うことにした。

やり方はいろいろあるみたいだが、Docker初心者な自分にはこの記事が分かりやすかった。

この記事を試し、書いてあるやり方がセットアップされているmaven archetypeを作ったので、使い方を紹介する。

Maven Archetypeの使い方

Bashの場合

mvn archetype:generate\
 -DarchetypeGroupId=am.ik.archetype\
 -DarchetypeArtifactId=spring-boot-docker-blank-archetype\
 -DarchetypeVersion=1.0.0

コマンドプロンプト(Windows)の場合

mvn archetype:generate^
 -DarchetypeGroupId=am.ik.archetype^
 -DarchetypeArtifactId=spring-boot-docker-blank-archetype^
 -DarchetypeVersion=1.0.0

たいしたことをやっていないので、もちろん自分でDockerfile作ってもいい。

使用例

プロジェクト作成

$ mvn archetype:generate -B\
 -DarchetypeGroupId=am.ik.archetype\
 -DarchetypeArtifactId=spring-boot-docker-blank-archetype\
 -DarchetypeVersion=1.0.0\
 -DgroupId=com.example\
 -DartifactId=hajiboot\
 -Dversion=1.0.0-SNAPSHOT

アプリケーションのビルド

$ mvn clean package
$ cd target
$ sudo docker build -t spring-boot-docker-demo .

mvn packageするとDockerfiletarget以下にコピーされるようになっている。

Dockerコンテナへデプロイ

$ sudo docker run -p 8080:8080 -t spring-boot-docker-demo

http://localhost:8080にアクセスすれば「Hello World!」が表示されるはず。

AWS Elastic Beanstalkへデプロイ

ここまでローカル開発環境のDockerを使ったけど、Elastic Beanstalkにデプロイするのであれば、ローカルのDockerは不要。 Elastic Beanstalkへのデプロイ方法もいろいろあるけど、ここでは簡単そうなDockerfile + Dockerrun.aws.json + 実行可能jarファイルをzipに固めて送る方法をとる。(Dockerrun.aws.jsonもコピーされるようになっているので、この3点セットはmvn packagetarget以下に出来る)

mvn packageのあと、targetディレクトリに移動するとapp.zipが出来ているのがわかります。

これは以下のコマンド実行結果を同じです。

$ zip app.zip Dockerfile Dockerrun.aws.json *.jar

これだけであればDockerインストールは不要ですね!

あとはこのzipをAWSにデプロイする。

"AWS Elastic Beanstalk Management Console"に行って、

Beanstalk01

Platformに"Docker"を選択。

Beanstalk02

「Launch Now」をクリックして、環境が出来上がるまで数分待つ。

Beanstalk03

"Health"が"Green"になったら準備OK。

Beanstalk04

さっき作った、app.zip を選択して、アプリケーションのバージョンを適当に記入し、"Deploy"をクリック。

Beanstalk05

アプリケーションがデプロイされたら、"Health"が再び"Green"になる。

Beanstalk06

Elastic Beanstalkのエンドポイント(default-environment-XXXXXXXX.elasticbeanstalk.com)にアクセスすると"Hello World!"が表示されるはず!

Beanstalk07

この雛形プロジェクトには"Spring Boot Actuator"が設定されているので、デプロイされた環境の情報もすぐに見れる。

Beanstalk08

意外と簡単。

元々高いポータビリティがさらに高まりました!

これではっきり言える

War is over!


地味なファイルアップロード方式でデプロイしたが、CUIでのデプロイはまた今度!

Twitterで http://stackoverflow.com/questions/27185671/elastic-beanstalk-docker-and-continuous-integration をお勧めされた。

アプリの作り方に関しては「はじめてのSpring Boot」を読みましょう!


✒️️ Edit  ⏰ History  🗑 Delete