AWS

Lambda と Fargate 徹底比較 – 制限・料金・パフォーマンスとベストプラクティス

ⓘ本ページはプロモーションが含まれています

お得なお知らせ

スポンサードリンク
1ヶ月で資格+現場入り

インフラエンジニアへの最短ルート

未経験でもAWS・Linux・ネットワーク資格を最短で取り、現場入りまでサポート。SREやクラウドエンジニアの入口。

CODE×CODEスピード転職|無料面談▶ SRE/クラウドのフリーランス案件▶

▶ AWS/GCP/Kubernetesの独学には Kindle Unlimited の技術書読み放題がコスパ最強。


スポンサードリンク

1. 基本概念と実行単位の違い

1.1 Lambda の特徴

  • デプロイ単位:関数(ハンドラー)。コードは ZIP またはコンテナイメージで登録。
  • 実行環境:AWS が自動的にランタイムを用意し、インフラ管理は不要。
  • 対象ランタイム:Node.js, Python, Java, Go, .NET, Ruby など公式サポート言語(Lambda ランタイム一覧)。

1.2 Fargate の特徴

  • デプロイ単位:ECS/EKS タスクとして実行される Docker コンテナ。
  • インフラ抽象化:サーバーやクラスターの管理は不要だが、タスク定義で CPU・メモリ・ポートなどを明示的に指定する必要あり。
  • 対応環境:Linux ベースの任意コンテナ(言語・ミドルウェアは制限なし)。

1.3 実装フロー比較

項目 AWS Lambda AWS Fargate
デプロイ手順 aws lambda create-function --package-type Image(ECR イメージ)
または ZIP ファイルを S3 経由でアップロード
Dockerfile 作成 → docker builddocker push(ECR)→ ECS タスク定義作成
設定例 メモリ 128‑10,240 MB、タイムアウト最大 15 分 CPU 0.25‑4 vCPU、メモリ 0.5‑30 GB
CI/CD の主なツール CodePipeline + Lambda Deploy Action、GitHub Actions の aws lambda update-function-code CodePipeline + ECS Deploy Action、Copilot CLI、GitHub Actions の ecs-deploy

ポイント
- シンプルさ が求められるイベント駆動アーキテクチャは Lambda が適しています。
- 柔軟性・既存 Docker ワークフロー活用 が必要な場合は Fargate が有利です。


2. 実行時間上限と長時間ジョブへの対応

2.1 タイムアウト制限

サービス 最大実行時間
AWS Lambda 15 分(900 秒)※Lambda のタイムアウト設定
AWS Fargate 実質無制限(タスクが停止されない限り実行可能)

注記:2025 年 7 月の内部ノートに「Fargate タスクは上限なし」と記載がありますが、公式ドキュメントでも同様の説明が掲載されています(ECS タスク実行時間)。

2.2 実運用シナリオ

シナリオ 推奨サービス 理由
リアルタイム API(数百 ms 応答) Lambda 瞬時にスケールアウトし、Cold Start を最小化できる(プロビジョンドコンカレント利用)。
バッチ ETL(2 h 以上) Fargate タスクが長時間実行可能で、Spot インスタンスと組み合わせたコスト削減も容易。
ストリーム処理(Kinesis → Lambda) Lambda イベント駆動に最適化されており、再試行ロジックが自動。

3. 料金モデル比較と実践的なコストシミュレーション

3.1 料金体系の概要

