1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS×Terraform ①】データパイプライン構築シリーズ第1回|全体像

Last updated at Posted at 2026-01-23

📁 完全なコードはGitHubで公開GitHub: pipeiac02

シリーズ一覧(全12回)

Phase 1: 基盤構築

Phase 2: ワークフロー

Phase 3: セキュリティ・運用

Phase 4: 開発効率化


1. はじめに

1-1. このシリーズについて

AWS × Terraform でデータパイプラインを構築しながら、設計思考を身につけていく自己学習です。
「とりあえず動く」ではなく、「なぜこう設計するのか」を考えながら進めていきます。

1-2. 対象読者

  • AWSはEC2くらいなら触ったことがある
  • Terraformの基礎は分かる
  • データパイプラインを作ってみたい
  • 設計の考え方を学びたい

1-3. このシリーズのスタンス

筆者が自分の思考の可視化をするスタイルで書いていきます。


2. 何を作るか?

2-1. 完成形の全体像

このシリーズで作るのは、EC売上データを自動で分析できる状態にするパイプライン です。

2-2. できるようになること

できること 説明
自動実行 S3にファイルを置くだけでパイプラインが動く
データ変換 JSON → Parquet(分析に最適な形式)
SQLで分析 Athenaでクエリを実行できる
可視化 QuickSightでダッシュボード作成
失敗通知 エラー時にメールで通知
監視 異常を検知してアラート

2-3. 使用するAWSサービス

サービス 役割
S3 データの保存場所
Lambda データ変換処理
Step Functions ワークフロー管理
Glue メタデータ管理
EventBridge イベント駆動
Athena SQLクエリ
QuickSight 可視化
SNS 通知
CloudWatch 監視
IAM 権限管理

3. 比喩で理解する

3-1. データパイプラインを「レストランの厨房」で考える

いきなり技術の話をする前に、身近な例で全体像を掴んでみます。

3-2. 比喩の図解(レストラン)

3-3. 比喩と技術の対応表

レストラン AWSサービス 役割
冷蔵庫(食材) S3 Raw 生データの保管場所
ホールスタッフ EventBridge 「注文が入った」を検知
調理長 Step Functions 工程を管理・指示
料理人 Lambda 実際の調理(データ変換)
盛り付け済み料理 S3 Processed 加工済みデータ
メニュー係 Glue Crawler メニュー表を更新
メニュー表 Glue Database データの構造情報
配膳とお会計 Athena 料理を届ける(クエリ実行)
お客さんの食事 QuickSight 可視化・分析
店長への報告 SNS 失敗時の通知
煙感知器 CloudWatch 異常検知

3-4. 技術の図解(AWS)

3-5. 並べてみると

同じ構造 になっていることが分かります。

  • 食材を保管 → 注文検知 → 調理 → 盛り付け → 配膳
  • データを保管 → イベント検知 → 変換 → 保存 → クエリ

この「流れ」を意識して、各サービスの役割をイメージします。


4. 学習ロードマップ

4-1. シリーズ全体の流れ:Phase1~Phase4

12回に分けて、段階的にパイプラインを構築していきます。

4-2. 各回の概要

# タイトル 学ぶこと 比喩
1 全体像 パイプラインの構成・ゴール レストラン全体の見取り図
2 S3設計 Raw/Processedの役割、命名規則 冷蔵庫と盛り付け台の設計
3 Lambda ETL JSON→Parquet変換、Layer 料理人の調理手順
4 Glue Crawler メタデータ管理、Athena連携 メニュー表の自動更新
5 Step Functions ワークフロー設計、状態管理 調理長の工程管理
6 EventBridge S3トリガー、自動実行 ホールスタッフの注文検知
7 IAM最小権限 ロール設計、ポリシー分離 スタッフごとの権限管理
8 エラーハンドリング Retry/Catch/SNS通知 焦げたら再挑戦、ダメなら店長報告
9 CloudWatch監視 アラーム設計、傾向監視 煙感知器の設置
10 Terraform設計 ファイル構成、tfvars、backend レシピ本の整理方法
11 CI/CD GitHub Actions連携 自動発注システム
12 総まとめ 全体テスト、振り返り グランドオープン

4-3. 各Phaseのゴール

