🔎 STEP 16: Amazon Athena & Lambda
サーバーレスクエリとイベント駆動処理で柔軟なデータ分析を実現しよう
📋 このステップで学ぶこと
- Amazon Athenaとは(サーバーレスクエリ)
- S3データの直接クエリ
- パーティショニング戦略
- Glue Catalogとの連携
- AWS Lambda入門(サーバーレス処理)
- S3トリガーの設定
- 実践演習:S3のログ分析
🎯 このステップのゴール
このステップを終えると、S3のデータに直接SQLを実行し、イベント駆動で自動処理を実行できるようになります。AWSのサーバーレスサービスを組み合わせて、効率的なデータ分析パイプラインを構築しましょう。
🎯 1. Amazon Athenaとは
Athenaの基本
Amazon Athenaは、S3上のデータに直接SQLクエリを実行できるサーバーレスクエリサービスです。
💡 例え話:図書館で本を探す
📝 Athenaの特徴
- サーバーレス:インフラ管理不要、起動も即座
- 従量課金:スキャンしたデータ量のみ課金($5/TB)
- 標準SQL:Prestoベースの標準SQL(学習コスト低い)
- 様々な形式に対応:CSV、JSON、Parquet、ORC、Avro等
- Glue Catalog連携:メタデータを自動取得
AthenaとRedshiftの違い
💡 例え話:タクシー vs マイカー
📊 Athena vs Redshift 比較表
| 項目 | Athena | Redshift |
|---|---|---|
| インフラ | サーバーレス | クラスター管理必要 |
| 料金 | クエリ課金($5/TB) | 時間課金($0.25〜/時間) |
| データ保存 | S3(別料金) | クラスター内蔵 |
| 速度 | やや遅い(数秒〜分) | 高速(ミリ秒〜秒) |
| 同時クエリ | 自動スケール | クラスター性能に依存 |
| 使用シーン | アドホック分析 たまに実行 |
定期的な分析 頻繁に実行 |
💡 どちらを選ぶ?具体的な判断基準
🗄️ 2. S3データの直接クエリ
Athenaの使い方
📝 ステップ1:クエリ結果の保存先を設定
📝 ステップ2:データベースの作成
📝 ステップ3:テーブルの作成
💡 EXTERNAL TABLEとは?
Athenaのテーブルは「EXTERNAL TABLE」(外部テーブル)です。データはS3に保存されたまま、Athenaはメタデータ(スキーマ情報)だけを管理します。テーブルを削除してもS3のデータは消えません。
📝 ステップ4:クエリの実行
🗂️ 3. パーティショニング戦略
パーティショニングとは
Athenaでは、パーティショニングでスキャン量を削減し、クエリ性能を大幅に向上できます。
💡 例え話:図書館の本棚の整理
💡 パーティショニングの効果(具体的数値)
パーティションテーブルの作成
📝 S3のフォルダ構造
パーティションを使ったクエリ
⚠️ パーティショニングの注意点
- 多すぎるパーティションはNG:10万以上は避ける(メタデータ管理が重くなる)
- 小さすぎるパーティションもNG:1ファイル100MB以上推奨(細かすぎると効率低下)
- WHERE句でパーティションカラムを必ず指定:指定しないと全スキャン
- 新しいパーティションの追加を忘れない:MSCK REPAIR TABLEか手動追加
おすすめのパーティション設計
✅ パターン別おすすめ設計
🔗 4. Glue Catalogとの連携
Glue Crawlerで自動テーブル作成
Glue Crawlerを使うと、Athenaのテーブルを自動作成できます。手動でCREATE TABLEを書く必要がありません。
💡 例え話:自動図書登録システム
📝 Crawlerで自動テーブル作成の流れ
⚡ 5. AWS Lambda入門
Lambdaとは
AWS Lambdaは、サーバーレスでコードを実行できるサービスです。イベント駆動で自動実行できます。
💡 例え話:自動販売機
📝 Lambdaの特徴
- サーバーレス:インフラ管理不要
- イベント駆動:S3、DynamoDB、API Gateway、CloudWatchなどのイベントで起動
- 自動スケール:同時1000リクエストでも自動対応
- 最大15分:短時間の処理向け
- 超低コスト:100万リクエストで$0.20
Lambda関数の作成
S3トリガーの設定
💡 例え話:郵便受けセンサー
💡 S3イベント(event)の構造を詳しく解説
💡 例え話:ネストした辞書 = 住所録
Lambdaトリガーの設定手順
📝 コンソールでの設定手順
⚠️ Lambdaの注意点
- 最大実行時間は15分:それ以上かかる処理はGlue ETL Jobを使う
- メモリ制限:最大10GB(大きいファイルの処理は注意)
- 同時実行制限:デフォルト1000(引き上げ可能)
- コールドスタート:初回起動は数秒かかることがある
💪 6. 実践演習:S3のログ分析
S3に保存されたアクセスログをAthenaで分析し、異常値があればLambdaで通知する
要件:
- アクセスログが毎時S3に保存される
- Athenaでエラー率を集計
- エラー率が5%を超えたらSNS通知
【解答例】
1. Athenaテーブル作成
2. エラー率を計算するクエリ
3. Lambda関数(S3トリガー)
4. システム全体のフロー
📝 STEP 16 のまとめ
✅ このステップで学んだこと
- AthenaでS3データに直接SQLクエリ(サーバーレス、$5/TB)
- パーティショニングでコスト99%削減、速度20倍向上
- Glue Catalogとの連携で自動テーブル作成
- Lambdaでイベント駆動のサーバーレス処理
- S3トリガーで自動化パイプラインを構築
💡 重要ポイント
- Athenaはアドホック分析に最適(たまにクエリする場合)
- パーティショニングでスキャン量を大幅削減(必須テクニック)
- Parquet形式でさらにコスト削減(CSV比で1/10)
- Lambdaでイベント駆動の自動処理(最大15分)
- AthenaとLambdaの組み合わせが強力
🎯 Part 3(AWS編)完了!
次のPart 4では、GCPのデータウェアハウス(BigQuery)を学びます。
STEP 17「BigQuery入門」で、Googleの強力なDWHを体験しましょう!
📝 理解度チェック
AthenaとRedshiftの使い分けについて、それぞれ適したシーンを説明してください。
【解答】
Athena:
- アドホック分析(たまにクエリ)
- インフラ管理したくない
- データがS3に保存されている
- コストを変動費にしたい
Redshift:
- 定期的な分析(毎日クエリ)
- 高速性が重要
- 複雑なJOINや集計が多い
- 予測可能なコストが必要
Athenaでパーティショニングを使う利点を3つ挙げ、具体例を示してください。
【解答例】
- コスト削減:スキャン量が減るので料金が安くなる。例:1TBから10GBに削減 → $5から$0.05(100分の1)
- クエリ高速化:必要なパーティションだけスキャン。例:1年分のデータから1日分だけを読む(60秒→2秒)
- データ管理の簡素化:古いパーティションを簡単に削除。例:90日以上前のパーティションを自動削除
LambdaとGlue ETL Jobの違いを説明し、それぞれ適したユースケースを挙げてください。
【解答】
| 項目 | Lambda | Glue ETL Job |
|---|---|---|
| 最大実行時間 | 15分 | 無制限(数時間OK) |
| 処理エンジン | 単一処理 | Apache Spark(並列処理) |
| メモリ | 最大10GB | DPU単位(16GB〜) |
| 適したケース | 軽量処理、トリガー | 大量データのETL |
Lambdaに適したケース:S3イベントをトリガーにした通知、軽量なデータ変換、API呼び出し
Glueに適したケース:TB級データの変換、複雑なデータパイプライン、日次バッチ処理
❓ よくある質問
・10GBスキャン:$0.05
・100GBスキャン:$0.50
・1TBスキャン:$5.00
コスト削減のコツ:
1. パーティショニングでスキャン範囲を限定
2. Parquet形式を使用(CSV比で1/10のサイズ)
3. SELECT * を避けて必要なカラムだけ指定
Lambdaに向いている処理:
・S3トリガーでの軽量処理
・API呼び出し
・通知送信
・小規模データ変換
Lambdaに向かない処理:
・大量データの変換(→ Glue)
・長時間の機械学習(→ SageMaker)
1.
MSCK REPAIR TABLE テーブル名 を実行2. パーティションを手動で追加
3. S3のフォルダ構造を確認(year=2025/month=01/ の形式)
Glue Crawlerを使うと、パーティションを自動検出してくれるので便利です。
start_query_executionは非同期で、すぐに戻ります。結果を取得するには:1.
get_query_executionで状態を確認(SUCCEEDED/FAILED)2. SUCCEEDEDになったら
get_query_resultsで結果取得注意:Athenaクエリが長時間かかる場合、Lambdaの15分制限に注意してください。長いクエリはStep Functionsで非同期処理を検討しましょう。
例:1000万行の売上データ
・CSV:500MB、クエリ15秒、料金$0.0025
・Parquet:50MB、クエリ3秒、料金$0.00025
Parquetのメリット:
1. 列指向形式なので必要なカラムだけ読み込める
2. 圧縮効率が高い
3. スキーマが内蔵されている
→ 可能な限りParquet形式を使いましょう!
学習メモ
クラウドデータ基盤(AWS・GCP) - Step 16