項目 Lambda(us-east-1) Fargate(us-east-1)
無料枠 月 100 万リクエスト + 400,000 GB‑秒 対象なし
リクエスト単価 $0.20 / 1M リクエスト -
計算リソース単価 $0.0000166667 per GB‑秒 vCPU $0.04048 / 時間、メモリ $0.004445 / GB‑時間
Spot 割引率(参考) なし 最大 70% (Fargate Spot の料金ページ

※リージョンごとの価格差 は公式価格表で確認してください。

3.2 シナリオ別概算コスト(30 日間、1 GB メモリ・300 秒実行、100 req/s)

項目 計算式 Lambda (USD) Fargate (オンデマンド, USD)
総リクエスト数 100 × 86,400 s × 30 = 259.2M $51.84(超過分) -
GB‑秒合計 1 GB × 300 s × 259.2M ÷ 1,000 = 77,760,000 GB‑秒 $1,296.00 -
合計 (Lambda) $1,347.84(無料枠除く) -
vCPU 時間 0.25 vCPU × (300/3,600)h × 259.2M ≈ 5,400 vCPU‑h - $218.59
メモリ時間 1 GB × (300/3,600)h × 259.2M ≈ 21,600 GB‑h - $95.99
合計 (Fargate, オンデマンド) - $314.58
Spot 割引(30%) 上記×0.3 - $220

ポイント
- 短時間・高頻度のリクエストは Lambda が割安になる傾向があります。
- CPU とメモリを一定量長時間確保するバッチ処理は Fargate の方がコスト効率的です(特に Spot 利用時)。


4. パフォーマンス特性:Cold Start とスケーラビリティ

4.1 Cold Start の実測値(2024‑10 時点)

言語 プロビジョンドコンカレントなし プロビジョンドコンカレント有効
Node.js 14/16 ≈ 800 ms ≈ 150 ms
Python 3.9/3.10 ≈ 600 ms ≈ 120 ms
Java 11 (OpenJDK) ≈ 2,200 ms ≈ 300 ms

出典: AWS Compute Blog 「Measuring Lambda Cold Start Times」および公式ドキュメント「Provisioned Concurrency」。

4.2 Fargate のタスク起動遅延

条件 起動に要する時間
初回イメージプル(キャッシュなし) ≈ 35 秒
再利用可能なタスクプールから取得 ≈ 10 秒

備考:タスク起動遅延はコンテナサイズ・ネットワーク環境に依存します。

4.3 スケーリング速度比較

項目 Lambda Fargate
同時実行上限(デフォルト) 1,000 並列リクエスト/リージョン(増加申請可) タスク数は Service の最大設定に依存、実質無制限
バースト能力 瞬時に 3 倍のスパイクを処理可能(同時実行上限まで自動拡張) Auto Scaling ポリシーで秒単位の増減が可能だが、タスク起動遅延分だけレイテンシが発生

結論
- リアルタイム API では Cold Start が数百ミリ秒以内に抑えられる Lambda が有利。
- 長時間実行かつスループット安定性が重要 なバックエンドは、起動遅延を許容できる Fargate の方が予測しやすい。


5. 運用・セキュリティ・移行ベストプラクティス

5.1 監視とロギング

項目 Lambda Fargate
標準メトリクス Invocations, Errors, Duration, Throttles(CloudWatch) CPUUtilization, MemoryUtilization(ECS Service メトリクス)
ログ集約 CloudWatch Logs(自動生成) FireLens → CloudWatch Logs / Amazon OpenSearch Service
分散トレース AWS X‑Ray SDK(自動インストゥルメント) OpenTelemetry エージェントをサイドカーとしてデプロイ

5.2 IAM の最小権限設計

  • LambdaAWSLambdaBasicExecutionRole に加えて、必要なサービス(例: S3, DynamoDB)へのアクセス権だけを個別に付与。
  • Fargateecs:RunTask, logs:CreateLogStream, ecr:GetAuthorizationToken など、タスク実行に必須なアクションのみ許可。

5.3 CI/CD パイプラインのポイント

フェーズ Lambda 用 Fargate 用
ビルド ZIP 作成または Docker イメージビルド → ECR プッシュ Dockerfile ビルド → ECR プッシュ
デプロイ aws lambda update-function-code または CloudFormation の AWS::Lambda::Function ECS タスク定義更新 → Service ロールアウト(aws ecs update-service --force-new-deployment
テスト SAM CLI (sam local invoke) でローカル実行検証 LocalStack か、ECS Exec でコンテナ内部にシェル接続して動作確認

5.4 移行シナリオ

5.4.1 Lambda → Fargate

  1. コードのコンテナ化:Dockerfile を作成しローカルで docker run テスト。
  2. イメージプッシュ:ECR にプッシュし、タスク定義に image パラメータを設定。
  3. サービス構築:ECS Service(ALB/NLB 経由)を作成し、必要なら Auto Scaling ポリシーを追加。
  4. エンドポイント切替:API Gateway の統合先を Lambda から ALB に変更し、段階的にトラフィックを移行。

5.4.2 Fargate → Lambda(軽量化が可能なケース)

  1. ロジック抽出:コンテナ内のビジネスロジックだけを関数ハンドラーとして切り出す。
  2. デプロイパッケージ作成:必要最小限の依存ライブラリだけを含む ZIP か、軽量コンテナイメージに変換。
  3. Lambda デプロイ:CodePipeline の Lambda Deploy Action を使用し、関数設定(メモリ・タイムアウト)を調整。
  4. トラフィック移行:API Gateway の統合先を再度 Lambda に戻すか、Stage 別に分割して A/B テスト実施。

ベストプラクティス
- 移行前に必ず ステージング環境で負荷テスト(k6, Artillery 等)を実施し、レイテンシ・コストの差異を定量化。
- IAM ロールは 段階的に権限削減 し、CloudTrail でアクセスログを監査。


6. まとめ(要点)

項目 Lambda Fargate
実行単位 関数 コンテナタスク
最大実行時間 15 分 無制限
料金モデル リクエスト + GB‑秒 vCPU 時間 + メモリ時間(Spot で最大 70% 削減)
Cold Start 言語別数百〜数千 ms(プロビジョンドコンカレントで大幅短縮) タスク起動に約 30–45 秒
スケーラビリティ 瞬時のバーストが可能、同時実行上限はデフォルト 1,000 Auto Scaling による秒単位増減、タスク起動遅延あり
運用ツール CloudWatch Metrics / X‑Ray ECS メトリクス / FireLens + OpenTelemetry
移行のハードル コードサイズ・ランタイム制限が主 タスク定義とコンテナイメージ管理が必要

次のアクション
1. 自社ユースケース(リアルタイム vs バッチ)を明確化。
2. 小規模 PoC を実施し、実測コスト・レイテンシ を取得。
3. 結果に基づき、本番環境での Lambda と Fargate の組み合わせ(例:フロントは Lambda、バックエンドは Fargate)を設計。

この比較とベストプラクティスを活用し、最適なサーバーレス実行基盤を選定してください。

スポンサードリンク

お得なお知らせ

スポンサードリンク
1ヶ月で資格+現場入り

インフラエンジニアへの最短ルート

未経験でもAWS・Linux・ネットワーク資格を最短で取り、現場入りまでサポート。SREやクラウドエンジニアの入口。

CODE×CODEスピード転職|無料面談▶ SRE/クラウドのフリーランス案件▶

▶ AWS/GCP/Kubernetesの独学には Kindle Unlimited の技術書読み放題がコスパ最強。


-AWS