BETA

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

投稿日:2019-03-16
最終更新:2019-03-27

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で設定する


クラスター作成

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

タスク実行

タスクのタブからタスクの実行を選択して実行

少し待つとRUNNINGになる

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  


表示された!

感想

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

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

という感じなのかな

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@sireikanの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!