Amazon ECSでWindowsコンテナを使用するときの注意点
ECSでWindowsコンテナを使用してECSタスクスケジューリングをする場合(バッチ処理)、EC2インスタンスもWindowsである必要があります。Dockerイメージも同じWindowsである必要があります。
Linuxと勝手がかなり違い、手間取ったのでメモです。
ホストOSとコンテナOSのカーネルは共有される
カーネルが共有されるため、異なるカーネルでタスク実行すると失敗します。
a Windows version 10.0.17763-based image is incompatible with a 10.0.14393 host
ここで結構つまづいたのですが以下で動作すること確認しました。
AMI ID | Docker Image |
---|---|
ami-03b184a4646875b51 | mcr.microsoft.com/windows/servercore:ltsc2016 |
ami-01c65e7a6c38f2fb2 | mcr.microsoft.com/windows/servercore:ltsc2019 |
タスク定義に制限が多い
公式ドキュメントを見ればわかる通りですが、Linuxに比べタスク定義のパラメータに制限多すぎます。
Windowsでディレクトリ共有をするために、ホスト側とコンテナ側で同じドライブである必要があったりするようです。
コンテナ側 | ホスト側 |
---|---|
c:\tmp | c:\tmp |
この件で実際試したところ、全く同じディレクトリ構成をマウントすればディレクトリ共有することは出来ました。
CannotStartContainerError: Error response from daemon: container xxx encountered an error during hcsshim::System::Start: context deadline exceeded
CPUユニット数を空白設定してしまうと0扱いになる為、コンテナスタートできない旨のエラーが出ます。
Exe実行時のエントリポイント
エントリポイント:powershell,-Command
コマンド:フルパスでExeを指定
これで実行OKです。
参考サイト
Amazon Elastic Container Service
Windows を実行している EC2 インスタンスでの Amazon ECS タスク定義の違い - Amazon Elastic Container Service
EC2 Windows インスタンスで実行されるタスクは、使用可能なすべての Amazon ECS タスク定義パラメータをサポートしているわけではありません。サポートされていないパラメータもあり、また一部のパラメータでは動作が異なることがあ...

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント