---
title: Spring Boot + DockerでAWS Elastic Beanstalkにデプロイ
tags: ["AWS", "AWS Elastic Beanstalk", "Docker", "Java", "Spring Boot"]
categories: ["Programming", "Java", "org", "springframework", "boot"]
date: 2014-12-01T12:47:49Z
updated: 2014-12-01T12:47:49Z
---

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

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

やり方はいろいろあるみたいだが、Docker初心者な自分には[この記事](http://blog.adaofeliz.com/2014/11/21/first-look-spring-boot-and-docker/)が分かりやすかった。

この記事を試し、書いてあるやり方がセットアップされている[maven archetype](https://github.com/making/spring-boot-docker-blank)を作ったので、使い方を紹介する。

### 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`すると`Dockerfile`が`target`以下にコピーされるようになっている。


#### Dockerコンテナへデプロイ

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

[http://localhost:8080](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 package`で`target`以下に出来る)


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

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

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

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

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


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

![Beanstalk01](https://github.com/making/spring-boot-docker-blank/raw/master/images/beanstalk-01.png)

Platformに"Docker"を選択。

![Beanstalk02](https://github.com/making/spring-boot-docker-blank/raw/master/images/beanstalk-02.png)

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

![Beanstalk03](https://github.com/making/spring-boot-docker-blank/raw/master/images/beanstalk-03.png)

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

![Beanstalk04](https://github.com/making/spring-boot-docker-blank/raw/master/images/beanstalk-04.png)

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

![Beanstalk05](https://github.com/making/spring-boot-docker-blank/raw/master/images/beanstalk-05.png)

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

![Beanstalk06](https://github.com/making/spring-boot-docker-blank/raw/master/images/beanstalk-06.png)

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

![Beanstalk07](https://github.com/making/spring-boot-docker-blank/raw/master/images/beanstalk-07.png)

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

![Beanstalk08](https://github.com/making/spring-boot-docker-blank/raw/master/images/beanstalk-08.png)

意外と簡単。

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

これではっきり言える

War is over!

---

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

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

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

<a href="http://www.amazon.co.jp/%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%81%AESpring-Boot%E2%80%95%E3%80%8CSpring-Framework%E3%80%8D%E3%81%A7%E7%B0%A1%E5%8D%98Java-BOOKS-%E4%BF%8A%E6%98%8E/dp/4777518655%3FSubscriptionId%3DAKIAJ7Y2FDFBWLT5HCQA%26tag%3Dikam-22%26linkCode%3Dsp1%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4777518655"><img src="http://ecx.images-amazon.com/images/I/51NngrEolCL._SL160_.jpg" title="はじめてのSpring Boot―「Spring Framework」で簡単Java (I/O BOOKS)"></a>
