Amazon ECS マネージドインスタンスの設計 - Amazon Elastic Container Service

Amazon ECS マネージドインスタンスの設計

Amazon ECS マネージドインスタンスは、Amazon ECS の完全マネージド型のコンピューティングオプションであり、インフラストラクチャ管理を AWS で負荷軽減しながら、コンテナ化されたワークロードをすべての Amazon EC2 インスタンスタイプで実行できます。Amazon ECS マネージドインスタンスでは、AWS が基盤となるインフラストラクチャの割り当て、スケーリング、パッチ適用、メンテナンスを処理している間に、GPU アクセラレーション、特定の CPU アーキテクチャ、高ネットワークパフォーマンス、および特殊なインスタンスタイプなどの特定のコンピューティング機能にアクセスできます。

Amazon ECS マネージドインスタンスを使用する場合、アプリケーションをコンテナにパッケージ化し、コンピューティング要件を指定します。AWS は、ワークロードの要求を満たす最も低コストの汎用 Amazon EC2 インスタンスタイプを自動的に選択します。または、インスタンスタイプ、CPU メーカー、アクセラレーターなどの必要なインスタンス属性を指定できます。Amazon ECS マネージドインスタンスは、スケーリング、パッチ適用、コスト最適化など、インフラストラクチャのあらゆる側面を完全に管理します。AWS 機能や Amazon EC2 統合へのアクセスは完全に保証されます。

Amazon ECS マネージドインスタンスは、プラットフォーム固有の最適化とセキュリティ設定で Linux コンテナに対応しています。デフォルトでは、Amazon ECS マネージドインスタンスは、複数の小さなタスクを大きなインスタンスに配置することでインフラストラクチャの使用率を最適化し、結果として、コストを削減し、タスクの起動時間を改善します。

このトピックでは、Amazon ECS マネージドインスタンスのタスクおよびサービスのさまざまなコンポーネントについて述べ、Amazon ECS で Amazon ECS マネージドインスタンスを使用する際の特別な考慮事項について説明します。

開始方法

Amazon ECS マネージドインスタンスの使用を開始するには、必要な IAM ロールを作成し、AWS アカウントで Amazon ECS マネージドインスタンスを有効にします。その後、キャパシティプロバイダを作成することで、Amazon ECS マネージドインスタンスキャパシティプロバイダを使用してタスクまたはサービスを起動できます。

開始方法についての詳細な説明については、「スタートガイド」の次の項目を参照してください。

キャパシティープロバイダー

Amazon ECS マネージドインスタンスは、キャパシティプロバイダを使用してワークロードのコンピューティングキャパシティを管理します。デフォルトのキャパシティプロバイダを使用するか、特定のインスタンス要件を持つカスタムキャパシティプロバイダを作成できます。

次のキャパシティプロバイダが利用できます。

  • デフォルトのキャパシティプロバイダ – ワークロード要件に最も低コストの汎用インスタンスタイプを自動的に選択します。

  • カスタムキャパシティプロバイダ – vCPU 数、メモリ、CPU メーカー、アクセラレータータイプ、特定のインスタンスタイプなど、属性ベースのインスタンスタイプ選択を使用してインスタンス属性を指定できます。

キャパシティプロバイダ戦略には、次のリストからキャパシティプロバイダタイプを 1 つだけ含めることができます。

  • Amazon ECS マネージドインスタンス

  • Amazon EC2 Auto Scaling グループ

  • Fargate/Fargate_SPOT

インスタンスの選択と最適化

Amazon ECS は、次のいずれかの方法で、Amazon ECS マネージドインスタンスワークロードのインスタンスタイプを選択します。

  • 自動選択 – デフォルトのキャパシティプロバイダを使用する場合、Amazon ECS は、タスク定義で指定された CPU とメモリの要件を満たす、最も低コストの汎用インスタンスタイプを自動的に選択します。

  • 属性ベースの選択 – カスタムキャパシティプロバイダを使用する場合、vCPU 数、メモリサイズ、CPU メーカー、アクセラレータータイプ、特定のインスタンスタイプなどのインスタンス属性を指定できます。Amazon ECS は、指定した属性に一致するすべてのインスタンスタイプから選択します。

