Amazon ECSでコンテナをクラスタリングする

<img width="800" alt="ecs01.png" src="https://qiita-image-store.s3.amazonaws.com/0/141934/fe8b2277-35c0-7c93-6cef-5bd7d7d056ec.png">

# 全体の流れ

1. [ローカルでコンテナを動かす](https://qiita.com/NaokiIshimura/items/8d0698735d506e5790c9)
2. [ECSでコンテナを動かす](https://qiita.com/NaokiIshimura/items/45d2288b5a2fc4e4e4e4)
3. [ECSでコンテナをクラスタリングする](https://qiita.com/NaokiIshimura/items/a1a2a6182a1505950789)　←今回の投稿
4. [ECSのログをCloudWatchで収集する](https://qiita.com/NaokiIshimura/items/d1b8f54d863b8755c3d6)
5. [ドメインを取得する](https://qiita.com/NaokiIshimura/items/89e104dd2d8dd950780e)
6. [ドメインにALBを割り当てる](https://qiita.com/items/654f1f82adb039f1ad47)
7. [HTTPS化する](https://qiita.com/NaokiIshimura/items/014a163c60feebec570b)

# もくじ

今回の投稿ではコンテナをクラスタリングします。

1. Application Load Balancerの作成
2. セキュリティグループの作成
3. ECSのリポジトリにコンテナイメージを登録する
4. ECSのタスク定義を作成する
5. ECSのクラスターを作成する
6. ECSのサービスを作成する
7. アクセス確認

<img width="993" alt="ecs200.png" src="https://qiita-image-store.s3.amazonaws.com/0/141934/2b1ba428-7fc2-ad5a-20a4-e67f54addf1c.png">

# デプロイするコンテナについて

[以前の投稿](https://qiita.com/NaokiIshimura/items/8d0698735d506e5790c9)で作成したnginxのコンテナイメージをデプロイします。

# 1. Application Load Balancerの作成

コンテナへのロードバランシングを行うApplication Load Balancer(ALB)を作成します。

![ec02.png](https://qiita-image-store.s3.amazonaws.com/0/141934/659a36e0-a29b-d4cf-3c81-b9063fb0de42.png)
![lb.png](https://qiita-image-store.s3.amazonaws.com/0/141934/677e320a-70ff-df8a-174d-c035d4599947.png)
![lb01.png](https://qiita-image-store.s3.amazonaws.com/0/141934/d2c2b5d2-9b0c-a57d-4d16-4a6045ba45a3.png)
![lb02.png](https://qiita-image-store.s3.amazonaws.com/0/141934/ff395c28-2603-f110-7a04-19c8b192a14d.png)

![lb03.png](https://qiita-image-store.s3.amazonaws.com/0/141934/517d7de5-e5d9-d283-31e5-d224b8e3ae0f.png)

> 補足：アベイラビリティゾーン
> ECSでクラスターを作成する際にはここで選択したVPCを利用するようにします。

![lb04.png](https://qiita-image-store.s3.amazonaws.com/0/141934/b61a1a53-ef36-35fb-46dd-2f194b0c20c1.png)
![lb05.png](https://qiita-image-store.s3.amazonaws.com/0/141934/02c48402-adb2-af9b-9f63-37511d6650ee.png)

![lb06.png](https://qiita-image-store.s3.amazonaws.com/0/141934/a7cc2406-63f4-666d-33a5-a00013c83869.png)

![lb07.png](https://qiita-image-store.s3.amazonaws.com/0/141934/2e0ba4d9-e97e-95a6-a26b-0c5e86779e51.png)
![lb08.png](https://qiita-image-store.s3.amazonaws.com/0/141934/72a9b43e-7e22-aeac-b411-13936eb2cb81.png)
![lb09.png](https://qiita-image-store.s3.amazonaws.com/0/141934/c9b272e6-1ae6-666a-c1a5-cdfaf02e2676.png)
![lb10.png](https://qiita-image-store.s3.amazonaws.com/0/141934/7c777358-ea4b-953e-724c-a7a131e3357c.png)

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

ECSでクラスターを作成する際にEC2インスタンスに割り当てるセキュリティグループを作成しておきます。

![sg.png](https://qiita-image-store.s3.amazonaws.com/0/141934/d3c36ba6-2f67-dc55-75fe-c8dbbde7e95f.png)
![sg01.png](https://qiita-image-store.s3.amazonaws.com/0/141934/ef57d6bc-f2e7-b07f-932d-60664f7a4cb3.png)
![sg02.png](https://qiita-image-store.s3.amazonaws.com/0/141934/e3ec7759-e2a9-3f7b-822f-987d3e19bcdb.png)

> 補足：VPC
> ALBを作成する際に選択したVPCを選択する
> 
> 補足： セキュリティグループのルール
> ALBからEC2インスタンスへのアクセスを許可させる必要があるため、
> **ポート範囲**にはコンテナのホストポートを指定する
> **ソース**にはALBに割り当てられているセキュリティグループを指定する
> 
> 補足：コンテナのホストポートについて
> ホストポートを動的割当にした場合は`32768 - 61000`が利用される
> [参考：タスク定義パラメーター \- Amazon Elastic Container Service](https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/task_definition_parameters.html)

![sg03.png](https://qiita-image-store.s3.amazonaws.com/0/141934/1da0a9b2-373a-e525-5aee-9bab2521d428.png)

# 3. ECSのリポジトリにコンテナイメージを登録する

![repo01.png](https://qiita-image-store.s3.amazonaws.com/0/141934/27f6cdde-2276-e2e8-ecdc-1321a24b5cc8.png)
![repo02.png](https://qiita-image-store.s3.amazonaws.com/0/141934/275744c6-fb17-639e-36a6-ffdc4963454e.png)
![repo03.png](https://qiita-image-store.s3.amazonaws.com/0/141934/c78c5497-c5a2-c2bd-0fad-133d1b668a55.png)
![repo04.png](https://qiita-image-store.s3.amazonaws.com/0/141934/55ece402-dc2b-18d9-c88f-c14bf49290a5.png)
![repo05.png](https://qiita-image-store.s3.amazonaws.com/0/141934/f21bf7b0-ae16-9d8c-7eb0-b52058a999de.png)
![repo06.png](https://qiita-image-store.s3.amazonaws.com/0/141934/153195fd-68c8-13d8-a820-51d1669ea084.png)

> 補足：リポジトリのURI
> タスク定義で必要になるためメモしておく

# 4. ECSのタスク定義を作成する

![task01.png](https://qiita-image-store.s3.amazonaws.com/0/141934/7777e4dd-97c4-9411-0d71-ae2f41741674.png)
![task02.png](https://qiita-image-store.s3.amazonaws.com/0/141934/1af39716-a5a9-7872-60fb-320170e1b5a0.png)
![task03.png](https://qiita-image-store.s3.amazonaws.com/0/141934/a618d0fe-510c-c627-2594-baeaf7fc9a87.png)

> 補足：イメージ
> `リポジトリのURI`を指定する
> 
> 補足：ポートマッピング
> **ホストポート**に`0`を指定することで、ポートが動的に割り当てられる
> 
> 補足：コンテナのホストポートについて
> ホストポートを動的割当にした場合は`32768 - 61000`が利用される
> [参考：タスク定義パラメーター \- Amazon Elastic Container Service](https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/task_definition_parameters.html)

![task04.png](https://qiita-image-store.s3.amazonaws.com/0/141934/2b79ada8-ee00-9d03-207b-4f5d1104a26c.png)
![task05.png](https://qiita-image-store.s3.amazonaws.com/0/141934/d61671d8-26d4-8fcf-80fb-6ecfdfe91f44.png)
![task06.png](https://qiita-image-store.s3.amazonaws.com/0/141934/ca7b2be8-bcca-bbb2-15a9-93a9120adba3.png)

# 5. ECSのクラスターを作成する

![cl01.png](https://qiita-image-store.s3.amazonaws.com/0/141934/55902271-82f8-364e-2d37-fa949f973041.png)
![cl02.png](https://qiita-image-store.s3.amazonaws.com/0/141934/8a3fd310-433a-2dd0-3c6d-2d5397e26788.png)
![cl03.png](https://qiita-image-store.s3.amazonaws.com/0/141934/86713938-ca66-bc3a-50e8-e10988bb7873.png)
![cl04.png](https://qiita-image-store.s3.amazonaws.com/0/141934/4025838e-1f14-b4b9-d86c-0dce1c49c87c.png)

> 補足：VPC、サブネット
> **1. Application Load Balancerの作成**で指定したVPC、サブネットを指定する
> 
> 補足：セキュリティグループ
> **2. セキュリティグループの作成**で用意したセキュリティグループを指定する

![cl05.png](https://qiita-image-store.s3.amazonaws.com/0/141934/af90efce-0039-e1c5-e852-ad041797a995.png)
![cl06.png](https://qiita-image-store.s3.amazonaws.com/0/141934/5648c93d-6ab6-2efb-ff5c-51364ec22bee.png)

# 6. ECSのサービスを作成する

![sv01.png](https://qiita-image-store.s3.amazonaws.com/0/141934/35a3d646-c9a6-5961-b888-84dc41dda01a.png)
![sv02.png](https://qiita-image-store.s3.amazonaws.com/0/141934/99ecf078-11ba-2813-8d7b-20aa128470d0.png)
![sv03.png](https://qiita-image-store.s3.amazonaws.com/0/141934/12a43d5d-5c83-0ab4-fa44-e5dda347846a.png)

> 補足：ELB名
> **1. Application Load Balancerの作成**で作成したALBを指定する

![sv04.png](https://qiita-image-store.s3.amazonaws.com/0/141934/48083e89-309d-281b-03b7-8a63bfa7d75f.png)

> 補足：ターゲットグループ名
> **1. Application Load Balancerの作成**の際に作成したターゲットグループを指定する

![sv05.png](https://qiita-image-store.s3.amazonaws.com/0/141934/ef9a5a06-33e6-3207-155c-87c84c2b2b4e.png)
![sv06.png](https://qiita-image-store.s3.amazonaws.com/0/141934/8cbdc0a8-c1ca-245f-5fd7-536a407f46ad.png)
![sv07.png](https://qiita-image-store.s3.amazonaws.com/0/141934/ea6c72ac-2a99-fabb-f235-dc2ae27218bc.png)

# 7. アクセス確認

## ECS

ECSのコンソールで実行中のタスクステータスが確認できる。

![sv08.png](https://qiita-image-store.s3.amazonaws.com/0/141934/5fa5de65-efb8-583b-7678-1b242e322978.png)
![sv09.png](https://qiita-image-store.s3.amazonaws.com/0/141934/654dfd42-1169-04e1-2dce-be4e1e57745d.png)

## EC2インスタンス

EC2インスタンスのコンソールでクラスターで利用しているEC2インスタンスが確認できる。

![ac01.png](https://qiita-image-store.s3.amazonaws.com/0/141934/c321c9b6-9e77-18cd-ecce-1eeb11434873.png)

## ターゲットグループ

ターゲットグループのコンソールでサービスで登録したタスクのヘルスチェックの状況が確認できる。

![ac02.png](https://qiita-image-store.s3.amazonaws.com/0/141934/af9a1c6c-c28c-b9e0-ce85-577d07592a2b.png)

## ALB

ALBのコンソールで表示されるDNS名にブラウザからアクセスする。

![ac03.png](https://qiita-image-store.s3.amazonaws.com/0/141934/4b76f269-ab36-d262-8f4b-70b7ab95dd91.png)

![ac04.png](https://qiita-image-store.s3.amazonaws.com/0/141934/081c53ab-5490-c80e-7209-93a044c554f9.png)

# 補足

[【備忘録】ECSでデプロイしたコンテナにアクセス出来ない時に見直すこと \- Qiita](https://qiita.com/NaokiIshimura/items/cc478096630a60c1e1b9)