ECSと呼ばれるAWS上でDockerコンテナを実行するサービスです。
Dockerコンテナを管理するECR(Elastic Container Registry)とセットで使用されます。
ECSはECRのDockerイメージと実行環境を紐づける役割をします。
実行環境はAutoScalingで起動されたEC2を使用するケースとAWSが管理しているFargateを使用するケースの2パターンがあります。
実際に動作させる場合はFargateの方が良いですが、動作を理解するという観点ではEC2を使用したほうが良いと思います。
ECSの構成
ECS自体は「クラスター」と呼ばれます。
実際に実行するコンテナの設定は「タスク定義」で行います。
構成としてはAutoScalingに近いものがあります。
AutoScalingグループが「クラスター」となり、起動テンプレートが「タスク定義」になります。
コンテナとタスク定義を紐づける設定が「サービス」になります。
実行環境
Dockerイメージをコンテナとして実行する環境としてはEC2とFargateの2種類が選択できます。
実行環境は「ECSコンテナインスタンス」とも呼ばれます。
EC2を選択する場合はECS用に最適化されたAMIイメージを使用します。
通常のAMIイメージに手動でエージェント等をインストールしても良いですが、メリットが見つかりません。
FargateはAWSのマネージドサービス環境になりますのでOSを意識することはありません。
よほどのことが無い限り、Fargateを選択したほうが良いです。
タスク定義
起動させるコンテナの定義を行います。
作成したタスク定義は「変更できない」のでリビジョン(バージョン番号)を変更することにより更新を行います。
その場合、実行されているタスクは自動的に更新されません。
タスク定義で良く使用されるのが「environment」「secret」の設定になります。
Dockerコンテナに環境変数を渡したり、「Secrets Manager」「Systems Manager」から値を参照するために使用します。
タスクのロール
コンテナからS3などのサービスへアクセスする場合、IAMロールはECSコンテナインスタンスに適用するのではなく、タスクに適用します。
タスクロールがDokerコンテナ上のアプリに割り当てられるIAMロールになります。
アプリからS3にファイルを保存する場合はタスクロールとしてS3のアクセス権を持ったIAMロールを指定します。
タスク実行ロールはEC2コンテナエージェント用なのでECSコンテナインスタンス用のIAMロールになります。
ネットワークモード
コンテナに適用できるネットワークモードになります。
基本的には「bridgeモード」「awsvpcモード」の2種類を使用する形になります。
bridgeモードは仮想インターフェースを使用して外部と通信を行います。VMware環境に近い形になります。
awsvpcモードはタスクごとに実際にインターフェースが追加されます。EC2の場合はインスタンスタイプごとに上限数があるので注意が必要です。また、EC2の場合はインターフェースにPrivateIPのみ提供されるのでインターネット通信を行う場合はNatGateway等が必要になります。
コンテナ実行
タスクから実行するか、サービスから起動するかにより動作が変わります。
バッチ処理ならタスク、Webサーバー等であればサービスからの起動が基本となります。
コメント