バージニア北部+aws/dockerコマンド打てる環境にてECS/Fargate動作確認したメモ書き
ネーミングの一貫性の無さはご愛嬌w
※2018/10/3 追記 : 本題に入る前にECR/ECSの全体的な流れを図にしてみました
その他諸々情報追加しています
全体の流れ
ECR : AWSに自分用のRepositoryを作成するまで
ECS : Clusterを作成し実行環境を構築するまで(ELBについては割愛)
これを踏まえて、実際に構築してみましょう
#ECRへのイメージ登録
- レポジトリ作成
ここでは ecraisi として作成 : XXXXX.dkr.ecr.us-east-1.amazonaws.com/ecraisi
アクセス許可で対象のIAM への許可を追加しておくこと
docker login コマンドを取得
$ aws ecr get-login --no-include-email --region us-east-1
docker login -u AWS -p eyJwYXl....NDIzMTkxMn0= https://XXXXX.dkr.ecr.us-east-1.amazonaws.com
↑で入手したdocker login コマンドをコピペして実行
$ sudo docker login -u AWS -p eyJwYXl....NDIzMjM2Mn0= https://XXXXX.dkr.ecr.us-east-1.amazonaws.com
試しに docker.io/nginx をベースにHello world させてみる
$ sudo docker image pull nginx
build
$ sudo docker build -t mynginx .
リポジトリecraisi にイメージをプッシュできるように、イメージにタグを付けます
$ sudo docker image tag mynginx XXXXX.dkr.ecr.us-east-1.amazonaws.com/ecraisi:mynginx
新しく作成した AWS リポジトリにこのイメージをプッシュ
$ sudo docker image push XXXXX.dkr.ecr.us-east-1.amazonaws.com/ecraisi:mynginx
ECSのリポジトリに登録されている事を確認しましょう
ロードバランサ作成
*LB新規作成
-ロードバランサメニューから "NLB"(Network Load Balancer) を作成
名称は今回 ECSLB としました
-ターゲットグル―プの名称設定
ここでは AISITG 、ターゲットの種類=ip、port=80 とします
※"リスナー設定","ターゲットの登録" はこの時点では必要ではないですが
ECSでクラスタ作成時にプルダウンで選択できるようになるので設定しておく事推奨
※Fargate するならリスナー設定/ターゲットグループはここで一旦削除し、"サービス作成"の段階で
新規に設定した方が簡単です
※コンテナサービスへのアクセスはロードバランサのDNS名でアクセスします(EIP不要)
#ECS/Fargate 設定
- タスク定義:レポジトリにpushしたdocker image を新規タスクに登録
(ECRでcontainar登録してなければ後述のECR設定を先に実行)
-Fargateを選択
ここではタスク名:MyTask とする
-コンテナ ecraisi:mynginx を追加
-ポートマッピングを tcp:80 として設定
- クラスター作成
-クラスターを "Networking Only"で作成
ここではクラスタ名:MyECS としています
- サービス作成
クラスタの"サービス"タブから作成
- FARGATEを選択
- タスク定義 : MyTask を選択
- サービス名: MyService
- タスクの数を設定 (サービスを削除するときにはタスク数=0にする事)
- VPC/Subnet/SGを選択
- ELBは当然NLB選択 > ECSLBを選択
- 対象コンテナをELBに追加
- リスナーポート port=80を選ぶとターゲットグループ名に"AISITG"が自動選択
(リスナーポート/TG共に削除してあればここで新規登録でOK)
- 確認
サービスの
”詳細”にロードバランスTG=AISITGとして設定
"タスク"にMyTaskが登録
されているのを確認
数分待ってるとターゲットAISITGに起動したコンテナの各IPが自動的に割り振られますので
http://NLBのFQDN でアクセスできたらできあがり!