DEV Community

kaede
kaede

Posted on

AWS 基礎 Part 12 -- ECS のタスクで Spring アプリのイメージを動かす

ECS クラスタのタスク定義の作成

ローカルで動作確認済みの Docker コンテナがある。
(springboot で作成し localhost:8080 で確認)
これを ECR に push 済みの状態。

  • タスク定義名 : spring-task
  • コンテナ名: hello-spring
  • コンテナURL : {userId}.dkr.ecr.ap-northeast-1.amazonaws.com/hello-spring

これで spring-task というタスク定義を作成

まずはこれで実行タスクを作ってアクセスする。


ECS クラスタの作成

  • name: spring-cluster
  • subnets: klein-private-{a,c}

セキュリティグループの作成

EC2 の画面から作成する。

デフォルトでは http ポート80 しか許可していない。
ポート8080 で動かすアプリは ポート8080 も許可する必要がある。
nginx は ポート80 で動かすアプリなので必要なかったが。

  • name: from-8080
  • インバウンド: Custom TCP 8080

これで作成する。

なぜ HTTP ではなく TCP なのかは不明。


実行タスク作成

  • 計算オプション: ローンチタイプ
  • タスク族: spring-task
  • コンテナ上書き → 自動で hello-spring に
  • VPC サブネット -> クラスタと同じ
  • セキュリティグループ: from-8080

これで作られるのを待つ


Public IP から実行タスクにアクセスする

実行タスクが Running になってからアクセスする

Image description

Spring アプリにアクセスできた!


Private IP から実行タスクにアクセスする

ssh -i ~/.ssh/elb-ec2-test-key.pem \
ec2-user@18.step.server.ip 

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|
Enter fullscreen mode Exit fullscreen mode

VPC 内部の踏み台サーバーに入って

curl 10.springApp.private.ip:8080
Hello From Spring Resource! 
Enter fullscreen mode Exit fullscreen mode

Spring アプリの実行タスクのプライベート IP に curl する。

レスポンスが返ってきた。

Image description

実行タスクにログも入っている。


まとめ

Spring アプリを ECS で動かすためには
 

  1. ローカルで Spring アプリを Docker イメージにビルドする
  2. ローカルで Docker イメージを走らせる
  3. localhost:8080 を叩いて動作確認する
  4. ECR リポジトリを作る
  5. ECR リポジトリに Docker イメージを push する
  6. ECS クラスタを作る
  7. ECS クラスタのタスク定義を ECR リポジトリから作る
  8. セキュリティグループを作る
    • インバウンドルールの許可: HTTP 8080 ポート
  9. 実行タスクを作る。前述で作ったこれらを使用。
    • タスク定義
    • セキュリティグループ
  10. 実行タスクにアクセスして動作確認

これらの手順でできる。以上。

Top comments (0)