エンタープライズクラウド部技術2課の日高です。ECSのクラスター、タスク定義、サービスのパラメータ一覧についてまとめてみます。コンテナ型のアプリケーションを実行するためのマネージド型コンテナオーケストレーションサービスです。コンテナは単体で動作させるケースは少なく、通常のワークロードでは複数のコンテナが連携して動作します。その際、コンテナの起動・停止、アクセス制御、信頼性やスケーラビリティの担保等を一元的に管理するのがコンテナオーケストレーションツールの役割です。コンテナオーケストレーションとはコンテナを管理するというものであり、コンテナを動かす実行環境のサービスではないことをご注意ください。ECSの全体像になります。主要なコンポーネントを、以降で記載していきます。上でアプリケーションを起動するためにはコンテナが必要となります。「タスク」と呼んでいます。タスクは1つ以上のコンテナから構成されるアプリケーションの実行単位となり、タスク内のコンテナは同一ホスト上で実行されます。出力先等を指定します。タスク定義に含めるコンテナ定義は複数設定可能です。サービス(Service)指定した数だけタスクを維持するスケジューラで、サービス作成時は起動するタスクの数や関連付けるロードバランサー、ネットワーク等を指定できます。タスクが何らかの理由で終了した場合は、タスク定義をベースに新しいタスクを生成して指定したタスク数を維持します。クラスタークラスターは、サービスもしくはタスクの論理グループです。クラスター単位が、実行環境やIAM権限(クラスタに対する操作)の境界となります。クラスターのパラメータインフラストラクチャコンテナの実行環境を設定します。Fargateのみが選択されています。複数選択が可能になります。コンテナ用のクラスタを構築し、コンテナを実行するためのマネージド型のコンピューティングリソースです。よって実行されるため、ユーザはホストレベルの運用を意識する必要がなくなります。実行されているホストにssh等の手段でログインし、ログ確認を行うといった作業はできません。内から取得する実装を、設計時に検討する必要があります。EC2と比べると料金が高額になります。利用できるか検討してみてください。Fargateの料金について、詳しくは以下をご覧ください。AMI(コンテナインスタンスの要件/推奨事項にしたがって事前構成されたAMI)を使って構築するのがおすすめになります。DockerデーモンやECSコンテナエージェントがあらかじめインストール済みなので起動後すぐ利用が開始できるためです。グループの設定をする必要があります。起動タイプのキャパシティープロバイダーとして機能します。利用してコンテナを実行することができる機能です。AgentがDockerを操作します。AgentがECSと手を組んで、タスクやコンテナの動きをコントロールしています。Agentを導入する必要があります。Insights)有効にすることで、CloudWatchによりカスタムメトリクスが収集できるようになります。割合などは確認できます。タスク単位でメトリクスを確認した場合や、標準のCloudWatchメトリクスで取得できないメトリクスを確認したい場合に有効をおすすめします。ECSでのタスクやサービスの実行環境が決まります。サービスやタスク作成時に、タスク定義で指定している起動タイプが指定されないと、エラーが出ます。インスタンス」も選択可能です。タスクを実行する際に、コンテナがどのようにネットワークに接続されるかを定義するモードのことです。起動タイプでFargateを選択した場合、ネットワークモードはawsvpcが選択されます。bridge(default)Dockerのhostモード。ECSインスタンス(EC2)の任意のポートをコンテナのポートにマッピングする。同じECSインスタンス上の複数のタスクが同じENIとSecurityGroupを共用。役割が異なる複数のタスクが1つのECSインスタンス内に存在する場合、必要な全てのポートを解放する必要がある。通信帯域はタスク間で共有。ALBとの組み合わせでは、動的ポートの利用が一般的。詳細情報の参考ソースとして挙げられる。hostDockerのhostモード。コンテナでexposeされたポートが、ECSインスタンス(EC2)でもそのまま利用される。同じホスト上で同じポートを利用する複数のタスクの同時起動は不可能。awsvpcタスクごとにENIが直接アタッチされるモード。タスク間のポートマッピングの考慮が不要。ENIが独立しているため、ネットワークパフォーマンスの向上が期待される。ENIごとにSecurityGroupを割り当て可能。ECSインスタンス本体とタスク間でのSecurityGroup分離も可能。FlowLogを利用しての観測が可能。ALBやNLBにIPターゲットとして登録が可能。ECSインスタンス(EC2)のENI上限。大きなインスタンスタイプで、固定数のタスクを起動させる場面での利用が適している。なしコンテナの外部接続がなくなるモード。ポートマッピングは設定不可。可能な用途としては、ECSインスタンス(EC2)とディスクマウントし、コンテナ内での計算に利用することなどが考えられる。タスクサイズタスクサイズで、タスクのCPUとメモリの量を設定できます。CPUはvCPU数、メモリはGBで指定します。Fargateの場合指定が必須になります。各vCPUの設定に応じて、以下のようにメモリを選べます。1.4.0以降で利用できます。※詳しくは以下をご覧ください。EC2の場合はオプションになります。利用可能なCPUユニットが使用できるEC2インスタンスがクラスター内にないと、タスクは失敗します。条件付きのタスクロールタスクロールとタスク実行ロールがあります。違いは下記の通りです。呼び出すために必要なIAMロールです。タスク実行ロール:ECRからDockerイメージをプルしたり、CloudWatchへのログを転送するなどECSなどに必要な権限を付与するIAMロールです。※詳しくは以下をご覧ください。外部のプライベートレジストリに存在するコンテナイメージを参照する必要がある場合、有効にします。認証情報を保存されている必要があります。※詳しくは以下をご覧ください。docs.aws.amazon.com読み取り専用ルートファイルシステムWindosOS以外でコンテナを起動する際に指定する設定です。(デフォルトは無効)ルートファイルシステムに対する読み取りが必要な場合は有効にします。リソース割り当て制限コンテナのリソース割り当てを制御するための設定オプションになります。コンテナに予約するCPUユニットの数。EC2インスタンス上のGPUユニットの数。1つのGPUは1つのGPUユニットとしてカウントされます。(GB):コンテナに提供する最大メモリ量。この制限を超えるとコンテナは停止する。(GB):システムメモリが不足するときのコンテナのメモリ制限。タスク全体でメモリ指定がない場合、ハード制限またはソフト制限、あるいは両方を指定する必要がありますが、ハード制限はソフト制限より大きくなければならない。※Windowsコンテナではこの制限はサポートされていません。上記にも記載がある通り、制限を超えるとコンテナが停止してしまうため、リソース制限をどうしてもやりたい場合を除いては設定しないことをお勧めします。ECSコンテナエージェントのログ収集します。(デフォルトでは無効です。Logsにログがルーティングされますが、ログのルーティング先として以下の指定が可能です。リージョンとログストリーム名を指定します。リージョンとデータストリーム名を指定します。Service:インデックスとタイプを指定します。バケット名を指定します。※詳しくは以下をご覧ください。repost.awsHealthCheckコンテナが正常に動作しているかどうかを確認する機能になります。コマンドヘルスチェックを実行するためのコマンドを指定します。いずれかのプレフィックスとともに文字列配列として提供されます。例として、以下のコマンドはローカルホストのページの可用性を確認します。1正常な動作の場合、終了コードは0を返し、それ以外の場合は失敗とみなされます。間隔ヘルスチェックを実行する間隔を指定します。設定可能な範囲は5秒から300秒で、デフォルトの設定は30秒です。タイムアウトヘルスチェックが反応するまでの最大の待ち時間を定義します。この値は2秒から60秒の間で指定可能で、デフォルトは5秒です。開始期間この期間は、コンテナが正常にブートストラップされるまでの猶予期間として考えることができます。設定範囲は0秒から300秒までで、デフォルトではこのオプションはオフに設定されています。再試行ヘルスチェックが連続して失敗した場合の再試行回数を定義します。コンテナが異常と見なされる前に、1回から10回までの再試行が可能です。デフォルトの設定は3回の再試行です。コンテナタイムアウトコンテナの待機時間を設定するオプション設定になります。設定値としてStartTimeoutと、StopTimeoutが存在します。StartTimeout:コンテナの依存関係の解決を断念するまでの待機時間。StopTimeout:コンテナが自動的に正常に終了しない場合に、コンテナーが強制的に強制終了されるまで待機する時間。内の値の一部を上書きすることができます。実行されるコンテナの起動点を設定します。命令を上書きできます。コンテナで実行するコマンドを設定します。命令を変更することができます。コンテナ内でコマンドを実行する際のディレクトリを指定します。命令を上書きできます。Dockerの操作やコンテナの作成時に、既定のDockerfileの指示をカスタマイズする際に利用すると考えています。リソース制限オプション設定で、設定することでOSのデフォルトのリソース上限の設定を上書きすることができます。オプションとしてマッピングされます。※詳しくは以下をご覧くださいdocs.aws.amazon.comDockerラベルオプション設定で、設定することでコンテナに追加するラベルのキー/値を指定できます。こちらで設定した内容は、。run--labelのオプションとしてマッピングされます。※詳しくは以下をご覧くださいdocs.aws.amazon.comストレージエフェメラルストレージオプション設定です。EC2でホストされるタスクでは使用できません。GiBまでこの設定で指定することができます。エフェメラルストレージに保存されるデータとしては、コンテナイメージ等が保存されます。そのため全体のストレージ量を考慮する際には、コンテナイメージのサイズがエフェメラルストレージの利用可能な空き容量に影響を及ぼすため注意が必要です。このことから全体のストレージ量を考える際には、使用するコンテナイメージのサイズを差し引くことを忘れないようにご注意ください。ボリュームオプション設定です。ボリュームは、コンテナ間でデータを共有するためのストレージ領域を指定します。ストレージ領域としてサポートされているのは下記があります。ボリュームは、コンテナ間でデータを共有するためのストレージ領域です。EC2やECSで使用できる主なボリュームタイプを以下に示します。ECSのコンテナにEFSのストレージをボリュームとしてマウントする。特徴として、使用量により自動的にサイズが変わる。ホストはFargate、EC2のいずれでも可。AWSのフルマネージドWindowsファイルサーバサービスを利用。Windowsタスクでの静的や共有ファイルストレージに適しているが、FargateのWindowsコンテナでは使用不可。ホストはEC2、Fargateのいずれでも可。EC2のホストで直接管理されるストレージ。EC2がホストの場合のみ使用可。ホスト上の特定のファイルやディレクトリをコンテナに直接マウントする方法。ホストはFargate、EC2のいずれでも可。通常、各コンテナのデータはコンテナ内に保存されますが、コンテナが破棄された場合保存したデータも消えてしまいます。そのため、データを永続的に保存したい場合や、コンテナ同士でデータを共有したい場合にボリュームの設定をしていただけるといいと考えています。組み込まれている必要があるためご注意ください。※詳細については以下をご覧ください。X-Rayに情報を収集して送信することができます。X-Rayに送信します。※詳しくは以下をご覧ください。Prometheusに送信することができます。この設定を行う際、適切なアクセス許可を持つIAMロールをタスクに割り当てる必要があります。CloudWatchにカスタムメトリクスとして送られます。デフォルトで5つのディメンションが設定されていますが、不要なものは新しいタスク定義のリビジョンで削除できます。Prometheusに送られます。デフォルトで全てのディメンションが利用できます。メトリクスを送るための特定のエンドポイントの情報を提供する必要があります。Prometheusに送信されますが、エンドポイントの指定方法が異なります。Insightsはインフラの情報を収集するのに対して、トレースの収集やメトリクスの収集はアプリケーションの情報を収集するという違いがあります。サービスのパラメータコンピューティングオプションどうやってタスクを実行するかを指定できる設定です。キャパシティープロバイダー戦略と、起動タイプから選択できます。キャパシティープロバイダー戦略キャパシティープロバイダーを使用することで、クラスター内のタスク量に応じた適切なスケーリングを管理してくれる機能になります。各クラスターには複数のキャパシティプロバイダーが関連付けられており、これらをどのように使用するかをこの設定で決定します。Anywhere)では利用できません。※詳しくは以下をご覧ください。docs.aws.amazon.com起動タイプタスクがどこで動くかを手動で指定します。下記の中から選択できます。サーバーレスインフラストラクチャでタスクを実行します。インスタンスでタスクを実行します。※詳しくは以下をご覧ください。docs.aws.amazon.comサービスタイプサービススケジューラが従うサービスタイプを指定します。指定されたスケジュール戦略に基づき、タスクが適切に実行されているか確認し、問題があれば再スケジュールします。タスクが失敗すると、自動的に新しいタスクを起動して置き換えます。具体的な例としては、下記になります。•コンテナやロードバランサーのヘルスチェックに基づき、タスクの状態を監視し、異常と判断されたタスクを置き換えます。•タスクの状態やスケジューリングに関するパラメータ(maximumPercent、desiredCountなど)に従って、タスクの管理や再スケジュールが行われます。利用可能なスケジューリング戦略は下記から選択できます。REPLICAタスクをクラスタ全体に配置し、必要な数を維持します。タスク配置戦略や制約を使ってカスタマイズが可能。タスクは、対応していません。)クラスタ内のアクティブなコンテナインスタンスごとに1つのタスクをデプロイします。タスク数や配置戦略の指定は不要。※詳しくは以下をご覧ください。Connectとサービス検出は、共にECSサービスの名前解決を提供する機能になります。b.service)のみで名前解決できる。サービスの名前解決ができない。プライベートホストゾーン」に依存しない名前解決方式となるため。サービスの名前解決をすることができる。プライベートホストゾーン」に依存した名前解決方式となるため。中にあるリソースから、名前解決ができる。※詳しくは弊社ブログをご覧ください。アラームに応じてサービス内のタスク数を指定範囲内で調整してくれる機能になります。デフォルトでは無効です。EC2の場合に指定する設定になります。タスク配置オプションは、タスクをクラスター内のインスタンスにどのように配置するかを指定します。AZバランススプレッド/AZバランスビンバック/ビンバック/ホストごとに1つのタスク/カスタム/ランダムから選択できます。(デフォルトでは、AZバランススプレッドが指定されています。)大まかに下記の3種類に大別できます。binpack:コンテナを効率的に配置して、EC2インスタンスの数を最小限にする方法。コンテナが必要とするCPUやメモリに合わせて配置します。random:利用可能なインスタンスの中から適当に選んで、コンテナを増やしたり減らしたりします。spread:コンテナを平等にわけ、各インスタンスやエリアに均等に配置します。※詳しくは以下をご覧ください。docs.aws.amazon.comECSのログ設定の補足(2023.12.13追記)ECSの勉強をしていると取得できるログがたくさんあり、混乱するというお声をいただきました。下記に大枠の概要を書かせていただきます。Insights:クラスターやタスク単位でメトリクスを収集する。ログメッセージなど)タスク定義で設定するトレース収集:アプリケーションやシステムの動作を詳細に追跡するプロセス。(関数呼び出し、リクエストの流れ、サービス間のインタラクションなど)タスク定義で設定するメトリクス収集:システムやアプリケーションのパフォーマンスを測定するための定量的なデータ。ECSはパラメータが多く、よくパラメータの意味を忘れてしまうのでブログにまとめてみました。本記事が誰かの助けになれば幸いです。EngineersEC部クラウドコンサルティング課所属。2022年IT未経験でSWXへ新卒入社。2009-引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。