7

一部のワークロードを 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 には、タスクの起動時にコンテナ インスタンスを指定するフィールドが用意されていないため、現時点ではこれが唯一の方法のようです。

誰かの役に立てば幸いです。

4

2 に答える 2

4

Amazon は最近、多くのインスタンス、つまりあらゆるコンテナ間でデータを同期するように設計されたElastic File System (EFS)という新しいサービスを開始しました。

EFS の導入は、コンテナーのワークロードに EBS を簡単に使用できないことを認めるものです。

ECS で EFS を使用するための入門書とチュートリアルを次に示します。

EFS は NFS 上に構築されています。NFS プロトコルと EFS の実装には、ネットワーク IO とデータ スループットに関していくつかの課題があるため、ワークロードには適していない可能性があります。

于 2016-09-21T16:55:39.217 に答える