
クラウド上でアプリケーションをDockerイメージとして管理し、Dockerコンテナとして運用する方法として、AWSのECRとECSがあります。今回はECSのFargateを使ってReactのDockerアプリケーションをAWS上で稼働させる方法を紹介します。
はじめに
AWS上でReactのDockerアプリケーションを稼働せさせる方法としてて、以前の記事「AWS ECRとECSの入門(EC2編)」では、ECRとECSのEC2版を紹介しました。
ECSでEC2インスタンスをそのまま使う場合、当然EC2の管理を行う必要が生じます。一方で、ECSのFargateを使う場合は、EC2インスタンスの事を考える必要がなくなり、完全にDockerイメージとコンテナの管理のみに集中できるようになります。これは大きなメリットです。
今回はReactのDockerアプリケーションを対象として、ECSのFargateを使って、AWS上でDockerコンテナを稼働させてみましょう。
前提
以下の準備が完了している必要があります。
- Dockerがインストールされていること
- AWS CLIがインストールされ、適切なIAMのユーザが作成済みで、プロファイルに設定されていること
- テスト用にVPCとパブリックなサブネットが構築済みであること
細かいバージョンは「環境」を参照してください。
下準備
ReactのDockerアプリケーションを作成し、ECRにPushする
以前の記事「AWS ECRとECSの入門(EC2編)」から以下の章を実施してください。
- ReactのDockerアプリケーションの作成
- ECRのリポジトリ作成とDockerイメージの管理
- ECSクラスターの作成
- ALBによるロードバランシングの設定
ECRのリポジトリの確認
「ECS」の画面から、「Repositories」をクリックします。
上記のようにReactのDockerアプリケーションのイメージ「sample-react-ecs-app」のPushに成功していればOKです。
ECSのクラスターの確認
「ECS」の画面から、「Clusters」をクリックします。
上記のようにクラスター「sample-react-ecs-app-cluster」が作成され、ACTIVEになっていればOKです。サービスやタスクは何も無い状態です。
ALBの確認
「EC2」の画面から、「Load Balancers」をクリックします。以下のように今回用のALB「sample-react-ecs-app-alb」が作成済みであればOKです。
ターゲットグループは「Target type」をインスタンスではなくIPで作成する必要があり、後でサービス作成の際に一緒に新しく作成します。
これで下準備は整いました。
ECS FargateによるDockerの運用
それではいよいよFargateでECSのタスクとサービスを作成していきましょう。
ECS Fargateタスクの作成
「ECS」画面から「Task Definition」を選択し、「Create new Task Definition」をクリックします。
「FARGATE」を選択し、「Next step」をクリックします。
以下を設定します。今回は最小のサイズを選択しています。
- Task Definition Name: sample-react-ecs-app-fargate-task
- Task memory (GB): 0.5 GB
- Task CPU (vCPU): 0.25 vCPU
そして「Add container」をクリックしてDockerコンテナ情報を追加します。
コンテナ情報は以下を設定し、「Add」をクリックします。
- Container name: sample-react-ecs-app
- Image: (ECRの対象リポジトリのRepository URI)
- Memory Limit: Soft limit 128
= Port mappings: 80 tcp
「Create」をクリックします。
タスクの作成が成功したら「View task definition」をクリックします。
作成したタスクを確認できました。
ECS Fargateサービスの作成
「ECS」画面から「Clusters」内の対象のクラスターを選択し、「Create」をクリックします。
以下を設定し、「Next step」をクリックします。
- Launch type: FARGATE
- Task Definition: sample-react-ecs-app-fargate-task
- Cluster: sample-react-ecs-app-cluster
- Service name: sample-react-ecs-app-fargate-service
- Number of tasks: 2 (Dockerコンテナを2つ起動します)
以下にVPCとパブリックなサブネットを設定し、新しくセキュリティグループを作るために「Security groups」の「Edit」をクリックします。
以下を設定し、「Save」をクリックします。
- Security group name: sample-react-ecs-sg-1
- Inbound rules: HTTP Anywhere (デフォルト)
以下を設定し、「Next step」をクリックします。
- Load Balancer: Application Load Balancer
- Load balancer name: sample-react-ecs-app-alb
- Listener port: 80:HTTP
- Target group name: sample-react-ecs-app-group
- Path pattern: 「/*」
- Evaluation order: 1
- Health check path: 「/index.html」
以下を設定し、「Next step」をクリックします。
- Service Auto Scaling: Configure Service Auto Scaling to adjust your service’s desired count
- Minimum number of tasks: 2
- Desired number of tasks: 2 (今回はDockerコンテナを2つ起動します)
- Maximum number of tasks: 4
- Policy name: sampleReactEcsAppScalingPolicy
「Create Service」をクリックします。
サービスの作成が成功したら「View Service」をクリックします。
「Tasks」タブを選択すると、2つのタスクが実行されていることが確認できます。
「Clusters」を見ると、以下のようにサービスが1つ、タスクが2つ稼働していることが確認できます。
これでサービスの作成が完了です。
アプリケーションの稼働確認
最後にALB経由でECSで稼働しているDockerコンテナにアクセスしてみましょう。
「EC2」画面から、「Load Balancers」をクリックします。対象のALBを選択し、DNS名をコピーします。
ブラウザにDNS名を入力すると、以下のようにReactのDockerアプリケーションが表示されました。
これでECSのFargateを使って、ReactのDockerアプリケーションを稼働させることができました。
最後に
いかがでしたか?これでEC2インスタンスを自前で管理する手間から開放され、Fargateを使って気楽にAWS上にDockerアプリケーションを稼働させることができるようになったことでしょう。これで開発により専念できますね。それでは。
環境
- Docker: 18.06.1-ce, build e68fc7a
- AWS CLI: aws-cli/1.16.40 Python/3.7.0 Darwin/18.2.0 botocore/1.12.30