Amazon ECS 用のアプリケーションの構築
アプリケーションのタスク定義を作成して、アプリケーションを構築します。タスク定義には、次のようなアプリケーションに関する情報を定義するパラメータが含まれます。
-
使用する起動タイプ、これによりタスクをホストするインフラストラクチャを決定します。
EC2 起動タイプを使用する場合、インスタンスタイプも選択します。GPU などの一部のインスタンスタイプでは、さらに追加のパラメータを設定する必要があります。詳細については、「Amazon ECS タスク定義のユースケース」を参照してください。
-
コンテナイメージには、アプリケーションコードと、アプリケーションコードの実行に必要なすべての依存関係が保持されます。
-
タスクのコンテナで使用するネットワーキングモード
ネットワークモードにより、タスクがネットワーク上で通信する方法が決定します。
EC2 インスタンスで実行されるタスクについては、複数のオプションがありますが、その中でも
awsvpc
ネットワークモードの使用をお勧めします。awsvpc
ネットワークモードを使用すると、コンテナネットワークが簡素化されます。また、アプリケーション間およびそのアプリケーションと VPC 内の他のサービスとの相互通信をより強力にコントロールできます。Fargate で実行されるタスクについては、
awsvpc
ネットワークモードのみが使用可能です。 -
タスクで使用するログ記録設定。
-
タスク内のコンテナで使用するデータボリューム。
タスク定義パラメータの完全なリストについては、「Amazon ECS タスク定義パラメータ」を参照してください。
タスク定義を作成する際には、次のガイドラインに従ってください。
-
各タスク定義ファミリーは 1 つのビジネス目的にのみ使用してください。
複数の種類のアプリケーションコンテナを同じタスク定義にグループ化する場合、それらのコンテナを個別にスケールすることはできません。例えば、ウェブサイトと API の両方が同じレートでスケールアウトする必要がある可能性はほとんどありません。トラフィックが増加すると、API コンテナとは異なる数のウェブコンテナが必要になります。これらの 2 つのコンテナが同じタスク定義にデプロイされる場合、各タスクは同じ数のウェブコンテナと API コンテナを実行します。
-
各アプリケーションのバージョンを、タスク定義ファミリー内のタスク定義リビジョンと一致させます。
タスク定義ファミリー内では、各タスク定義リビジョンを、特定のコンテナイメージの設定のポイントインタイムスナップショットとみなします。これは、コンテナがアプリケーションコードの特定のバージョンを実行するために必要なすべてもののスナップショットであるのと似ています。
アプリケーションコードのバージョン、コンテナイメージタグ、およびタスク定義リビジョンの間に 1 対 1 のマッピングがあることを確認してください。一般的なリリースプロセスには、git commit SHA でタグ付けされたコンテナイメージに変換される git commit が含まれます。その後、そのコンテナイメージタグは、独自の Amazon ECS タスク定義リビジョンを取得します。最後に、Amazon ECS サービスが更新され、新しいタスク定義リビジョンをデプロイするように指示されます。
-
タスク定義ファミリーごとに異なる IAM ロールを使用します。
各タスク定義を独自の IAM ロールで定義します。この推奨事項は、各ビジネスコンポーネントに独自のタスク定義ファミリーを提供するという推奨事項と合わせて実行される必要があります。これらのベストプラクティスを両方実装することで、各サービスが AWS アカウント内のリソースにどの程度アクセスできるかを制限できます。例えば、パスワードデータベースに接続するためのアクセス権を認証サービスに付与できます。同時に、注文サービスのみがクレジットカードの支払情報にアクセスできるようにすることもできます。