LoginSignup
0
1

More than 3 years have passed since last update.

Quarkusを動かしてdocker imageをAmazonECSで動かすまで

Posted at

別サイト

に書いていたのだけどサ終してしまったので移行した記事その5
2019/03/16のもの

Quarkus

Javaのフレームワーク。
特徴としてはネイティブ用のバイナリを生成して起動がめっちゃ早いとかそんな

前提条件

  • Java 8以上
  • Maven 3.5.3以上

らしい

GraalVM

GraalVMをインストール
.bash_profile等に設定

export GRAALVM_HOME=[インストールフォルダ]/Contents/Home

新規プロジェクト

Quarkusの公式に従いプロジェクト作成コマンド実行

mvn io.quarkus:quarkus-maven-plugin:0.11.0:create \
-DprojectGroupId=org.acme \
-DprojectArtifactId=getting-started \
-DclassName="org.acme.quickstart.GreetingResource" \
-Dpath="/hello"

実装

公式スタートガイドに従って作成
ソースはデフォルトでも入っているのでそのままでも動きます
公式ではAPIの追加とかこうやるんだぞみたいなのが書いてあるのでそのままやる
動かすときのコマンドを理解するのが大事ぽさ

ローカル起動

mvn compile quarkus:dev

jar作成

mvn package

jar起動

java -jar target/getting-started-1.0-SNAPSHOT-runner.jar

ネイティブバイナリ作成

mvn package -Pnative

ネイティブバイナリ起動

./target/quarkus-quickstart-runner

コンテナ作成

mvn package -Pnative -Dnative-image.docker-build=true

dockerビルド

docker build -f src/main/docker/Dockerfile -t quarkus .

run

docker run -i --rm -p 8080:8080 quarkus

ローカルでもjarでもバイナリでもdockerでも同じように動きました

$ curl http://localhost:8080/hello/greeting/quarkus
hello quarkus

AWS側へのデプロイ

dockerイメージを作成できたのでAWS ECSへのデプロイまでをやる

ECR作成

新規リポジトリの作成で「quarkus」という名前で作ってみる

イメージのpush

作成したリポジトリの「プッシュコマンドの表示」に従ってコマンド実行

aws ecr get-login --no-include-email --region ap-northeast-1

## ログインコマンドが出るのでそのまま実行

## 作成したイメージをタグ付け
docker tag quarkus:latest xxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/quarkus:latest

## push
docker push xxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/quarkus:latest

ECR上でpushされていれば成功

タスク作成

ECSからタスク定義作成
イメージのところにECRで定義されているものを入力して作成
DockerfileのEXPOSEをいじればいいのかもしれないがデフォルトが8080で受けるようなので
ポートマッピングは80 8080で設定する

570dbdee79d13c11f76eb76746411c12.jpg

462c242304492b7be7726ee289ea0451.jpg

4b566c405019460beb9fc6ea122a3293.jpg

クラスター作成

クラスターの作成を選択
EC2付きにしてインスタンスタイプやインスタンス数等を自由に選んで作成
EC2がアクティブになるまでまつ
a9d948c74ad61c6ba18018c1f59b8730.jpg

タスク実行

タスクのタブからタスクの実行を選択して実行
10208d5eaa7026ca42782fa2915af10d.jpg

少し待つとRUNNINGになる
670d7cf11665e5b5b8a996b5d126f51c.jpg

sshでインスタンスに入って確認
80で受けて8080にマッピングされるようになってる

$ docker container ls
CONTAINER ID        IMAGE                                                       COMMAND                  CREATED             STATUS              PORTS                  NAMES
29c1fb97dc07        xxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/quarkus   "./application -Dqua…"   9 seconds ago       Up 8 seconds        0.0.0.0:80->8080/tcp   ecs-quarkus-5-quarkus-e491bef2eefec1fcfc01
0187c98c619b        amazon/amazon-ecs-agent:latest                              "/agent"                 About an hour ago   Up About an hour                           ecs-agent

接続確認

ブラウザから見ると

http://[EC2のパブリックDNS]/hello/greeting/quarkus

69be9989a2ab0cf1959a48784034d466.jpg

表示された!

感想

Quarkusの起動は、あれ、もう起動してるのかという感覚になるぐらい早かった
普段Javaを使うことが多いのだけど起動が長いのはお約束だったのでかなり新鮮
ECSは作成に最初何度か手間取ったけどなんとかできてよかった
クラスターとかタスクというのがなんなのかいまいちとっつきづらかった。。。
あとはポートマッピングのところで最初は動的マッピングとかにしてたらポートがずれてて動かないってのではまったり。。。
更新するときは

  • Javaを書く
  • dockerイメージ作成
  • ECRにpush
  • ECSにタスク定義(リビジョン作成)
  • サービス更新でリビジョンを更新

という感じなのかな

0
1
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
0
1