Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

ECSホストあたりのタスク数を増やす

By Paul O'BrienAug 29, 20243 min read

このページはEnglishDeutschEspañolFrançaisItalianoPortuguêsでもご覧いただけます。

ECSホスト1台あたり数個を超えるタスクを動かそうとして、うまくいかずにお困りではありませんか?本記事では、実行可能なECSタスク数を一気に引き上げるシンプルな解決策をご紹介します。

背景

EC2上のECSはデフォルト設定のままだと、各ノードで実行できるタスク数に制限があります。具体的な上限はインスタンスタイプによって異なります。これは、各タスクにElastic Network Interface (ENI) を割り当てる必要があるため、インスタンスごとのタスク数が制約を受けるためです。

そこで活躍するのがENIトランキング

ENIトランキング(awsvpcTrunkingアカウント設定)を使うと、ホストあたりに実行できるタスク数を大幅に増やせます。仕組みとしては、プライマリENIをホスト通信用に使い、トランキング用に追加のENIを割り当てます。追加されるENIはブランチインターフェースとして、そのインスタンスタイプの上限までアタッチされます。

よく使われるr5.xlargeを例に見てみましょう。デフォルトでは3タスクまでですが、ENIトランキングを有効化すると20タスクまで実行できるようになります(インスタンスタイプ別の最大タスク数の一覧表)。

既存クラスターでトランキングを有効化する

ECSクラスターを新規作成する際にトランキングを有効化するのは簡単ですが、すでに運用中のクラスターで有効化したい場合はどうすればよいでしょうか。

まずは、以下のコマンドでトランキングが有効になっているかを確認します。CloudShellや、適切に設定されたCLIから実行してください。

aws ecs list-attributes --target-type container-instance --attribute-name ecs.awsvpc-trunk-id --cluster <Cluster Name> --region <Region>

空の属性リストが返ってきた場合、そのクラスターではトランキングが有効になっていません。

トランキング利用時の留意点

有効化する前に、制限事項をまとめたAWS公式ドキュメントに目を通しておくことをおすすめします。

ENIトランキングでよく問題になるポイントは次のとおりです。

  1. ネットワークモードはawsvpcのみ対応。
  2. 起動タイプはEC2であること(Fargateは各タスクに専用ENIが標準で割り当てられるため、本機能は不要)。
  3. 共有ネットワークは非対応。
  4. Windowsコンテナは非対応。
  5. サービスリンクロールが存在すること(ECSクラスター作成時にデフォルトで作成されます)。
  6. リソースベースのIPv4(Aレコード)DNSリクエストが有効化されていないこと(EC2インスタンス作成時のデフォルト)。

実際に有効化してみる

AWS Web Consoleから既存クラスターでトランキングを有効化すると、画面上は「有効」と表示されるものの、aws ecs list-attributesコマンドを実行すると空の属性配列が返ってくることがあります。これは、実際には有効化されていない状態を示しています。

AWSコンソール上はトランキングが有効と表示されているが、実際には反映されていない可能性がある画面

このような場合は、以下のコマンドを実行することで、アカウント内のすべてのクラスターに対してトランキングを有効化できます。

aws ecs put-account-setting-default --name awsvpcTrunking --value enabled --region <Region>

この方法であれば、対象アカウントのリージョンごとに一度デフォルトを設定するだけで済みます。このコマンドがトランキングのデフォルトアカウント設定を書き換えるためです。

新規に起動するECSインスタンスは自動的にこの設定変更を反映します。すでにデプロイ済みのインスタンスについては、再起動することで反映できます。Auto Scalingグループを利用している場合は、インスタンス数を一時的に増やしてノードを入れ替えれば、サービスを止めずに変更を適用できます。

トランキングが正しく動作しているかは、ホストあたりのタスク数を確認するか、aws ecs list-attributesコマンドを再実行することで検証できます。今度は空の属性配列ではなく、トランキングが有効になったインターフェースのリストが返ってくるはずです。

DoiTをまだご存じない方は、ぜひ一度チェックしてみてください。私たちは、お客様のクラウドエンジニアリングに関する課題に真摯に向き合うチームです。シニアクラスのエンジニアのみで構成され、高度なクラウドコンサルティング、アーキテクチャ設計、デバッグアドバイスを専門としています。お気軽にお問い合わせください。