WebサービスのバックエンドをLambdaで構築
株式会社テックオーシャン / 加賀田茂之
メンバー / バックエンドエンジニア / 従業員規模: 51名〜100名 / エンジニア組織: 11名〜50名
| ツールの利用開始時期 | 事業形態 |
|---|---|
| 2023年10月 | B to B B to C |
| ツールの利用開始時期 | 2023年10月 |
|---|---|
| 事業形態 | B to B B to C |
アーキテクチャ

アーキテクチャの意図・工夫
APIサーバをLambda上で構築するにあたっては、API Gatewayを併用し、HTTPリクエストの受け口として利用しています。 また、非同期処理やイベント駆動の構成としては、以下のような設計を採用しています:
- SNS → SQS → Lambda
複数システムからの通知やイベントをSNSで受け取り、それをSQSを介してLambdaで処理するパターンです。これにより、処理の非同期化とキューによる制御が可能となっています。
- EventBridge → Lambda(図示なし)
定期実行が必要な処理については、EventBridgeのスケジュール機能を用いてLambdaを起動しています。
これらの構成により、同期・非同期の両面で柔軟かつ拡張性の高いシステムを実現しています。
導入の背景・解決したかった問題
導入背景
ツール導入前の課題
弊社の主要サービスである「TECH OFFER」は、システムリプレース前はEC2上で構築・運用されていました。構成自体はシンプルでしたが、スケーリングの柔軟性や保守性に課題がありました。 これらの点は、システムをリプレースするに至った要因の一部であり、特に重要な課題として認識していました。
どのような状態を目指していたか
TECH OFFERの運用においては、スケーリングを柔軟に行えることや、サーバー管理の負担を軽減することが重要な目標でした。
比較検討したサービス
- EC2
- Fargate
比較した軸
サービス選定にあたっては、以下の観点を重視しました。
- 保守性
運用・管理の負荷が少なく、障害対応やスケーリングなどにおいて開発者が介在する必要が最小限で済む構成を重視しました。
- コスト
長期的な運用を前提とした際のコスト効率を重視し、初期導入費用だけでなく、運用時の従量課金やスケーリングによる費用変動も評価対象としました。
選定理由
Lambdaを採用するにあたっては、以下の点が大きな決め手となりました。
- コストの低さ
従量課金制により、リクエスト数や実行時間に応じた課金となるため、小規模な処理や低頻度の実行においてコスト効率が高くなります。
- インフラ管理の不要性
サーバーのプロビジョニングやスケーリング、保守対応といったインフラ運用から解放され、開発リソースをサービス機能に集中させることが可能です。
導入の成果
改善したかった課題はどれくらい解決されたか
AWS Lambdaを導入したことにより、サーバの保守作業はほとんど不要となり、運用負荷が大幅に軽減されました。
また、スケーラビリティの面でも、Lambdaの特性により自動的なスケールが可能となり、最大同時起動数やデータベースへの負荷など、限られた観点にのみ注意を払えばよい状態となりました。
どのような成果が得られたか
インフラ運用にかかる対応が大幅に減少し、緊急対応の発生もほとんどなくなりました。その結果、サービス開発に集中できる環境を実現できました。
導入時の苦労・悩み
開発を進める中で、いくつかの技術的課題に直面しました。本節では、それぞれの課題とその対応方針について説明します。
APIサーバーをLambdaで構築する方法について
AWS Lambda上でWebサーバーを直接構築・運用することは、Lambdaの設計上、一般的な手法とは異なり工夫が求められます。弊社では、この課題に対応するため、AWS Lambda Go API Proxyを採用しています。
Lambdaの制限事項と対応策
Lambdaには以下のような制限が存在します。バックエンドをLambdaで構築する場合、それぞれに適切な対応が必要です。
リクエストサイズの制限(最大6MB)
ファイルアップロードなどでこの制限を超える場合、S3の署名付きURLを用いることで対応可能です。フロントエンドがS3に直接アップロードを行い、Lambdaは署名付きURLの発行のみを担当します。起動時間の制限(最大15分)
例えば、日次で実行するバッチ処理などが15分を超える可能性がある場合は、処理を分割して実行する必要があります。SQS(Simple Queue Service)を併用することで、処理対象を分割し、複数回に分けてLambdaを起動・実行する構成が有効です。
データベース接続に関する課題
Lambdaでは、1つのリクエストごとに1つのインスタンスが起動するため、多数の同時リクエストが発生した場合、それに比例してデータベース(DB)への接続数も増加します。たとえば100リクエストが同時に発生した場合、100のDB接続が必要になります。
この問題に対しては、RDS Proxyを利用することでDB接続を効率的に共有・管理することが可能です。RDS Proxyを導入することで、接続数の削減および接続の再利用が実現されます。
ただし、RDS Proxyには「ピン留め(pinning)」と呼ばれる動作があり、これが発生すると接続の共有が行われなくなります。ピン留めの回避が重要であり、たとえばAurora MySQLではプリペアドステートメント使用時にピン留めが発生するため、これらの使用は極力避ける必要があります。
導入に向けた社内への説明
上長・チームへの説明
なし
活用方法
よく使う機能
現在のシステム構成において、以下のAWSサービス連携を中心に活用しています。
- API Gateway からの Lambda 起動
外部からのHTTPリクエストをAPI Gatewayで受け取り、対応するLambda関数を起動。APIサーバとしての基本的なリクエスト処理に使用しています。
- SQS からの Lambda 起動
非同期処理の実行にSQS(キュー)を用い、メッセージをトリガとしてLambdaを起動。処理の平準化や再試行の制御にも活用しています。
ツールの良い点
- インフラ管理が不要
サーバーの構築・運用・スケーリングをAWS側で自動的に処理してくれるため、開発チームがインフラ運用に割く工数を大幅に削減できます。
- コスト効率が高い
Lambdaをはじめとしたサーバーレスサービスは従量課金制であり、リソースの使用量に応じて費用が発生するため、特にリクエスト頻度が不定期なシステムにおいては高いコストパフォーマンスを実現できます。
ツールの課題点
- 性能面の課題(コールドスタートへの対応など)
Lambdaでは初回実行時や一定時間未使用の後に発生する「コールドスタート」により、応答遅延が生じる場合があります。特にリアルタイム性が求められる処理では、事前の対応策が必要です。
- RDS(リレーショナルデータベース)への接続管理
Lambdaの特性上、同時実行数の増加に伴いDB接続数が急増しやすく、コネクション数の制限に抵触する可能性があります。RDS Proxyなどを併用することで、接続の最適化が求められます。
- 各種制限事項への対応
Lambdaには実行時間(最大15分)、リクエストサイズ(最大6MB)などの制限があり、ユースケースによっては事前の構成検討や設計上の工夫が必要となります。
ツールを検討されている方へ
性能や各種制限に関する課題については、事前に十分な検討を行っておくことが望ましいと考えます。 これらの制約を許容できる前提が整っていれば、Lambdaは有効な選択肢となり得ます。
今後の展望
現在、他のサービスでは AWS Fargate の利用も進めており、Lambdaとの比較検討を行っています。 今後は、それぞれの特性を踏まえた上で、要件に応じて適切なサービスを選定し、適材適所でLambdaの活用を進めていく方針です。
株式会社テックオーシャン / 加賀田茂之
メンバー / バックエンドエンジニア / 従業員規模: 51名〜100名 / エンジニア組織: 11名〜50名
よく見られているレビュー
株式会社テックオーシャン / 加賀田茂之
メンバー / バックエンドエンジニア / 従業員規模: 51名〜100名 / エンジニア組織: 11名〜50名
レビューしているツール
目次
- アーキテクチャ
- 導入の背景・解決したかった問題
- 活用方法


