別サイト
に書いていたのだけどサ終してしまったので移行した記事その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で設定する
クラスター作成
クラスターの作成を選択
EC2付きにしてインスタンスタイプやインスタンス数等を自由に選んで作成
EC2がアクティブになるまでまつ
タスク実行
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にタスク定義(リビジョン作成)
- サービス更新でリビジョンを更新
という感じなのかな