Amazon ECS マネージドインスタンスは、インフラストラクチャの使用率とコストを、いくつかのメカニズムを使用して最適化します。

  • マルチタスク配置 – デフォルトでは、Amazon ECS は複数の小さなタスクを大きなインスタンスに配置して、使用率を最大化することによってコストを削減します。

  • アクティブなワークロード統合 – Amazon ECS は、アプリケーションの可用性やデプロイのパフォーマンスに影響を与える可能性のある早期停止を回避しながら、コンテナインスタンスが完全にアイドル状態になるタイミングを特定します。システムは、サービスに設定されたタスクの最小数と最大数、スタートビフォーストップ動作、およびタスク保護動作を尊重します。

  • 適切なサイズ設定 – ワークロード要件が変更されると、Amazon ECS は現時点の要求に合った適切なサイズの代替インスタンスを起動します。

Amazon ECS は Amazon EC2 イベントウィンドウを使用して、都合の良い期間にメンテナンスアクティビティをスケジュールします。イベントウィンドウを使用すると、AWS がインスタンス上でメンテナンスを実施できる定期的な期間を定義できるため、メンテナンスを運用スケジュールに合わせて調整することで、ワークロードの中断を最小限に抑えることができます。詳細については、「Amazon EC2 ユーザーガイド」の「インスタンスの予定されているイベント」を参照してください。

厳重な分離が必要な場合は、Amazon ECS マネージドインスタンスを、VM レベルのセキュリティ分離境界を持つ個別のインスタンスで各タスクを実行するように設定することができます。

タスク定義

Amazon ECS マネージドインスタンスを使用するタスクは、ほとんどの Amazon ECS タスク定義パラメータに対応しています。Amazon ECS マネージドインスタンスは、プラットフォームバージョン 1.4.0 を使用している既存の Fargate タスク定義と互換性があるため、移行が簡単になります。

Amazon ECS マネージドインスタンスを使用するには、requiresCompatibilities タスク定義パラメータに MANAGED_INSTANCES を含めます。タスク定義では、Fargate と Amazon ECS マネージドインスタンス双方の互換性を指定して、デプロイオプションに柔軟性を持たせることができます。

オペレーティングシステムと CPU アーキテクチャ

以下のオペレーティングシステムがサポートされています。

  • Bottlerocket

Amazon ECS タスク定義には、ARM と X86_64 の 2 つのアーキテクチャを使用できます。

Amazon ECS マネージドインスタンスで Linux コンテナを実行する場合、ARM ベースのアプリケーションに X86_64 CPU アーキテクチャ、または ARM64 アーキテクチャを使用できます。

主な特徴

Amazon ECS マネージドインスタンスの主な特徴を以下に挙げます。

  • アプリケーションの要件に合わせて特定の EC2 インスタンスタイプを選択することで、GPU アクセラレーテッドコンピューティング、特定の CPU 機能、大きなメモリサイズなどの特殊なハードウェア機能にアクセスできます。

  • 独自の分離された環境で各タスクを実行する Fargate とは異なり、デフォルトで 1 つのインスタンスで複数のタスクを実行してリソースの使用率とコストを最適化します。

  • 14 日のインスタンス最大存続期間で、セキュリティコンプライアンスと定期的なパッチ適用を確実にします。その後、タスクは自動的に新しいインスタンスに移行されます。

  • CAP_NET_ADMIN、CAP_SYS_ADMIN、CAP_BPF などの特権 Linux 機能を使用して、コンテナ内での高度なネットワーキングとシステム管理機能を有効にします。

IAM ロール

Amazon ECS マネージドインスタンスには 2 つの IAM ロールが必要です。

  • インフラストラクチャロール: このロールにより、AWS はユーザーに代わって Amazon ECS マネージドインスタンスを管理できます。

  • インスタンスプロファイル: インスタンスプロファイルは、IAM ロールを Amazon ECS マネージドインスタンスに渡すために使用します。このプロファイルは、次の目的で使用されます。

    • コンテナワークロードを実行する Amazon ECS マネージドインスタンスの IAM アクセス許可を定義します。

    • AWS がユーザーに代わってこれらのインスタンスを管理できるようにします。

    • プロファイルで定義されたアクセス許可に従って、インスタンスが AWS サービスにアクセスできるようにします。

セキュリティとコンプライアンス

