Amazon Web Services ブログ
Amazon ECS での Windows コンテナによるタスクネットワーキング
この記事は Getting started with task networking on Amazon ECS with Windows containers を翻訳したものです。
本日、AWS は Amazon Elastic Container Service (Amazon ECS) で稼働する Windows ワークロード向けに、awsvpc ネットワークモードのサポートを開始しました。この機能は各タスクを独自の Elastic Network Interface (ENI) に関連付けることで、Amazon ECS 上で動作する Windows タスクに EC2 と同じネットワーク機能をもたらします。
この記事では Amazon ECS で実行する Windows コンテナで、 awsvpc ネットワークモードを使用するための手順を説明します。
背景:
これまで、Amazon ECS 上の Windows タスクはデフォルトのネットワークモードのみサポートしていました。デフォルトネットのワークモードとは、Docker のデフォルトネットワークに依存してコンテナのネットワークスタックを設定するものです。デフォルトのネットワークモードでは、すべてのコンテナは Windows の nat ネットワークを使って互いに接続され、nat ネットワークの内部プレフィックス IP レンジから IP アドレスが割り当てられます。
デフォルトのネットワークモードを使用する場合、タスク内のコンテナはインスタンスの外のエンドポイントと nat ネットワークを使用して通信するため、インスタンスにアタッチされた Elastic Network Interface (ENI) を共有することになります。これは EC2 インスタンス上で動作するすべてのコンテナが、インスタンスにアタッチされた ENI のネットワークポリシーを共有することを意味します。したがって、インスタンスにアタッチされた ENI のセキュリティグループと ACL ポリシーは、すべてのタスクの要件を満たしている必要があります。これはお客様にとって、タスクのセキュリティポリシーのコントロールが制限されることになります。デフォルトのネットワークモードを使用しているタスクのコンテナは、インスタンスにアタッチされた ENI の IP アドレスと、コンテナポートがマッピングされたホストポートを使用して、VPC 内でアドレス指定が可能です。このため、お客様が管理を必要とするポートとの競合が発生し、アプリケーションに追加の設定が必要になる場合があります。
awsvpc ネットワークモードでは、タスクは独自のネットワーク名前空間で実行され、独自の Elastic Network Interface に関連付けられます。Amazon ECS は、タスクの ENI のプロビジョニング、アタッチメント、クリーンアップまでの完全なライフサイクルを制御します。awsvpc ネットワークモードを使用する主な利点は次のとおりです。
- カスタムセキュリティグループを各タスクに関連付けることで、アプリケーションに対するきめ細かいアクセスコントロールが可能になります。
- 各タスクが独自の IP アドレスとコンテナポートでアドレス指定され、ホストポートのマッピングを必要とせず、アプリケーションアーキテクチャがシンプルになります。。タスクのコンテナは localhost インターフェースを介して相互に通信します。
- タスクが共有のネットワークインターフェースの帯域幅を争うことがないため、ネットワークパフォーマンスが向上します。
- EC2 のネットワーク監視ツールや、タスクレベルでの Elastic Load Balancing の利用が可能になります。
Windows タスクで awsvpc ネットワークモードがサポートする機能:
awsvpc ネットワークモードで実行される Amazon ECS タスクは、デフォルトのネットワークモードで実行されるタスクでサポートされているすべての機能をサポートします。awsvpc ネットワークモードでサポートされる機能は次のとおりです。
- タスクを「ターゲットタイプ: IP」としてアタッチすることで、Application Load Balancer と Network Load Balancer を利用できる機能
- VPC フローログなど、他の EC2 のネットーワーク監視機能をタスクレベルで利用できる機能
- ブートストラップスクリプトを使用せずに、タスクの IAM ロールを自動設定が出来る機能
- gMSA を利用できる機能が従来どおり利用可能
- Amazon FSx for Windows File Server のボリュームを利用できる機能が従来どおり利用可能
開始方法:
それでは awsvpc ネットワークモードを使用して、基本的な Windows タスクを実行してみましょう!
このチュートリアルでは既存の ECS クラスターを使用するか、クラスターの作成ウィザードを使用して新しいクラスターを作成します。既存のクラスターを使用する場合は、クラスターで実行されている EC2 インスタンスが最新の Windows AMI を使用していることを確認します。
タスク定義の登録:
awsvpc ネットワークモードを使用するためには、タスク定義の networkMode
パラメータに awsvpc を指定します。
以下はタスク定義のサンプル JSON です。
ECS サービスでタスクを使用する場合はコンテナポートも指定します。上記のタスク定義では、コンテナポートに 80 を指定しています。
AWS マネジメントコンソールの ECS セクションでタスク定義を登録するときに、ネットワークモードとして awsvpc を指定します。
このタスク定義は awsvpc ネットワークモードを使用し、ポート 80 で実行されている 1 つの Microsoft IIS サーバーのコンテナで構成されます。
AWS CLI を使用したタスク定義の作成
タスクの実行:
タスクを実行するには、当該タスクを実行するクラスターに移動します。「新しいタスクの実行」を選択します。以下の適切な構成を選択します。これには、先ほど作成したタスク定義の選択、およびタスクを実行するサブネットのセットの指定が含まれます。タスクに適切なセキュリティグループを選択または作成します。「タスクの実行」設定で指定したサブネットに、最新の Windows AMI が登録された EC2 インスタンスが少なくとも 1 つ必要です。
次に、「タスクの実行」オプションを選択してタスクを起動します。
タスクはすぐに起動して実行されるはずです。タスクに関連付けられている Elastic Network Interface を確認できます。詳細は次のようになります。
Windows IIS サーバーは、タスクの IP アドレス (10.0.0.11) を使用して VPC 内で到達可能です。タスクとの間で送受信されるトラフィックは、「タスクの実行」設定で指定されたセキュリティグループによって制御されます。EC2 インスタンスとタスクに対して異なるセキュリティグループを持つことができます。
AWS CLI を使用したタスクの実行
AWS CLI を使用したタスクの情報確認
まとめ:
この記事では awsvpc ネットワークモードを使用して Windows タスクを実行する例を紹介しました。タスクが専用の ENI を持つ独自のネットワーク名前空間で実行されていることを確認しました。タスク内のコンテナは、タスクにアタッチされた ENI の IP アドレスとコンテナポートを使用してアドレス指定することができます。
Windows タスク用の awsvpc ネットワークモードの使用するには、このドキュメントを参照してください。
翻訳はソリューションアーキテクト加治が担当しました。原文はこちらです。