LoginSignup
1
4

More than 3 years have passed since last update.

Amazon ECS 一通の動作

Last updated at Posted at 2020-04-06

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
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

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
image.png

4.タスク定義

以下のとおり、コンテナ定義を作成する。イメージは先程作成したECRリポジトリURIを指定する。
image.png
image.png

5.ALBの作成

5-1 ロードバランサーの設定

以下のとおりリスナーは80番ポートだけを指定。
image.png

5-2 セキュリティ設定の構成

SSLは今回利用しないので、気にせずそのまま進む。

5-3 セキュリティグループの設定

80番ポートだけを通すセキュリティグループをさくせい。
image.png

5-4 ルーティングの設定

ターゲットはインスタンスにする。
image.png

5-5 ターゲットの登録

ここでは、後でECSのサービス側で指定するのでインスタンスは指定しない。
image.png

5-6 確認

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

6.サービス

6-1 サービスの設定

タスクを4つ起動させるようにする。
image.png

6-2 ネットワーク構成

先程作成したALBを指定します。なお、「サービスの検出の統合の有効化」はここでは一旦チェックをはずしておく。
image.png
image.png

6-3 Auto Scaling (オプション)

ここでは何も一旦指定しない。
image.png

6-4 確認

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

しかし、この状態ではALBのヘルスチェックに合格しない。
image.png

そう、セキュリティグループが足りない。ECSインスタンスのセキュリティグループにALBからのセキュリティグループを追加してあげないといけない。
image.png

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

スクリーンショット 2020-03-09 18.51.33.png

7 コンテナを置き換える

7-1 コンテナの変更

別のコンテナに変更する。
スクリーンショット 2020-04-04 15.54.27.png

7-2 サービスの変更

リビジョンを先ほど変更したものに変更。
※最小ヘルス率が100なので起動しているコンテナ4は変わらない。
最大率200なので、新しい4つが起動し、合計8となる。
起動していた4つは消え、4つ起動状態となる。 
スクリーンショット 2020-04-04 15.56.19.png

想定ではコンテナが8個起動してくるはずだが、6個しか起動してこない?
スクリーンショット 2020-04-04 16.03.28.png

イベントを確認してみるとメモリ不足で起動しないことがわかる。
スクリーンショット 2020-04-04 16.06.31.png

EC2 Auto Scaling より 希望するキャパシティと最大を 3 に増やす。 
スクリーンショット 2020-04-04 16.25.06.png

タスクが8個起動し、最終的に4個になることがわかる。
スクリーンショット 2020-04-04 16.33.46.png

8 Auto Scalling

タスクの最小数、必要数、最大数を以下のとおり設定する。
スクリーンショット 2020-04-04 16.13.56.png

CPUでターゲット値を1以下にする。
スクリーンショット 2020-04-04 16.15.34.png

必要数/実行中の数が、4→3 と減っていくことがわかる。
スクリーンショット 2020-04-04 16.47.32.png

9 リンク

Amazon ECS

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4