サーバーレスとコンテナ|開発会社が顧客に提案するときの比較フレーム
目次 クリックで開く
クラウドネイティブなシステム開発において、避けて通れないのが「サーバーレス(FaaS)」と「コンテナ(CaaS/K8s)」の選択です。顧客から「コストを抑えたい」「メンテナンスフリーにしたい」という要望を受ける際、単に技術的な好みで選定するのではなく、ビジネス要件に合致した明確な判断基準(フレームワーク)を提示することが求められます。
本記事では、AWS、Google Cloud、Microsoft Azureの実名サービスを挙げながら、実務担当者が顧客提案時に活用できる「比較判断フレームワーク」を詳説します。インフラの選定は、その後の開発スピードや保守コストを決定づける極めて重要な意思決定です。
サーバーレスとコンテナの定義と現代的解釈
まず、提案の前提となる両者の特性を、現代のクラウドエコシステムに基づいて整理します。
FaaS(サーバーレス関数)が提供する「運用の抽象化」
AWS LambdaやGoogle Cloud Functionsに代表されるFaaS(Function as a Service)は、コードを実行するための「サーバー」という概念を完全に抽象化します。開発者はビジネスロジックの記述に集中でき、OSのパッチ適用やスケーリングの設定から解放されます。最大の特徴は、「イベント駆動」と「従量課金」の徹底です。リクエストがない時間はコストがゼロになり、急激なトラフィック増にはクラウド側が自動でインスタンスを増殖させて対応します。
CaaS(コンテナ)が提供する「環境の標準化」
Dockerに代表されるコンテナ技術は、アプリケーションを実行環境ごとパッケージ化します。「開発環境では動いたが本番環境では動かない」という問題を解消し、OSのカーネルを共有しながら軽量に動作します。FaaSと比較すると自由度が高く、特定の言語制限やライブラリの制約、実行時間の制限(15分ルールなど)を受けません。ただし、オーケストレーション(配置や管理)の設計は自前で行う必要があります。
サーバーレスコンテナ(Fargate等)という中間解
近年、両者の「いいとこ取り」をしたサービスが主流となっています。AWS FargateやGoogle Cloud Runがこれにあたります。コンテナイメージをデプロイするだけで、背後のEC2インスタンス等の管理をクラウド側に任せられる仕組みです。実務上の提案では、この「サーバーレスコンテナ」を軸に据えることが、最も汎用性の高いアプローチとなります。
開発会社が活用すべき比較判断フレームワーク
顧客への提案時に、以下の4つの基準でスコアリングを行うと、選定理由が論理的に明確になります。
【基準1】ワークロードの特性(イベント駆動 vs 常駐リクエスト)
「いつ、どのくらいの頻度で動くか」が最大の分岐点です。
- サーバーレス向き: 特定の時刻に実行されるバッチ処理、S3へのファイルアップロードをトリガーとした画像処理、散発的なAPIリクエスト。
- コンテナ向き: 常に一定以上のトラフィックがあるWebサイト、長時間実行されるデータ解析、WebSocketなど常時接続が必要なアプリケーション。
【基準2】開発・運用リソースの成熟度
自社または顧客の運用チームのスキルセットを考慮します。Kubernetes(EKS/GKE)は非常に強力ですが、専任のSRE(Site Reliability Engineer)がいない組織が導入すると、インフラの複雑性に飲み込まれ、開発スピードが劇的に低下します。
運用リソースが限られている場合は、徹底的に「マネージド」に寄せた提案が必要です。例えば、社内業務のDXであれば、インフラ管理を極限まで排除した構成が好まれます。
関連記事:Excelと紙の限界を突破する「Google Workspace × AppSheet」業務DX完全ガイド
【基準3】スケーラビリティの要求速度(ミリ秒 vs 分単位)
トラフィックのスパイク(急増)への反応速度を比較します。
- FaaS: ミリ秒単位で数百、数千のインスタンスが並列起動します。
- コンテナ(Fargate等): 新しいタスクのプロビジョニングに数十秒〜数分かかる場合があります。
テレビ番組での紹介や、SNSでのバズが予想されるキャンペーンサイトでは、FaaSのバースト対応力が決定打となります。
【基準4】ステートレス性と実行時間の制約
FaaSには「ステートレス(状態を持たない)」であることと、「実行時間制限(例:AWS Lambdaは最大15分)」という制約があります。
長時間かかる計算処理や、ローカルディスクに一時ファイルを大量に書き込む処理、メモリを数十GB消費するような処理は、コンテナ(特にマネージドなECS/EKS)を選択せざるを得ません。
【比較表】主要クラウドサービスの実名比較
主要3社のサービスを、提案時にそのまま使える形式で比較しました。最新の仕様は各公式サイトを参照してください。
| 比較項目 | FaaS (サーバーレス関数) | Serverless Container | Managed Kubernetes |
|---|---|---|---|
| AWS | AWS Lambda | AWS Fargate (ECS/EKS) | Amazon EKS |
| Google Cloud | Cloud Functions | Cloud Run | Google Kubernetes Engine (GKE) |
| Azure | Azure Functions | Container Apps | Azure Kubernetes Service (AKS) |
| 主な課金体系 | 実行数 + 実行時間 (128MB〜) | 確保したvCPU / メモリ秒 | コンピュートノード代 + 管理費 |
| 最大実行時間 | 約15分 (サービスによる) | 設定により長時間可能 | 無制限 |
| 運用の手間 | 極小 (コードのみ) | 小 (イメージ管理あり) | 大 (クラスタ管理が必要) |
※料金の詳細は、AWS Lambda 料金やGoogle Cloud Run 料金などの公式ページで、最新の無料枠と単価を確認してください。
実務で直面する「サーバーレス」の壁と回避策
「サーバーレスは安いし楽だ」と安易に提案すると、実装フェーズで以下の問題に直面します。
コールドスタート問題の技術的解決
しばらくリクエストがない状態で関数が呼び出される際、実行環境の初期化に時間がかかる現象です。JavaやC#などの静的型付け言語で顕著になります。
- 回避策1: PythonやGo、Node.jsなど起動の早い言語を選択する。
- 回避策2: AWSの「Provisioned Concurrency(設定済み同時実行数)」を利用し、常に一定数の実行環境を暖めておく(※ただし待機コストが発生します)。
RDB接続(コネクションプーリング)の最適化
LambdaなどのFaaSからAmazon RDS等のRDBに接続すると、関数が並列実行されるたびにコネクションを張りに行き、DB側の最大接続数を使い果たしてしまうことがあります。
- 回避策: AWS Lambdaであれば「RDS Proxy」を介在させることで、コネクションをプールし、DB負荷を軽減します。Google Cloud Runであれば、内蔵のコネクションプーリング機能を活用します。
実務で直面する「コンテナ」の壁と回避策
一方、コンテナ、特にKubernetesを採用する場合の壁は「運用コスト」に集約されます。
コンテナオーケストレーションの運用負荷
EKSやGKE自体の管理はマネージドですが、その上で動くアドオン(Ingress Controller、CSI Driver、Monitoring Agent等)のバージョンアップ作業は発生し続けます。
「なんとなくカッコいいからK8s」という提案は、数年後の顧客の運用コストを増大させるリスクがあります。10マイクロサービス以下の小規模構成であれば、まずはAWS App RunnerやGoogle Cloud Runのような、K8sを隠蔽したプラットフォームを提案するのが定石です。
関連記事:SaaSコストとオンプレ負債を断つ。バックオフィス&インフラの「標的」と現実的剥がし方(事例付)
CI/CDパイプラインとセキュリティ
コンテナはOSパッケージを含むため、ベースイメージに脆弱性が含まれるリスクがあります。
- 手順: GitHub ActionsやAWS CodeBuildを利用し、ビルド時にAmazon InspectorやTrivyによる脆弱性スキャンを自動実行するパイプラインを構築します。
- エラー対処: イメージサイズが肥大化するとデプロイが遅延し、タイムアウトエラーが発生しやすくなります。マルチステージビルドを駆使して、最終イメージを軽量化(Distrolessイメージの採用など)することが必須です。
顧客への提案シナリオ別・推奨構成
具体的な提案の型を3つ示します。
【新規事業】最速リリースと低コストを優先する場合
推奨: Google Cloud Run + Firebase (Firestore) / AWS Lambda + DynamoDB
初期コストを限りなくゼロに抑えつつ、需要に応じて無限にスケールする構成です。サーバーレスデータベース(DynamoDB等)を組み合わせることで、DBの管理工数も削減します。
【既存移行】オンプレミスのレガシー資産をクラウド化する場合
推奨: AWS Fargate (ECS) + RDS
既存のアプリケーションコードを大幅に変更することなく、Docker化するだけでクラウドへ移行できます。FaaSの制約に合わせるためのリファクタリング工数が出せない場合に有効です。
【大規模/複雑】データ基盤やAI連携を含む場合
データ処理のパイプラインや、広告最適化などの高度なデータ連携を行う場合、基盤となるインフラの選定はさらに慎重を期します。例えば、BigQueryと連携したデータアーキテクチャを構築する場合、バッチ処理にはサーバーレス(Cloud Functions)、フロントエンドにはCloud Runといった使い分けが一般的です。
関連記事:広告×AIの真価を引き出す。CAPIとBigQueryで構築する「自動最適化」データアーキテクチャ
まとめ:技術選定を「ビジネスの成功」に繋げるために
サーバーレスとコンテナの比較は、単なるスペック比較ではありません。顧客のビジネスフェーズ、予算、運用体制を考慮した「責務の分配」の議論です。
開発会社としての正解は、顧客が将来的に「インフラを意識せず、ビジネス価値の創出に集中できる状態」を作ることです。そのためには、まずは管理コストの低いサーバーレスやマネージドコンテナ(Fargate/Cloud Run)から検討を開始し、技術的な制約(実行時間、ライブラリ、特殊なプロトコル)によって実現不可能な場合にのみ、自前運用のコンテナ(EC2上のDockerやKubernetes)へと一段ずつ抽象度を下げていくアプローチを推奨します。
本記事の比較フレームワークを、ぜひ次回の提案書作成に活用してください。
選定・提案時に決着させておくべき「3つの技術的要件」
比較フレームワークで大枠の方向性が決まった後、実装・運用フェーズでの手戻りを防ぐために合意しておくべき実務上のポイントを補足します。
1. ベンダーロックインに対する「現実的なスタンス」
サーバーレス(FaaS)を提案する際、顧客から「特定のクラウドに縛られたくない」という懸念を受けることがあります。しかし、インフラの抽象度を上げる(マネージドサービスを使い倒す)ほど、開発スピードとコスト効率は向上し、同時にポータビリティ(移行しやすさ)は低下します。
- FaaSの場合:ビジネスロジックは移植可能ですが、イベントトリガー(S3やEventBridge等の挙動)は各社固有であり、完全な移行には再設計が必要です。
- コンテナの場合:Dockerイメージは共通ですが、ネットワーク(IAM、VPC、サービスメッシュ)の設定はプラットフォームに強く依存します。
「将来の移行可能性」のために現在の工数を2倍にするよりも、まずはサーバーレスで早期リリースし、ビジネスの成長に合わせてコンテナ(K8s等)へ移行する、あるいは「使い捨て」を許容するスピード感を重視すべきケースが多いのが実情です。
2. 従量課金と固定コストの「損益分岐点」
サーバーレスは「安価」というイメージがありますが、リクエスト数が一定を超えると、常駐型のコンテナ(Fargate等)の方が安くなる逆転現象が発生します。
| 検討項目 | サーバーレス (FaaS) | コンテナ (Fargate等) |
|---|---|---|
| 初期・アイドルコスト | 原則0円(無料枠も大きい) | 最低1タスク分の月額コストが発生 |
| リクエスト増への耐性 | 比例してコスト増。スパイクには強い | 一定までは定額。リソース超過でスケールが必要 |
| 監視・デバッグ工数 | 標準機能で完結。ログ出力料金に注意 | エージェント導入や維持の工数が発生 |
| 適したフェーズ | 検証期・不定期なバッチ・小規模API | 成長期・常時安定トラフィックがあるWeb |
3. オブザーバビリティ(可観測性)の確保
分散システムとなるサーバーレス構成では、エラー時の追跡が難しくなります。提案時には以下の公式ドキュメントを参考に、分散トレーシングの導入を標準構成に含めることを推奨します。
- AWSの場合:AWS Lambda のモニタリングとトラブルシューティング。AWS X-Rayによるリクエストの可視化が必須です。
- Google Cloudの場合:Cloud Run のモニタリング。Cloud Traceによるボトルネックの特定を設計に組み込みます。
関連記事:【図解】SFA・CRM・MA・Webの違いを解説。高額ツールに依存しない『データ連携の全体設計図』
最終チェックリスト:提案前のセルフ確認
顧客へ最終的な構成案を出す前に、以下の3点を再確認してください。
- コールドスタートの影響:ユーザー向けAPIで2〜3秒の初期遅延が許容されるか?(NGならCloud Runの最小インスタンス設定やProvisioned Concurrencyが必要)
- タイムアウト設計:外部システムとの連携待ちで、FaaSの実行時間制限(15分等)に抵触しないか?
- コネクション上限:RDB(RDS等)を使用する場合、関数の同時実行数に対してDBの接続数が不足しないか?(RDS Proxy等の検討)
ご相談・お問い合わせ
本記事の内容を自社の状況に当てはめたい場合や、導入・運用の設計を一緒に整理したい場合は、当社までお気軽にご相談ください。担当より折り返しご連絡いたします。