ECSの概要整理(AWS)

AWS
この記事は約4分で読めます。
スポンサーリンク

ECS/ECRはDockerコンテナをクラスター環境として実行するためのサービスです。
ECSがDockerコンテナを実行する環境設定となり、ECRはDockerコンテナイメージを格納するリポジトリサービスとなります。

概要

ECR設定

Dockerコンテナの実行環境設定は「クラスター」という単位で管理します。Dockerコンテナが実行されるEC2の設定を管理します。
Dockerコンテナの実行は「サービス」と「タスク」という2つの設定で管理されます。
「タスク」はDockerコンテナの起動設定を行います。
「サービス」はタスクとクラスターを紐づける設定です。

実行環境としてはEC2とFargateの2つを選択できます。
EC2は実際にEC2をAutoScalingを使用して起動しそのうえでDockerコンテナを実行します。
Fargateはその部分の管理をAWS側で行ってくれます。
AWS Fargate での Amazon ECS

ECSクラスター

ECSクラスターはDockerコンテナが実行されるEC2を起動するVPC/サブネット/Securityグループを指定します。
クラスターの作成

EC2タイプを選択するとAutoScaling設定が作成されEC2が起動します。
クラスターはCloudFormationで作成されるので、紐付きについてはCloudFormationの実行結果を見た方が分かりやすいかもしれません。
Amazon ECS クラスターの Auto Scaling

クラスターの設定はほとんど(全く?)変更できないのでVPC等修正する場合はクラスターを再作成する形になります。

ECSタスク定義

ECSタスクではDockerコンテナの実行条件を指定します。
コンテナイメージの他に、コンテナに割り当てるCPU/メモリ等も指定します。
Amazon ECS タスク定義

タスク定義で検討が必要なパラメータがあります。
「タスクロール」はDockerコンテナがS3等にアクセスするためのロールを指定します。
「ネットワークモード」はFargateの場合はawsvpcのみ選択可能です。
これは、Dockerコンテナ単位でENIを作成します。
タスク定義パラメータ

DockerコンテナのログをCloudWatch Logsに送信することが可能です。
標準ではawslogsドライバーを使用します。
どこからログデータを取得するかというとコマンド出力 (STDOUT および STDERR I/O ストリーム)となります。
awslogs ログドライバーを使用する

パスワードなどのセキュリティ情報はSecrets Manager/Parameter Sotreに格納します。
Dockerコンテナとしては環境変数として受け取ることができます。
機密データの指定

ネットワークモード

基本的には「bridge」か「awsvpc」のどちらかを選択すると思います。
違いとしては「仮想ドライバでENIを共有」するか「コンテナ単位でENIを作成するか」の違いとなります。
awsvpcの方がパフォーマンスも良いですしSGもコンテナ単位で設定できるのでAWS推奨となっています。Fargateの場合はawsvpcのみ選択可能です。
Amazon ECS タスクネットワーキング

awsvpcを使用する場合はコンテナ数分ENIが作成されるのでネットワーク設計が重要となります。
また、EC2インスタンスは標準でENIの上限数が決まっています。
上限に達した場合は、EC2のインスタンスタイプを上げるかENIトランキングを使用します。
Elastic Network Interface のトランキング

ECSサービス設定

ECSのサービスはタスク定義とクラスター定義を紐づける設定になります。
タスクを実行するネットワーク(VPC/サブネット)やELBとの紐付けもサービスで行います。

Dockerコンテナを更新する場合もサービス設定で行います。
タスク定義のリビジョンを上げて、サービス設定で更新します。
更新する場合は「Blue/Green」と「ローリングアップデート」の2種類を選択できます。
サービスの更新
Amazon ECS デプロイタイプ

ECSのロール

ECSで使用するロールは複数の種類があります。
「タスク実行ロール」はECSがコンテナを起動するためのロールです。ECRからDockerイメージを取得するために使用します。
Amazon ECS タスク実行 IAM ロール

「タスクロール」はDockerコンテナに適用されるロールです。DokerコンテナからS3にアクセスしたい場合とかはタスクロールとしてS3へのアクセス権限を指定します。
タスク用の IAM ロール

エンドポイント通信

案件によっては、VPCエンドポイントを積極的に使う場合があるでしょう。
Fargateを使用する場合はECSのエンドポイントは必要ありません。
AWSのマネージドサービスだからVPCの縛りが無いのでしょうか。
ただ、ECRからイメージ取得する場合はECRのエンドポイントが必要になります。
Amazon ECS インターフェイス VPC エンドポイント (AWS PrivateLink)

コメント

タイトルとURLをコピーしました