ETL処理をAWS Lambda+AWS Step Functions構成で実現したケース
アスエネ株式会社 / Kido Haruhi
チームリーダー / テックリード
| ツールの利用規模 | ツールの利用開始時期 | 事業形態 |
|---|---|---|
| 10名以下 | 2025年9月 | B to B |
| ツールの利用規模 | 10名以下 |
|---|---|
| ツールの利用開始時期 | 2025年9月 |
| 事業形態 | B to B |
アーキテクチャ
アーキテクチャの意図・工夫
- 軽量な要件であったため、LambdaとStep Functions構成を中心としたアーキテクチャとしました
- データ参照における権限の観点から プロダクトの DB とは分離したデータ参照経路を取る方針としました 新たに RDS を構築・運用するコストを抑えるため、ユーザーがアップロードしたファイルは S3 に格納し、処理後のデータを Athena 経由で Tableau から参照する構成を採用しました
導入の背景・解決したかった問題
導入背景
クライアントが保有する業務データを活用して CO₂ 排出量を可視化したいというニーズはありましたが、実際の業務データは非構造な形式も多く、より多様なデータの可視化を実現するため、非構造データの活用を模索していました
より多様なデータを可視化対象とするために、非構造データを構造化し、算出・分析・可視化までを一連で扱える仕組みの導入検討を進めることになりました
選定理由
今回のデータ活用で求められていたのは、次のような要件でした
- 外部API制約下で、処理を制御できること
- 成功・失敗をレコード単位で把握・再処理できること
- 処理全体の進捗や結果を可視化できること
- 処理内容の変更や拡張に対応しやすいこと
これらを踏まえ、
- 処理を小さな単位に分解できる
- 外部APIの制約を構成として表現できる
- エラーハンドリングや実行状況をフローとして管理できる
という点で、Lambda+Step Functions 構成が合致していたため、採用しました
導入の成果
- ユーザごとの多様な非構造データを、1つの仕組みで構造化できるようになりました
- レコード単位でのエラートレースが自動化されました
- Tableau によるデータ可視化の実現がされました
導入時の苦労・悩み
Lambda は At Least Once(最低一回実行) の実行モデルであるため、
同じ処理が複数回実行されても、結果が破綻しない設計が求められました。
- 行単位で外部 API を呼び出す
- 成功・失敗の結果を S3 に保存する
という特性上、
再実行時に重複データが生成されないことなどを常に意識する必要がありました
そのため、処理単位ごとに一意な識別子を持たせるといった点を、設計段階で慎重に詰めるようにしました
導入に向けた社内への説明
上長・チームへの説明
処理要件にフィットする構成として、 以下の観点から Lambda+Step Functions を採用する判断に至ったことを上長へ共有しました
- 外部 API が行単位・同期処理であるという前提に対し、 処理を小さな単位に分解し、Lambda を短時間・単一責務に限定できる構成が自然に適合していたこと
- 実行制御・リトライ・エラー分岐を Step Functions 側で管理することで、 行単位での成功/失敗を可視化でき、再実行や障害調査を含めた運用・トラブルシュートがシンプルになること
また、AWS サポートからも「本ユースケースであれば Lambda+Step Functions でも十分成立する」という見解を得られている点と、 Lambda+Step Functions 構成であれば社内ナレッジが存在することも補足しました。
活用方法
よく使う機能
- 非構造な月次データのアップロードで自動的にデータ変換し、BI ツールへ反映します
ツールの良い点
処理を小さな単位に分解でき、軽量処理に向いている →実行時間や起動オーバーヘッドを意識せず運用できます
変換ロジックをコードベースで柔軟に管理ができ、CIを使って自動的に反映させることができる →PR ベースでレビューもできるので安全に扱うことができます
Step Functions と組み合わせることで運用性が高まる →実行制御やエラー分岐を外に出すことで、Lambda は処理に専念させることができることです
ツールの課題点
- Lambdaのリクエスト制限である、15分以内で完結できる処理かを意識していく必要があります
ツールを検討されている方へ
初期構築のしやすさだけでなく、あとから困らないかという観点は重要でした
- エラーが出たとき、どこで止まったか分かるか
- 再実行したとき、意図しない副作用が出ないか
- こうした点を重視すると、実行制御や状態を「構成として表現できる」仕組みは大きな助けになると思います
今回の要件では、 Lambda+Step Functionsの構成で実現が可能でしたが、より大規模データを一括処理するETLや長時間バッチがあり制限時間などの懸念がある場合、Glue など別の選択肢も検討した方が良いかもしれません
アスエネ株式会社 / Kido Haruhi
チームリーダー / テックリード
よく見られているレビュー
アスエネ株式会社 / Kido Haruhi
チームリーダー / テックリード
レビューしているツール
目次
- アーキテクチャ
- 導入の背景・解決したかった問題
- 活用方法


