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 マネージドインスタンス

  • 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 つのインスタンスで複数のタスクを実行してリソースの使用率とコストを最適化します。

  • セキュリティコンプライアンスを確保し、インスタンスパッチ適用を定期的に実行します。ECS マネージドインスタンスは、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 マネージドインスタンスを定期的に更新します。

  • インスタンス存続期間の制限 – 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 サービスは、Elastic Load Balancing を使用してサービス内のタスク全体にトラフィックを均等に分散するよう設定できます。

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 マネージドインスタンスワークロードにも適用されます。

サービスクォータ

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 経由のみで可能です。

組織コントロール

組織コントロールには、Amazon ECS マネージドインスタンスの正しい動作を妨げる可能性があるものもあります。その場合は、これらのコントロールを更新して、Amazon ECS がユーザーに代わって EC2 インスタンスを管理するために必要な許可を得られるようにする必要があります。

Amazon ECS は、Amazon ECS マネージドインスタンスを支える EC2 インスタンスの起動にインフラストラクチャロールを使用します。このインフラストラクチャロールは、Amazon ECS がユーザーに代わって Amazon ECS マネージドインスタンスを管理できるようにする IAM ロールであり、アカウント内に作成されます。サービスロールで実行されるアクションには、サービスコントロールポリシー (SCP) が常に適用されます。このため、SCP は Amazon ECS マネージドインスタンスの運用を阻止できます。最も一般的なケースは、SCP を使用して起動できる Amazon マシンイメージ (AMI) を制限する場合です。Amazon ECS マネージドインスタンスを機能させるには、Amazon ECS マネージドインスタンス AMI アカウントからの AMI の起動を許可するように SCP を変更します。

EC2 が許可された AMI 機能を使用し、他のアカウントで AMI の可視性を制限することもできます。この機能を使用する場合は、イメージ基準の範囲を拡大して、対象リージョン内の Amazon ECS マネージドインスタンス AMI アカウントも範囲に含まれるようにする必要があります。

Amazon ECS マネージドインスタンス AMI 以外のすべての AMI をブロックする SCP の例

以下の SCP は、AMI が us-west-2 または us-east-1 の Amazon ECS マネージドインスタンス AMI アカウントに属している場合を除き、ec2:RunInstances の呼び出しを阻止します。

注記

ec2:Owner コンテキストキーを使用しないことが重要です。Amazon は Amazon ECS マネージドインスタンス AMI アカウントを所有しており、このキーの値は常に amazon になります。ec2:Owneramazon の場合に AMI の起動を許可する SCP を構築すると、Amazon ECS マネージドインスタンス用の AMI だけでなく、Amazon が所有する任意の AMI も起動できます。

{ "Version":"2012-10-17", "Statement": [ { "Sid": "DenyAMI", "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "arn:*:ec2:*::image/ami-*", "Condition": { "StringNotEquals": { "aws:ResourceAccount": [ "187296253231", "260073348889" ] } } } ] }

Amazon ECS マネージドインスタンス AMI アカウント

リージョンによって異なる AWS アカウントが Amazon ECS マネージドインスタンスのパブリック AMI をホストします。

AWS リージョン アカウント
af-south-1 070957084703
ap-east-1 587573215167
ap-northeast-1 679336465495
ap-northeast-2 309903600357
ap-northeast-3 384570461223
ap-south-1 062344138989
ap-south-2 624198668379
ap-southeast-1 832199679391
ap-southeast-2 552073033681
ap-southeast-3 368903466070
ap-southeast-4 696793786439
ap-southeast-5 003457290689
ap-southeast-6 465836752572
ap-southeast-7 622515864387
ca-central-1 853167153192
ca-west-1 899469777611
eu-central-1 832570432258
eu-central-2 041659148495
eu-north-1 851563870067
eu-south-1 766433696616
eu-south-2 003380494496
eu-west-1 986619735082
eu-west-2 591706807364
eu-west-3 108582616801
il-central-1 009537862704
me-central-1 540883425316
me-south-1 181438624895
mx-central-1 210749644920
sa-east-1 591338347621
us-east-1 260073348889
us-east-2 292185169523
us-west-1 187296253231
us-west-2 491085424538