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 ネットワークモードを使用する主な利点は次のとおりです。

  1. カスタムセキュリティグループを各タスクに関連付けることで、アプリケーションに対するきめ細かいアクセスコントロールが可能になります。
  2. 各タスクが独自の IP アドレスとコンテナポートでアドレス指定され、ホストポートのマッピングを必要とせず、アプリケーションアーキテクチャがシンプルになります。。タスクのコンテナは localhost インターフェースを介して相互に通信します。
  3. タスクが共有のネットワークインターフェースの帯域幅を争うことがないため、ネットワークパフォーマンスが向上します。
  4. EC2 のネットワーク監視ツールや、タスクレベルでの Elastic Load Balancing の利用が可能になります。

Windows タスクで awsvpc ネットワークモードがサポートする機能:

awsvpc ネットワークモードで実行される Amazon ECS タスクは、デフォルトのネットワークモードで実行されるタスクでサポートされているすべての機能をサポートします。awsvpc ネットワークモードでサポートされる機能は次のとおりです。

  1. タスクを「ターゲットタイプ: IP」としてアタッチすることで、Application Load Balancer と Network Load Balancer を利用できる機能
  2. VPC フローログなど、他の EC2 のネットーワーク監視機能をタスクレベルで利用できる機能
  3. ブートストラップスクリプトを使用せずに、タスクの IAM ロールを自動設定が出来る機能
  4. gMSA を利用できる機能が従来どおり利用可能
  5. Amazon FSx for Windows File Server のボリュームを利用できる機能が従来どおり利用可能

開始方法:

それでは awsvpc ネットワークモードを使用して、基本的な Windows タスクを実行してみましょう!

このチュートリアルでは既存の ECS クラスターを使用するか、クラスターの作成ウィザードを使用して新しいクラスターを作成します。既存のクラスターを使用する場合は、クラスターで実行されている EC2 インスタンスが最新の Windows AMI を使用していることを確認します。

タスク定義の登録:

awsvpc ネットワークモードを使用するためには、タスク定義の networkMode パラメータに awsvpc を指定します。

以下はタスク定義のサンプル JSON です。

{
    "family": "windows-simple-iis",
    "containerDefinitions": [
    {
        "name": "windows_sample_app",
        "image": "mcr.microsoft.com/windows/servercore/iis",
        "cpu": 1024,
        "entryPoint":["powershell", "-Command"],
        "command":["New-Item -Path C:\\inetpub\\wwwroot\\index.html -Type file -Value '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p>'; C:\\ServiceMonitor.exe w3svc"],
        "portMappings": [
        {
            "protocol": "tcp",
            "containerPort": 80
        }
        ],
        "memory": 1024,
        "essential": true
    }
    ],
    "networkMode": "awsvpc",
    "memory": "1024",
    "cpu": "1024"
}

ECS サービスでタスクを使用する場合はコンテナポートも指定します。上記のタスク定義では、コンテナポートに 80 を指定しています。

AWS マネジメントコンソールの ECS セクションでタスク定義を登録するときに、ネットワークモードとして awsvpc を指定します。

このタスク定義は awsvpc ネットワークモードを使用し、ポート 80 で実行されている 1 つの Microsoft IIS サーバーのコンテナで構成されます。

AWS CLI を使用したタスク定義の作成

aws ecs register-task-definition --cli-input-json file://path_to_json_file

タスクの実行:

タスクを実行するには、当該タスクを実行するクラスターに移動します。「新しいタスクの実行」を選択します。以下の適切な構成を選択します。これには、先ほど作成したタスク定義の選択、およびタスクを実行するサブネットのセットの指定が含まれます。タスクに適切なセキュリティグループを選択または作成します。「タスクの実行」設定で指定したサブネットに、最新の Windows AMI が登録された EC2 インスタンスが少なくとも 1 つ必要です。

次に、「タスクの実行」オプションを選択してタスクを起動します。

タスクはすぐに起動して実行されるはずです。タスクに関連付けられている Elastic Network Interface を確認できます。詳細は次のようになります。

Windows IIS サーバーは、タスクの IP アドレス (10.0.0.11) を使用して VPC 内で到達可能です。タスクとの間で送受信されるトラフィックは、「タスクの実行」設定で指定されたセキュリティグループによって制御されます。EC2 インスタンスとタスクに対して異なるセキュリティグループを持つことができます。

AWS CLI を使用したタスクの実行

aws ecs run-task --cluster windows --task-definition windows-simple-iis:1 --count 1

AWS CLI を使用したタスクの情報確認

aws ecs describe-tasks --cluster windows --task task_ID

まとめ:

この記事では awsvpc ネットワークモードを使用して Windows タスクを実行する例を紹介しました。タスクが専用の ENI を持つ独自のネットワーク名前空間で実行されていることを確認しました。タスク内のコンテナは、タスクにアタッチされた ENI の IP アドレスとコンテナポートを使用してアドレス指定することができます。

Windows タスク用の awsvpc ネットワークモードの使用するには、このドキュメントを参照してください。

翻訳はソリューションアーキテクト加治が担当しました。原文はこちらです。