Amazon ECS コンテナインスタンス - Amazon Elastic Container Service

Amazon ECS コンテナインスタンス

Amazon ECS コンテナインスタンスは、Amazon ECS コンテナエージェントを実行しており、Amazon ECS クラスターに登録されている Amazon EC2 インスタンスです。EC2 起動タイプまたは Auto Scaling グループキャパシティープロバイダーを使用して Amazon ECS でタスクを実行すると、タスクはアクティブなコンテナインスタンスに配置されます。

注記

Fargate 起動タイプを使用するタスクは、AWS が管理するインフラストラクチャ上にデプロイされるため、このトピックは適用されません。

Amazon ECS では、次のコンテナインスタンスタイプがサポートされています。

  • Linux

  • Windows

  • 社外(オンプレミス VM など)

コンテナインスタンスの概念

  • コンテナインスタンスは、 Amazon ECS コンテナエージェントを実行している必要があります。コンテナエージェントは、インスタンスをクラスターの 1 つに登録できます。Amazon ECS に最適化された AMI を使用している場合、エージェントはすでにインストールされています。別のオペレーティングシステムを使用するには、エージェントをインストールします。詳細については、「Amazon ECS コンテナエージェント」を参照してください。

  • Amazon ECS コンテナエージェントは、お客様に代わって Amazon ECS を呼び出すため、起動するコンテナインスタンスには、アカウントに認証されて必要なリソースに対するアクセス許可を付与する IAM ロールが必要です。詳細については、「Amazon ECS コンテナインスタンスの IAM ロール」を参照してください。

  • Linux Amazon ECS に最適化された AMI バージョン 20200430 以降、Amazon EC2 インスタンスメタデータサービスバージョン 2 (IMDSv2) がコンテナインスタンスでサポートされています。Amazon ECS に最適化された AMI のバージョン 20200430 より前では、Amazon EC2 インスタンスメタデータサービスバージョン 1 (IMDSv1) がサポートされています。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「インスタンスメタデータサービスの設定」を参照してください。

  • タスクに関連付けられたコンテナのいずれかに外部接続が必要な場合は、Amazon ECS コンテナインスタンスのポートにネットワークポートをマッピングして、それらのインスタンスがインターネットから到達可能になるようにできます。コンテナインスタンスのセキュリティグループでは、公開するポートへの受信アクセスを許可する必要があります。詳細については、「セキュリティグループの作成Amazon VPC 入門ガイド」を参照してください。

  • コンテナインスタンスを VPC 内で起動することを強くお勧めします。これは、 Amazon VPC がネットワークをより詳細に制御し、より広範な設定機能を提供するためです。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「Amazon EC2 および Amazon 仮想プライベートクラウド」を参照してください。

  • コンテナインスタンスには、Amazon ECS サービスエンドポイントと通信するために外部ネットワークアクセスが必要です。これは、インターフェイス VPC エンドポイントを介して、またはパブリック IP アドレスを持つコンテナインスタンスを通じて可能になります。

    インターフェイス VPC エンドポイントの詳細については、Amazon Elastic Container Service 開発者ガイドの「Amazon ECS とインターフェイス VPC エンドポイント (AWS PrivateLink)を参照してください。

    インターフェイス VPC エンドポイントが設定されておらず、コンテナインスタンスが、パブリック IP アドレスを持たない場合は、ネットワークアドレス変換 (NAT) を使用してこのアクセスを提供する必要があります。詳細については、Amazon VPC ユーザーガイドおよびHTTP プロキシ設定このガイドの「NAT ゲートウェイ」を参照してください。詳細については、「チュートリアル: クラスターのパブリックサブネットとプライベートサブネットを持つ VPC を作成する」を参照してください。

  • コンテナインスタンス用に選択する Amazon EC2 インスタンスのタイプによって、クラスターで使用できるリソースが決まります。Amazon EC2 は、タスクの実行に使用できる CPU、メモリ、ストレージ、ネットワークキャパシティーに関してそれそれ異なるインスタンスタイプを提供します。詳細については、「Amazon EC2 インスタンス」を参照してください。

  • 各コンテナインスタンスそれぞれに固有の状態情報がコンテナインスタンスにローカルで保存され、 Amazon ECS にも保存されているため、以下のような制限があります。

    • あるクラスターからインスタンスを登録解除し、別のクラスターに再登録しないでください。コンテナインスタンスリソースを再配置するには、1 つのクラスターからコンテナインスタンスを終了し、新しいクラスター内の Amazon ECS に最適化された最新の Amazon Linux 2 AMI で、新しいコンテナインスタンスを起動することをお勧めします。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「インスタンスを終了する」および Amazon ECS Linux コンテナインスタンスの起動 を参照してください。

    • コンテナインスタンスを停止してそのインスタンスタイプを変更することはできません。代わりに、コンテナインスタンスを終了し、必要なクラスター内の Amazon ECS に最適化された最新の Amazon Linux 2 AMI で、必要なサイズの新しいコンテナインスタンスを起動することをお勧めします。詳細については、このガイドのLinux インスタンス用 Amazon EC2 ユーザーガイドおよびAmazon ECS Linux コンテナインスタンスの起動の「インスタンスの終了」を参照してください。

