0Pricing
AWS Solutions Architect · レッスン

EC2起動タイプとFargateの比較

EC2コンテナインスタンスを自分で管理する方法と、サーバーレスでコンテナを実行できるFargateを比較し、コスト面でのトレードオフを理解します。

「EC2起動タイプとFargateの比較」はCoddyKit上の無料AWS Solutions Architectレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAWS Solutions Architect学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AWS Solutions Architectコースには全4レッスンが含まれています。

ECSタスクを実行する2つの方法

ECSには、コンテナをどこで実行するかを定義する2つの起動タイプがあります。EC2起動タイプでは、クラスター内にプロビジョニングして管理するEC2インスタンス上でコンテナを実行します。Fargate起動タイプは、基盤となるサーバーをAWSが全面的に管理するサーバーレスのコンピューティングエンジンです。両者のタスク定義とサービス設定はほぼ同じで、主な違いはインフラストラクチャの管理責任とコストモデルにあります。

EC2起動タイプ: 完全な制御

EC2起動タイプでは、ECS Container Agent(ECS最適化AMIにプリインストールされています)を使用して、EC2インスタンスをクラスター内のコンテナインスタンスとして登録します。インスタンスタイプの選択、OSレベルの設定の管理、カスタムセキュリティベースラインの適用、コスト削減のためのSpot Instancesの利用が可能です。ECSは、ビンパッキングまたは分散配置戦略に基づいて、登録済みインスタンスにタスクを配置します。基盤となるEC2フリートのパッチ適用、スケーリング、保守はお客様の責任です。

# Launch an ECS-optimised EC2 instance that joins the cluster
# User data for ECS container agent
#!/bin/bash
echo ECS_CLUSTER=MyAppCluster >> /etc/ecs/ecs.config
echo ECS_ENABLE_CONTAINER_METADATA=true >> /etc/ecs/ecs.config

Fargate:サーバーレスコンテナ

Fargateでは、タスクごとにCPUとメモリを指定すると、AWSが基盤となるコンピューティングリソースを透過的にプロビジョニングします。登録、パッチ適用、スケーリングが必要なEC2インスタンスはなく、すべてAWSが管理します。タスクにはそれぞれ分離されたカーネル(Firecracker microVMによる)が割り当てられるため、複数のタスクが同じホストを共有するEC2コンテナインスタンスよりも、強固なセキュリティ分離が実現します。Fargateではawsvpcネットワークモードが必須です。つまり、各タスクに専用のENIとVPC IPアドレスが割り当てられます。

aws ecs run-task \
  --cluster 'MyAppCluster' \
  --task-definition 'myapp-task:5' \
  --launch-type FARGATE \
  --network-configuration '{
    "awsvpcConfiguration": {
      "subnets": ["subnet-aaa111"],
      "securityGroups": ["sg-xyz"],
      "assignPublicIp": "ENABLED"
    }
  }'

料金モデルの比較

料金モデルは根本的に異なります。EC2起動タイプでは、タスクが実行されているかどうかにかかわらず、基盤となるEC2インスタンスに対して料金を支払います。ただし、割引のためにリザーブドインスタンスやSavings Plansを利用でき、中断可能なワークロードではSpot Instancesにより最大90%のコストを削減できます。Fargateでは、タスクごとに消費したvCPUとメモリについて、1秒単位で実際に使用した分だけ支払います。タスク間のアイドルコストはありません。負荷が急増するワークロードやバッチワークロードではFargateのほうが安くなることが多く、継続的に高い使用率で稼働するワークロードでは、リザーブドインスタンスを利用したEC2のほうが安くなる場合があります。

コスト削減のためのFargate Spot

Fargate Spotは、AWSがキャパシティを回収する必要が生じた際に中断される可能性がある代わりに、大幅に割引された料金(最大70%オフ)でFargateのコンピューティングリソースを提供します。Fargate Spotは、バッチ処理、CI/CDパイプライン、開発環境やステージング環境に適しています。キャパシティプロバイダー戦略を設定して、Fargate(オンデマンド)とFargate Spotを組み合わせられます。Fargateにbase=1を設定して少なくとも1つの保証されたタスクを確保し、weightの値で残りのキャパシティを両方に分配します。

aws ecs create-service \
  --cluster 'MyAppCluster' \
  --service-name 'BatchService' \
  --task-definition 'batch-task:1' \
  --desired-count 10 \
  --capacity-provider-strategy \
    'capacityProvider=FARGATE,weight=1,base=1' \
    'capacityProvider=FARGATE_SPOT,weight=4'

EC2起動タイプを選択する場合

次の要件がある場合はEC2起動タイプを選択します。GPUインスタンス(FargateのGPUサポートには制限があります)、Fargateでは利用できない特定のインスタンスタイプ、カスタムOS設定(カーネルチューニングやカスタムドライバー)、プレイスメントグループや拡張ネットワーキングを必要とするネットワーク性能、Windowsコンテナ(EC2はWindows Serverコンテナをサポートしますが、FargateのWindowsサポートには制限があります)、または継続的に高い使用率で実行し、EC2のリザーブドインスタンスによってFargateの1秒単位の課金よりも大幅なコストメリットが得られる場合です。

Fargateを選択する場合