Phase ゴール
Phase 1 データが変換・保存される状態
Phase 2 自動で動く状態
Phase 3 安全・安心に運用できる状態
Phase 4 効率よく開発・運用できる状態

5. 環境準備

5-1. 前提条件

項目 条件
AWSアカウント 作成済み
AWS CLI インストール・設定済み
Terraform v1.0.0 以上
Git インストール済み
エディタ VS Code 推奨

5-2. 作業環境

項目 環境
OS WSL2 Ubuntu(Windows)または Mac
エディタ VS Code
ターミナル WSL2 または Mac Terminal

5-3. AWS CLIの確認

aws --version
aws sts get-caller-identity

5-4. Terraformの確認

terraform version

5-5. リポジトリの準備

git clone https://github.com/shu130/pipeiac02.git
cd pipeiac02

5-6. ディレクトリ構成:シリーズ完了後

シリーズ完成後の構成です。

pipeiac02/
├── .github/
│   └── workflows/
│       ├── terraform-plan.yml    # 第11回で追加(PR時にplan実行)
│       └── terraform-apply.yml   # 第11回で追加(マージ時にapply実行)
├── oidc/                         # 第11回:OIDC設定(別管理推奨)
│   ├── main.tf                   # 第11回:OIDCプロバイダ・IAMロール
│   ├── variables.tf              # 第11回:変数定義
│   └── outputs.tf                # 第11回:出力値
├── test-data/                    # テスト用サンプルデータ
│   ├── ec-sales-03.json          # 第3回:Lambda ETLテスト
│   ├── ec-sales-05.json          # 第5回:Step Functionsテスト
│   ├── ec-sales-06.json          # 第6回:EventBridge自動起動テスト
│   ├── iam-test.json             # 第7回:IAM権限テスト
│   ├── error-test-ok.json        # 第8回:エラーハンドリング正常系
│   ├── monitor-test.json         # 第9回:CloudWatch監視テスト
│   ├── refactor-test.json        # 第10回:リファクタリング後テスト
│   ├── e2e-test.json             # 第12回:E2E正常系テスト
│   ├── invalid-json.json         # 第12回:E2E異常系(不正JSON)
│   └── empty-array.json          # 第12回:E2E異常系(空配列)
├── tf/
│   ├── main.tf                   # 第2回:プロバイダ設定・共通タグ
│   ├── variables.tf              # 第2回:変数定義
│   ├── outputs.tf                # 第2回:出力値定義
│   ├── backend.tf                # 第11回:S3バックエンド設定
│   ├── terraform.tfvars          # 第2回:変数値(Git管理外)
│   ├── s3.tf                     # 第2回:S3バケット
│   ├── lambda.tf                 # 第3回:Lambda関数
│   ├── glue.tf                   # 第4回:Glue Database・Crawler
│   ├── stepfunctions.tf          # 第5回:Step Functions
│   ├── eventbridge.tf            # 第6回:EventBridgeルール・S3通知
│   ├── sns.tf                    # 第8回:SNSトピック・サブスクリプション
│   ├── cloudwatch.tf             # 第9回:アラーム・ダッシュボード
│   ├── iam.tf                    # 第3,4,5,6回:IAMロール・ポリシー
│   └── lambda/
│       └── etl.py                # 第3回:ETL処理コード
└── README.md                     

補足:

  • terraform-plan.yml: PR作成時に terraform plan を実行し、結果をPRにコメント
  • terraform-apply.yml: mainマージ時に terraform apply を自動実行
  • oidc/: GitHub Actions用のOIDC認証設定(メインのtfとは別管理)
  • backend.tf: tfstateをS3で管理するための設定

6. まとめ

6-1. この記事でやったこと

項目 内容
全体像 パイプラインの完成形を図解
比喩 レストランの厨房で理解
ロードマップ 12回のシリーズ構成
環境準備 必要なツール・リポジトリ

6-2. 比喩の振り返り

レストラン AWS
冷蔵庫 S3
ホールスタッフ EventBridge
調理長 Step Functions
料理人 Lambda
メニュー係 Glue Crawler
煙感知器 CloudWatch

6-3. 次回予告

第2回: S3設計 では、データの保管場所を設計していきます。

  • Raw と Processed の役割分担
  • 命名規則の考え方
  • Terraformでの実装

レストランで言うと「冷蔵庫と盛り付け台の設計」です。


(つづく)

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?