Open2

Spring bootで作ったHello WorldをAWS ECSで実行

ねぎぼうづねぎぼうづ

Spring Bootを使ってHello Worldアプリを作る

以下の記事を参考に。
https://spring.pleiades.io/quickstart

作ったHelloWorldアプリをDockerイメージとしてbuildする

以下の記事を参考に。
https://spring.pleiades.io/guides/gs/spring-boot-docker/

注意点1

記事内の手順ではJDK8を使用していたが、今回はJDK11を使いたかったので、docker hubからopenjdk:11を探してDockerfileのFROMに書いた。また、作成するイメージは「springio/gs-spring-boot-docker」となっているが、springioのところを自分のユーザーIDに置き換えた。そうしないとpushできない。記事内にも書いてある。

注意点2

M1 チップのMacで特にオプション指定せずにdocker buildしたため、ARMアーキテクチャで作られて、最初はAWS ECSにクラスターを作ったときにエラーが発生した。--platform amd64 というオプションをつけてdocker buildしたらうまくいった。

buildしたイメージをDocker HubにpushしてAWS ECSで動かす

Docker HubへのpushはDocker Desktopから行った。
AWS ECSのクラスタを作る際にはコンテナ定義は「custom」を使用。Dockerイメージ・タグ名を指定して、ポートは8080にした。その他はデフォルトのままにした。サービス起動後、ログを確認してSpring Bootのアプリ起動時のログが出ていたらOK。タスクからパブリックIPを確認して、http(sなし)で、クラスタ作成の際に指定したポート番号8080を付与してブラウザからアクセス。ローカルでの稼働時と同じように表示されることを確認した。
以下の記事は画面イメージつきでクラスタ作成から画面表示までを説明してくれている。
https://business.ntt-east.co.jp/content/cloudsolution/column-try-37.html

ねぎぼうづねぎぼうづ

docker buildは、指定したフォルダ以下をdockerイメージ化するものと理解しました。
Spring Boot の場合はTomcatを内包しているから上記の手順になるけど、JavaEEの場合はPayaraとかGlassFishとかのアプリケーションサーバーにデプロイするところまで行って、デプロイ済のサーバーをdockerイメージ化するのでしょう。きっと。
違っていました。Dockerfileの中のCOPYコマンドでホストからコンテナイメージにファイルコピーしていました。(2021/08/17追記)
そうして作ったdockerイメージを使ってコンテナを起動するときにアプリケーションサーバーの起動コマンドを自動投入するように、DockerfileのENTRYPOINTに書いておく。そうすると、コンテナ起動時にサーバーも起動して、ブラウザでアクセスすると応答が返ってくるようになる。