Amazon ECS マネージドインスタンスは、ワークロードを保護するために複数のセキュリティレイヤーを実装しています。

  • 安全な設定 – Amazon ECS マネージドインスタンスは、SSH アクセス禁止、変更不可能なルートファイルシステム、SELinux 経由のカーネルレベルの必須アクセスコントロールなど、AWS セキュリティのベストプラクティスに従います。

  • 自動パッチ適用 – AWS は、設定したメンテナンスウィンドウを尊重して、最新のセキュリティパッチで Amazon ECS マネージドインスタンスを定期的に更新します。

  • インスタンスの存続期間の制限 – 実行中のインスタンスの最大存続期間は 14 日です。これにより、アプリケーションは最新のセキュリティパッチを使用して適切に構成されたインスタンスで実行が確実となります。

  • 特権機能 – ネットワークモニタリングやオブザーバビリティソリューションなど、特権 Linux 機能を必要とするワークロードに対して、それらの機能をオプションで有効にできます。

Amazon ECS マネージドインスタンスは、PCI-DSS、HIPAA、FedRAMP など、Amazon ECS と同じコンプライアンスプログラムに対応しています。サポート対象のリージョンでは、Amazon ECS マネージドインスタンスはアカウントレベルの FIPS エンドポイント設定を尊重して、FedRAMP コンプライアンスを実現します。

ネットワーク

Amazon ECS マネージドインスタンスは、awsvpc および host ネットワークモードに対応しています。awsvpc ネットワークモードは、VPC 内で独自の Elastic Network Interface とプライベート IP アドレスを各タスクに提供します。これにより、タスクレベルでのきめ細かなセキュリティグループとネットワーク ACL 制御が可能になります。host ネットワークモードでは、タスクはホストの Amazon ECS マネージドインスタンスネットワーク名前空間を共有します。Amazon ECS マネージドインスタンスでのタスクネットワーキングの詳細については、「Amazon ECS マネージドインスタンスの Amazon ECS タスクネットワーキング」を参照してください。

インスタンスストレージ

Amazon ECS マネージドインスタンスは、インスタンスに付加されている Amazon EBS データボリュームのサイズ設定に対応しています。このストレージは、インスタンスで実行されるすべてのタスク間で共有され、バインドマウントに使用できます。このボリュームは、タスク定義内で volumesmountPoint、および volumesFrom パラメータを使用しているコンテナ間で共有およびマウントが可能です。

ボリュームはインスタンスの作成時に付加されます。storageConfiguration パラメータを使用して Amazon ECS マネージドインスタンスのキャパシティプロバイダを作成するときに、ボリュームのサイズを GiB 単位で指定できます。

{ ... "managedInstancesProvider": { "infrastructureRoleArn": "arn:aws:iam::123456789012:role/ecsInfrastructureRole", "instanceLaunchTemplate": { "ec2InstanceProfileArn": "arn:aws:iam::123456789012:instance-profile/ecsInstanceProfile", "networkConfiguration": { "subnets": [ "subnet-abcdef01234567", "subnet-bcdefa98765432" ], "securityGroups": [ "sg-0123456789abcdef" ] }, "storageConfiguration": { "storageSizeinGiB" : 100 } } } ... }

このボリュームの最小サイズは 30 GiB、最大サイズは 16,384 GiB です。デフォルトでは、ボリュームのサイズは 80 GiB です。

タスクで、取り込み、圧縮、および非圧縮されたコンテナイメージは、このボリュームに格納されます。タスクがバインドマウントに使用すべきインスタンスストレージの総量を判断するには、タスクに割り当てられているインスタンスのストレージの総量から、コンテナイメージが使用するストレージの容量を差し引く必要があります。

Amazon ECS マネージドインスタンスに付加された Amazon EBS ボリュームのパフォーマンスは、「Amazon EC2 ユーザーガイド」の「Amazon EBS 最適化インスタンス」ドキュメントで説明されているように、対応する Amazon EC2 インスタンスのパフォーマンスと一致します。

ボリュームのスナップショットを作成して、セキュリティ問題の法的分析を実行、もしくはアプリケーションのデバッグができます。Amazon EBS ボリュームのスナップショット作成の詳細については、「Amazon EBS ユーザーガイド」の「Amazon EBS スナップショット」を参照してください。Amazon EBS 暗号化がデフォルトで有効になっている場合、ボリュームはデフォルトで暗号化用に指定された AWS KMS キーで暗号化されます。デフォルトでの EBS 暗号化の詳細については、「Amazon EBS ユーザーガイド」の「Amazon EBS 暗号化をデフォルトで有効にする」を参照してください。

