#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を作成する。
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にリポジトリを作成しておく。
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つ作成する。
#4.タスク定義#
以下のとおり、コンテナ定義を作成する。イメージは先程作成したECRリポジトリURIを指定する。
#5.ALBの作成#
##5-1 ロードバランサーの設定##
以下のとおりリスナーは80番ポートだけを指定。
##5-2 セキュリティ設定の構成##
SSLは今回利用しないので、気にせずそのまま進む。
##5-3 セキュリティグループの設定##
80番ポートだけを通すセキュリティグループをさくせい。
##5-4 ルーティングの設定##
ターゲットはインスタンスにする。
##5-5 ターゲットの登録##
ここでは、後でECSのサービス側で指定するのでインスタンスは指定しない。
##5-6 確認##
「確認」をクリックし、ALBの作成完了。
#6.サービス#
##6-1 サービスの設定##
タスクを4つ起動させるようにする。
##6-2 ネットワーク構成##
先程作成したALBを指定します。なお、「サービスの検出の統合の有効化」はここでは一旦チェックをはずしておく。
##6-3 Auto Scaling (オプション)##
ここでは何も一旦指定しない。
##6-4 確認##
「サービスの作成」をクリックすると、タスクの実行が開始される。
そう、セキュリティグループが足りない。ECSインスタンスのセキュリティグループにALBからのセキュリティグループを追加してあげないといけない。
改めてステータスを確認してみるとヘルスチェックに合格していることがわかる。
#7 コンテナを置き換える#
##7-1 コンテナの変更##
##7-2 サービスの変更##
リビジョンを先ほど変更したものに変更。
※最小ヘルス率が100なので起動しているコンテナ4は変わらない。
最大率200なので、新しい4つが起動し、合計8となる。
起動していた4つは消え、4つ起動状態となる。
想定ではコンテナが8個起動してくるはずだが、6個しか起動してこない?
イベントを確認してみるとメモリ不足で起動しないことがわかる。
EC2 Auto Scaling より 希望するキャパシティと最大を 3 に増やす。
#8 Auto Scalling#
#9 リンク#
Amazon ECS