一部のワークロードを Amazon ECS Container Service に移行中ですが、移行を妨げているブロッカーを見つけました。
理想的には、ECS で実行されるコンテナー化されたアプリはステートレスで、任意のクラスター インスタンスで実行してスケールアウトできるようにする必要があります。しかし実際には、EBS データ ボリュームに依存するアプリがいくつかあります。私が知る限り、これらのボリュームは特定のクラスター インスタンスに手動で接続する必要があり、データにアクセスできるようにするには ECS アプリをそのインスタンスに配置する必要があるため、これらのボリュームがどこで実行されるかを制御する方法が必要です。
例として、Amazon ECS によって管理される 3 つの EC2 インスタンスのクラスターがあるとします。
- インスタンス1
- インスタンス 2
- インスタンス3
次に、2 つのコンテナー化されたアプリがあります。
- ステートレスな app1
- EBS ボリュームに依存するapp2
app1 はクラスターの任意のインスタンスで実行できますが、問題ありません。
app2 の場合、EBS ボリュームをインスタンス 2 にアタッチしてマウントするとします。
さて、問題は、app2 を定義または起動するときに、EBS ボリュームにアクセスできるように、app2 を instance2 だけに配置するように制限することはできますか?
よろしくお願いします!
編集:
私はもう少し読んで、Amazonのドキュメントでそれを行う方法を見つけました. ドキュメント「<a href="http://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_data_volumes.html" rel="noreferrer">タスクでのデータ ボリュームの使用」には、次のようなメモがあります。
重要
Amazon ECS は、コンテナ インスタンス間でデータ ボリュームを同期しません。永続的なデータ ボリュームを使用するタスクは、使用可能な容量があるクラスター内の任意のコンテナー インスタンスに配置できます。タスクの停止と再起動後に永続的なデータ ボリュームが必要な場合は、AWS CLI の start-task コマンドを使用して、タスクの起動時に常に同じコンテナ インスタンスを指定する必要があります。
したがって、 CLI でstart-taskコマンドを見ると、まさに私が探していたものであることがわかりました。
開始タスク
指定されたコンテナー インスタンスで、指定されたタスク定義から新しいタスクを開始します。デフォルトの Amazon ECS スケジューラを使用してタスクを配置するには、代わりに run-task を使用します。
これには、起動するタスク定義と、タスクを実行するコンテナー インスタンスID (最大 10)の 2 つの必須パラメーターがあります。
したがって、コマンドの呼び出しは次のようになります。
aws ecs start-task --task-definition “hello-world:1” --container-instances “1c66549d-b41c-4439-dd43-c2e1c9a2cc2a”
私はそれを試してみましたが、完全に機能しました。
AWS Web UI には、タスクの起動時にコンテナ インスタンスを指定するフィールドが用意されていないため、現時点ではこれが唯一の方法のようです。
誰かの役に立てば幸いです。