Amazon ECS 一通の動作

#1.Dockerイメージ#

dockerのインストール（環境:Amazon Linux2）

```
sudo yum install -y docker
sudo service docker start
```

sudo なしでdockerを利用できるようにする。

```
sudo gpasswd -a $USER docker
sudo service docker restart
```


DockerFileを作成する。

```DockerFile:DockerFile
FROM centos:latest

RUN yum install -y httpd

COPY ./index.html /var/www/html/index.html

VOLUME /var/www/html

EXPOSE 443 80

CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
```

```
docker build -t demo ./
```



#2.ECRにログインしPush##

ECRにリポジトリを作成しておく。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/fc6d661b-927b-5043-4e01-016176f871e8.png)

IAMロールについての説明は省きますが、EC2インスタンスのECRへPushするためのIAMロールが必要です。

aws configureにregionを指定しておく。

```
aws configure
AWS Access Key ID [None]: 
AWS Secret Access Key [None]: 
Default region name: ap-northeast-1
Default output format: json 
```

ECRにログインする。

```
aws ecr get-login --no-include-email 

aws ecr get-login-password | docker login --username AWS --password-stdin 12345678901.dkr.ecr.ap-northeast-1.amazonaws.com/repo-leon
```

タグをるける。

```
docker tag demo:latest 12345678901.dkr.ecr.ap-northeast-1.amazonaws.com/repo-leon:latest
```

push する。

```
docker push 12345678901.dkr.ecr.ap-northeast-1.amazonaws.com/repo-leon:latest
```

レポジトリに push されたかを確認する。

```
aws ecr describe-repositories --repository-names repo-leon
{
    "repositories": [
        {
            "repositoryUri": "12345678901.dkr.ecr.ap-northeast-1.amazonaws.com/repo-leon", 
            "imageScanningConfiguration": {
                "scanOnPush": false
            }, 
            "registryId": "12345678901", 
            "imageTagMutability": "MUTABLE", 
            "repositoryArn": "arn:aws:ecr:ap-northeast-1:12345678901:repository/repo-leon", 
            "repositoryName": "repo-leon", 
            "createdAt": 1583228141.0
        }
    ]
}
```



#3.クラスター#

以下のとおり、クラスターをEC2 Linux + ネットワーキングで、t3.smallで2つ作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/253b1159-3fd2-21e8-2494-500d07166768.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/69ad46af-e2d7-b369-d52e-9f6ee1f5d738.png)



#4.タスク定義#

以下のとおり、コンテナ定義を作成する。イメージは先程作成したECRリポジトリURIを指定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/ca35caf4-11be-e0db-cc42-7a92ec5080f8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/fc112f80-5ffc-f4f5-b9f1-eac7e555ab68.png)



#5.ALBの作成#

##5-1 ロードバランサーの設定##
以下のとおりリスナーは80番ポートだけを指定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/5894d41f-ae2f-42af-18a1-51d455f069c6.png)

##5-2 セキュリティ設定の構成##
SSLは今回利用しないので、気にせずそのまま進む。

##5-3 セキュリティグループの設定##
80番ポートだけを通すセキュリティグループをさくせい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/5feb1668-55e2-e7ac-2607-b13aca3832a5.png)

##5-4 ルーティングの設定##
ターゲットはインスタンスにする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/730f8e53-866d-843e-04cd-cb91f1b4d745.png)

##5-5 ターゲットの登録##
ここでは、後でECSのサービス側で指定するのでインスタンスは指定しない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/c3249483-5cfa-6da5-f890-edf8b5ecdfcc.png)

##5-6 確認##
「確認」をクリックし、ALBの作成完了。



#6.サービス#

##6-1 サービスの設定##
タスクを4つ起動させるようにする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/00832355-df77-e39e-07ff-ddab9382d513.png)

##6-2 ネットワーク構成##
先程作成したALBを指定します。なお、「サービスの検出の統合の有効化」はここでは一旦チェックをはずしておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/7259dca5-af5b-9cd1-1bed-317a0e1a43ab.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/e5e11b58-b055-bb2d-8ccd-5098ee8003bf.png)

##6-3　Auto Scaling (オプション)##
ここでは何も一旦指定しない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/aaa20a75-bc1c-6dd1-cbed-ebb09cf3d8da.png)

##6-4 確認##
「サービスの作成」をクリックすると、タスクの実行が開始される。

しかし、この状態ではALBのヘルスチェックに合格しない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/d319362c-a779-91f9-d2ed-f20853cb4559.png)

そう、セキュリティグループが足りない。ECSインスタンスのセキュリティグループにALBからのセキュリティグループを追加してあげないといけない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/4f1acfbc-9675-455c-0d32-4bf1a162c2ce.png)

改めてステータスを確認してみるとヘルスチェックに合格していることがわかる。

![スクリーンショット 2020-03-09 18.51.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/16bad5c0-7595-2e2c-8280-0f9c0f1e8288.png)



#7 コンテナを置き換える#

##7-1 コンテナの変更##

別のコンテナに変更する。
![スクリーンショット 2020-04-04 15.54.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/55fad8a1-c143-c6ec-9037-f17152c2ef4c.png)

##7-2 サービスの変更##

リビジョンを先ほど変更したものに変更。
※最小ヘルス率が100なので起動しているコンテナ4は変わらない。
 最大率200なので、新しい4つが起動し、合計8となる。
 起動していた4つは消え、4つ起動状態となる。　
![スクリーンショット 2020-04-04 15.56.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/cd814270-8d60-c971-693f-2d2c52de3df2.png)

想定ではコンテナが8個起動してくるはずだが、6個しか起動してこない？
![スクリーンショット 2020-04-04 16.03.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/afd0a755-0c1a-da19-8235-0c0755aa24b9.png)

イベントを確認してみるとメモリ不足で起動しないことがわかる。
![スクリーンショット 2020-04-04 16.06.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/15758c68-c830-69a0-cb45-b1e58e1dacad.png)

EC2 Auto Scaling より 希望するキャパシティと最大を 3 に増やす。　
![スクリーンショット 2020-04-04 16.25.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/43e81dde-6b51-d12f-64c1-cf5ba3af7f1f.png)

タスクが8個起動し、最終的に4個になることがわかる。
![スクリーンショット 2020-04-04 16.33.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/f2a46249-acd6-ce9d-944e-526087bdb9ee.png)



#8 Auto Scalling#

タスクの最小数、必要数、最大数を以下のとおり設定する。
![スクリーンショット 2020-04-04 16.13.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/e8e3ff44-11d7-1cb3-9169-d54ce98d3c43.png)

CPUでターゲット値を1以下にする。
![スクリーンショット 2020-04-04 16.15.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/dc75607f-4e08-ebcd-5b34-bf9116bb1493.png)

必要数/実行中の数が、4→3 と減っていくことがわかる。
![スクリーンショット 2020-04-04 16.47.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/675897e4-10ab-1c34-7366-ce28b105746c.png)



#9 リンク#
[Amazon ECS](https://qiita.com/leomaro7/items/deb114e5ec209a044e5d)