インスタンスに付加されたデータボリュームを使用するだけでなく、Amazon ECS マネージドインスタンス上で実行されるタスクごとにデータボリュームを設定することもできます。タスクレベルストレージの詳細については、「Amazon ECS タスクのストレージオプション」を参照してください。

サービスの負荷分散

Amazon ECS マネージドインスタンスを使用している Amazon ECS サービスでは、ELB を使用して、サービスのタスク間でトラフィックを均等に分散するように設定できます。

Amazon ECS マネージドインスタンス上の Amazon ECS サービスは、Application Load Balancer、Network Load Balancer、および Gateway Load Balancer の各ロードバランサータイプに対応しています。Application Load Balancer は HTTP/HTTPS (レイヤー 7) のトラフィックをルーティングし、Network Load Balancer は TCP または UDP (レイヤー 4) のトラフィックをルーティングします。

また、このようなサービスのターゲットグループを作成する場合は、ターゲットタイプとして instance ではなく、ip を選択する必要があります。これは、awsvpc ネットワークモードを使用するタスクは、直接 Amazon EC2 インスタンスではなく、Elastic Network Interface に関連付けられているためです。

モニタリングとオブザーバビリティ

Amazon ECS マネージドインスタンスは、CloudWatch メトリックおよびオブザーバビリティツールとの統合を通じて包括的なモニタリング機能を提供します。

  • CloudWatch メトリック – タスクレベルとインスタンスレベルの両方で CPU、メモリ、ネットワーク、およびストレージの使用率をモニタリングします。

  • Container Insights – コンテナ化されたアプリケーションの詳細なパフォーマンスメトリックとログを取得します。

  • サードパーティーの統合 – 特権機能を有効にすると、高いレベルの Linux アクセス許可を必要とする高度なモニタリングおよびオブザーバビリティソリューションを実行できます。

料金とコストの最適化

Amazon ECS マネージドインスタンスでは、タスクを実行している Amazon EC2 インスタンス全体に対して課金されます。料金は、ワークロード用に選択されたインスタンスタイプによって異なります。

Amazon ECS マネージドインスタンスでは、いくつかのコスト最適化機能が提供されています。

  • マルチタスクの最適化 – 適切なサイズに設定されたインスタンスで複数のタスクを実行することにより、インスタンスの使用率を最大化します。

Compute and Instance Savings Plans は、Amazon ECS マネージドインスタンスワークロードにも適用されます。

Service Quotas

Amazon ECS マネージドインスタンスワークロードには、Amazon EC2 オンデマンドインスタンス Service Quotas が適用されます。Amazon ECS マネージドインスタンスを使用する Amazon ECS サービスには、Amazon ECS Service Quotas が適用されます。

Service Quotas の詳細については、次の資料を参照してください。

移行に関する考慮事項

Amazon ECS マネージドインスタンスへの移行は、ほとんどのワークロードで簡単に行えます。

  • Fargate から – キャパシティプロバイダの設定変更と再デプロイのみが必要です。プラットフォームバージョン 1.4.0 を使用している既存のタスク定義には完全な互換性があります。

  • EC2 から – Fargate への移行と同様ですが、特定のインスタンスタイプなどの Amazon EC2 機能へのアクセスは保持されます。

移行を計画する際には、次の点を考慮してください。

  • アプリケーションは、14 日間のインスタンスの最大存続期間と計画されたメンテナンスウィンドウを許容する必要があります。

  • 長期間実行されるタスク (14 日以上) は、Amazon ECS マネージドインスタンスには適していません。

  • カスタム AMI はサポートされていません – Amazon ECS マネージドインスタンスは、AWS が管理するセキュリティ最適化 AMI を使用します。

制約事項と考慮事項

Amazon ECS マネージドインスタンスには、次の制限が適用されます。

  • カスタム AMI – AMI は AWS によって所有および管理されます

  • インスタンスの存続期間 – セキュリティパッチ適用とコンプライアンスを確実にするため、インスタンスあたりの最大ランタイムは 14 日です。

  • SSH アクセス – セキュリティ上の理由から使用できません。Amazon ECS Exec を使用してデバッグとトラブルシューティングを行います。管理オペレーションは Amazon ECS API 経由のみで可能です。

  • Service Connect は、Amazon ECS マネージドインスタンスで実行されているサービスには使用できません。