コンテナインスタンスのライフサイクル

Amazon ECS コンテナエージェントが Amazon EC2 インスタンスをクラスターに登録すると、Amazon EC2 インスタンスのステータスは、ACTIVE として、エージェントの接続ステータスは、TRUE としてレポートされます。このコンテナインスタンスは RunTask リクエストを受けることができます。

Amazon ECS コンテナインスタンスを停止した (終了はしない) 場合、ステータスは ACTIVE のままになりますが、エージェント接続ステータスは数分以内に FALSE に移行します。コンテナインスタンスで実行されていたタスクはすべて停止します。コンテナインスタンスを再び開始すると、コンテナエージェントは、Amazon ECS サービスと再接続し、インスタンスでタスクを再実行できるようになります。

重要

コンテナインスタンスを停止して開始するか、再起動した場合、Amazon ECS コンテナエージェントの以前の一部のバージョンは、元のコンテナインスタンス ID を登録解除せずに、そのインスタンスを再登録します。この場合、 Amazon ECS では、クラスター内のコンテナインスタンスが実際の数より多く一覧表示されます。(同じ Amazon EC2 インスタンス ID に対してコンテナインスタンス ID が重複している場合は、重複しているコンテナインスタンスのうち、インスタンスのステータスが ACTIVE でエージェントの接続ステータスが FALSE になっているものを安全に登録解除できます。) この問題は、最新のバージョンの Amazon ECS コンテナエージェントで修正されています。最新バージョンへの更新の詳細については、「Amazon ECS コンテナエージェントをアップデートする」を参照してください。

コンテナインスタンスのステータスを DRAINING に変更すると、新しいタスクはそのコンテナインスタンスに配置されません。そのコンテナインスタンスで実行されているサービスタスクは、可能な場合は削除され、システム更新を実行できるようになります。詳細については、「コンテナインスタンスのドレイン」を参照してください。

コンテナインスタンスを登録解除または終了した場合、コンテナインスタンスのステータスは直ちに INACTIVE に変わり、コンテナインスタンスを一覧表示しても、そのコンテナインスタンスはレポートされなくなります。ただし、終了後 1 時間は、コンテナインスタンスの内容を表示できます。1 時間後、インスタンスの内容は表示できなくなります。

キャパシティープロバイダーに接続した AutoScaling グループを使用し、Amazon EC2 インスタンスが Auto Scaling グループによって終了された場合、キャパシティープロバイダーは関連付けられたコンテナインスタンスを DRAINING ステータスに移行します。その後、ドレイニングの完了を待ち、Auto Scaling グループによる Amazon EC2 インスタンスの終了を許可します。次に、上記段落が適用されます。

重要

Amazon ECS キャパシティープロバイダーに接続されていない Auto Scaling グループは、コンテナインスタンスをドレインさせません。インスタンスを手動でドレインさせるか、Auto Scaling グループのライフサイクルフックを構築して、インスタンスの状態を DRAINING にさせます。Auto Scaling ライフサイクルフックの詳細については、「Amazon EC2 Auto Scaling ライフサイクルフック」を参照してください。

アカウントのインスタンス IAM ロールを確認する

Amazon ECS コンテナエージェントで、Amazon ECS API への呼び出しを実行します。エージェントを実行するコンテナインスタンスには、エージェントがユーザーに属していることをサービスに伝えるIAM ポリシーとロールが必要です。

ほとんどの場合、コンソールの初回実行時には、Amazon ECS インスタンスのロールが自動的に作成されます。以下の手順を使用して、アカウントにすでに Amazon ECS サービスロールがあるかどうかを確認できます。

IAM コンソールで ecsInstanceRole を確認するには

  1. AWS Management Console にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで [Roles] (ロール) を選択します。

  3. ロールのリストで ecsInstanceRole を検索します。ロールが存在する場合は、ロールを作成する必要はありません。ロールが存在しない場合は、「Amazon ECS コンテナインスタンスの IAM ロール」の手順に従ってロールを作成します。