次の目的がある場合はFargateを選択します。EC2管理のオーバーヘッドをなくす(OSのパッチ適用やクラスターのスケーリングが不要)、1秒単位で使用した分だけ支払う、アイドル状態のEC2キャパシティを確保するほどではない負荷変動の大きいワークロードやバッチワークロードを実行する、Firecracker microVMによってより強固なタスク分離を実現する、またはアプリケーションコードに集中して開発を加速する、といった目的です。SAA-C03試験では、特別なEC2要件が示されていない限り、新しいECSワークロードにはFargateが推奨されます。

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

キャパシティプロバイダーは、コンピューティング層をECSサービスから抽象化します。EC2の場合、キャパシティプロバイダーはAuto Scaling Groupに関連付けられます。キャパシティ不足によってタスクを配置できない場合、ECSがASGを自動的にスケールします。Fargateでは、FARGATEとFARGATE_SPOTが組み込みのキャパシティプロバイダーとして用意されています。サービスにキャパシティプロバイダー戦略を定義すると、オンデマンドとSpot/Fargate Spotを組み合わせ、ワークロードごとのコストと可用性のトレードオフを細かく制御できます。

運用オーバーヘッドの比較

起動タイプによって運用オーバーヘッドは大きく異なります。EC2起動タイプでは、AMIの選択と更新、EC2 Auto Scalingの設定、SSMまたはカスタムスクリプトによるOSのパッチ適用、コンテナインスタンスのキャパシティ管理、インスタンスレベルのセキュリティ強化が必要です。Fargateでは、これらがすべて不要になります。Fargateプラットフォームへのパッチ適用はAWSが行い、管理するインスタンスもクラスターのキャパシティ計画も必要ありません。ただしFargateは、OSレベルのカスタマイズやネットワーク性能のチューニングに関する柔軟性が低くなります。

FargateのタスクCPUとメモリのサイズ設定

Fargateのタスク定義では、固定された組み合わせからCPUとメモリを指定する必要があります。CPUの値は256、512、1024、2048、4096、8192、16384です(vCPU単位で、1024 = 1 vCPU)。メモリはCPUの値ごとに定められた範囲内で指定する必要があります。たとえば、CPUが256の場合、メモリは512~2048 MBに設定できます。タスク内のコンテナは、タスクに設定されたCPUとメモリの上限を共有します。適切なサイズ設定が重要です。Fargateでは指定した量に対して正確に課金されるため、ワークロードがCPUバウンドの場合、実際の性能向上がないまま過剰プロビジョニングによってコストが無駄になります。

# Valid Fargate combinations
# 256 CPU (.25 vCPU): 512, 1024, or 2048 MB
# 512 CPU (.5 vCPU): 1024 to 4096 MB
# 1024 CPU (1 vCPU): 2048 to 8192 MB
# 2048 CPU (2 vCPU): 4096 to 16384 MB
# 4096 CPU (4 vCPU): 8192 to 30720 MB

デバッグのためのECS Exec

ECS Execを使用すると、SSHや踏み台ホストを使わずに、実行中のコンテナ(EC2とFargateの両方)で直接インタラクティブなシェルセッションを開けます。内部ではAWS Systems Manager Session Managerを使用します。サービスで有効化し、execute-command CLIを使ってbashセッションを開始します。コンテナ上の本番環境の問題をデバッグする際に非常に役立ちます。タスクロールにはssmmessages:CreateControlChannelおよび関連するSSM権限が必要です。

aws ecs execute-command \
  --cluster 'MyAppCluster' \
  --task 'abc123def456' \
  --container 'myapp' \
  --interactive \
  --command '/bin/bash'

クイックチェック

このレッスンで扱ったAWS Solutions Architect(SAA-C03)の概念について、理解度を確認します。

レッスンのまとめ

このレッスンでは、次のことを学びました。EC2起動タイプは、基盤となるインスタンス群を管理する代わりに、インスタンスタイプとOS設定を完全に制御できます。GPU、特殊なハードウェア、または継続的に高い使用率のワークロードに適しています。Fargateは、1秒単位のタスク課金とFirecrackerによる強力な分離を提供しながら、インフラストラクチャ管理を不要にします。多くのWeb/APIワークロードやバッチジョブに適しています。Fargate Spotは、中断を許容できるワークロードのコストを最大70%削減します。次は、コンテナイメージを保存および取得するためのAmazon ECRについて学びます。

よくある質問

「EC2起動タイプとFargateの比較」レッスンは無料ですか?

はい。「EC2起動タイプとFargateの比較」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AWS Solutions Architectコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AWS Solutions Architectコースには全4レッスンが含まれています。

「EC2起動タイプとFargateの比較」で何を学びますか?

EC2コンテナインスタンスを自分で管理する方法と、サーバーレスでコンテナを実行できるFargateを比較し、コスト面でのトレードオフを理解します。 ブラウザで直接実行するハンズオンコードでAWS Solutions Architectを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

AWS Solutions Architectを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのAWS Solutions Architectは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「EC2起動タイプとFargateの比較」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このAWS Solutions Architectレッスンでコードを書いて実行できますか?

はい。すべてのAWS Solutions Architectレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ECS クラスター、タスク定義、サービス
  2. EC2起動タイプとFargateの比較
  3. ECR:コンテナイメージの保存と取得
  4. ECSサービスのオートスケーリングとロードバランシング
← AWS Solutions Architectに戻る