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 です。
{
"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 ネットワークモードの使用するには、このドキュメントを参照してください。
翻訳はソリューションアーキテクト加治が担当しました。原文はこちらです。