Skip to content

課題6: 月次レポート自動生成システム構築 - SaaS企業の大量帳票処理

難易度: 🟢 初級


分類情報

項目内容
難易度初級
カテゴリバッチ処理 / SaaS / 定期実行
処理タイプバッチ / スケジュール
使用IaCCloudFormation
想定所要時間4〜5時間

学習するAWSサービス

この演習では以下のAWSサービスを実践的に学習します。

メインサービス

サービス役割学習ポイント
Amazon EventBridge Scheduler月次スケジュール実行cron式、タイムゾーン対応
AWS Step FunctionsワークフローオーケストレーションMap state、並列処理、エラーハンドリング
AWS Lambdaレポート生成処理大規模並列実行、レイヤー活用
Amazon S3レポートファイル保存大容量ストレージ、配信連携
Amazon SESメール配信バルク送信、テンプレート

補助サービス

サービス役割
Amazon DynamoDBジョブ状態管理、企業マスタ
Amazon SNS完了・エラー通知
Amazon CloudWatch監視・ログ・アラート
AWS IAMサービス間の権限管理

最終構成図

コンポーネント役割
EventBridge毎月1日AM1時にワークフロー起動
Step Functionsレポート生成ワークフローのオーケストレーション
Lambda Fetch処理対象企業一覧を取得
Lambda Generateレポート(PDF/Excel)生成
Lambda Sendメール送信処理
DynamoDB企業マスタ・ジョブ状態管理
S3 Reports生成したレポートの保存
SESメール配信
SNS処理完了通知

処理フロー

ステップコンポーネント説明
1. トリガーEventBridge Scheduler毎月1日AM1時にワークフロー起動
2. 企業取得Lambda + DynamoDB処理対象企業一覧を取得
3. 並列生成Step Functions Map + Lambda最大100並列でレポート生成
4. 保存S3PDF/Excelをバケットに保存
5. 配信Lambda + SES各企業担当者にメール送信
6. 通知SNS処理完了を管理者に通知

シナリオ

企業プロフィール

〇〇株式会社は、中小企業向けのクラウド会計・経費精算SaaSを提供しています。

項目内容
業種SaaS(会計・経費精算)
設立2017年
従業員数60名
契約企業数5,000社
月間処理件数500万件(仕訳・経費)
月商1.2億円
平均契約単価24,000円/月
データ量月次約100GB増加

現状の課題

毎月初に全契約企業(5,000社)に対して前月の月次レポート(損益計算書、貸借対照表、経費分析)を生成・配信していますが、処理に時間がかかり、月初の業務負荷が高くなっています。

数値で示された問題

指標現状目標
レポート生成対象5,000社変わらず
月次処理時間48時間6時間以内
経理チーム作業20時間/月2時間/月
配信完了日毎月5日毎月2日
生成エラー率3%0.5%以下
再生成依頼50件/月10件/月以下

現状のレポート生成フロー

毎月1日:
1. バッチサーバーでスクリプト実行開始
2. PostgreSQLから企業ごとにデータ抽出
3. Pythonでレポート計算・PDF生成
4. S3にアップロード
5. メール配信

問題点:
- 単一サーバーで逐次処理
- エラー時の再実行が困難
- 進捗把握ができない
- サーバーリソースがボトルネック

生成するレポート種類

レポート内容ファイル形式
月次損益計算書売上、費用、利益PDF + Excel
月次貸借対照表資産、負債、純資産PDF + Excel
経費分析レポートカテゴリ別経費推移PDF
キャッシュフロー概要入出金サマリーPDF
経費精算一覧当月の経費明細Excel

解決したいこと

  1. 5,000社のレポートを6時間以内に生成
  2. 並列処理による高速化
  3. 進捗監視とエラーハンドリング
  4. 自動リトライ・再生成機能
  5. 配信スケジュールの柔軟な管理

成功指標(KPI)

KPI現状目標達成期限
処理時間48時間6時間以内1ヶ月後
エラー率3%0.5%以下1ヶ月後
自動化率60%95%以上2ヶ月後
経理工数20時間/月2時間/月2ヶ月後
配信完了5日2日1ヶ月後

達成目標

この演習で習得できるスキル:

技術的な学習ポイント

  1. Amazon EventBridge Schedulerの実践活用

    • cron式によるスケジュール設定
    • タイムゾーン対応
    • 柔軟なスケジュール管理
  2. AWS Step Functionsによる並列処理

    • Map stateによる並列実行
    • エラーハンドリング・リトライ
    • 進捗監視
  3. AWS Lambdaの大規模並列処理

    • 同時実行制限の理解
    • メモリ・タイムアウト最適化
    • レイヤーの活用
  4. Amazon SESによるメール配信

    • テンプレートメール
    • バルク送信
    • バウンス処理

実務で活かせる知識

  • 定期バッチ処理の設計パターン
  • 大量データの並列処理アーキテクチャ
  • SaaS向けマルチテナント処理

GCPとの比較

機能AWSGCP
スケジューラーEventBridge SchedulerCloud Scheduler
ワークフローStep FunctionsCloud Workflows
サーバーレス関数LambdaCloud Functions
メール配信SES- (SendGridなど外部)

前提条件

必要な事前知識

  • AWSの基本操作(S3, Lambda)
  • Pythonの基礎
  • cron式の基本

準備するもの

  1. AWSアカウント

    • SES本番アクセス(サンドボックス解除推奨)
    • 適切なIAM権限
  2. 開発環境

    • AWS CLI v2
    • Python 3.9以上
    • pip(reportlab, openpyxl等)
  3. テストデータ

    • サンプル企業データ(10社程度)

トラブルシューティング課題

問題1: Map stateがタイムアウト

症状:

Step Functions実行が5分以上かかり、タイムアウト
大量の企業を処理できない

ヒント:

  1. MaxConcurrencyの設定を確認
  2. Lambda個別のタイムアウトを確認
  3. DynamoDB/S3のスループットを確認

解決方法:

json
// Map stateの設定調整
{
  "Type": "Map",
  "MaxConcurrency": 50,  // 100から減らす
  "ItemsPath": "$.companies",
  // Express Workflowの場合は5分制限
  // Standard Workflowは1年まで可能
}

問題2: SESでメール送信エラー

症状:

MessageRejected: Email address is not verified
サンドボックス環境での制限

ヒント:

  1. SESのサンドボックス状態を確認
  2. 送信先メールアドレスの検証状態を確認
  3. 本番アクセスリクエストを申請

解決方法:

bash
# メールアドレス検証(サンドボックス環境)
aws ses verify-email-identity --email-address test@example.com --region ${AWS_REGION}

# 本番アクセス申請(コンソールから)
# SES → Account dashboard → Request production access

問題3: Lambda同時実行制限に到達

症状:

TooManyRequestsException: Rate Exceeded
一部のレポート生成がスキップされる

ヒント:

  1. Lambda同時実行数制限(デフォルト1000)を確認
  2. Reserved Concurrencyの設定を確認
  3. MaxConcurrencyの調整

解決方法:

bash
# アカウントレベルの同時実行制限確認
aws lambda get-account-settings --region ${AWS_REGION}

# 関数レベルのReserved Concurrency設定
aws lambda put-function-concurrency \
  --function-name financeflow-generate-report \
  --reserved-concurrent-executions 200 \
  --region ${AWS_REGION}

設計の考察ポイント

1. EventBridge Scheduler vs CloudWatch Events

考察ポイント:

  • Scheduler: タイムゾーン対応、より柔軟なスケジュール
  • CloudWatch Events: 従来の方法、広く使われている
  • 2023年以降は Scheduler 推奨

2. 並列度の最適化

考察ポイント:

  • Lambda同時実行制限とのバランス
  • DynamoDB/S3のスループット
  • コストとスピードのトレードオフ

3. エラーハンドリング戦略

考察ポイント:

  • 個別失敗 vs 全体失敗
  • リトライ回数と間隔
  • 手動再実行の仕組み

4. メール配信の信頼性

考察ポイント:

  • SESのバウンス処理
  • 配信レート制限
  • 代替手段(SendGrid等)

5. レポートの保存期間

考察ポイント:

  • S3ライフサイクルポリシー
  • コンプライアンス要件
  • コスト最適化

発展課題(オプション)

1. レポートのカスタマイズ

  • プラン別レポート内容
  • 企業ごとのテンプレート
  • ロゴ・ブランディング対応

2. オンデマンド再生成

  • 特定企業のみ再生成
  • APIエンドポイント追加
  • ダッシュボード連携

3. マルチ言語対応

  • 英語レポート生成
  • 多通貨対応
  • タイムゾーン別配信

4. 分析機能追加

  • AIによる異常検知
  • 前月比較・トレンド分析
  • 経営アドバイス生成(Bedrock)

5. 配信チャネル拡大

  • Slack通知
  • モバイルプッシュ
  • ダッシュボード表示

想定コストと削減方法

月額概算コスト(月間5,000社処理想定)

サービス内訳月額コスト
AWS Lambda5,000回 × 30秒 × 512MB$3
Step Functions5,000遷移 × 7ステート$0.15
EventBridge Scheduler1スケジュール無料
Amazon S35GB(レポート)+ リクエスト$0.50
Amazon SES5,000通$0.50
Amazon DynamoDBオンデマンド$2
Amazon SNS通知$0.01
CloudWatchログ$3
合計約$9(約1,400円)

コスト削減のポイント

  1. Lambda最適化

    • メモリサイズの最適化(256MB検討)
    • ARM64アーキテクチャ使用
    • → 最大20%削減
  2. S3ライフサイクル

    • 古いレポートの自動削除/アーカイブ
    • Intelligent-Tiering
  3. Express Workflow検討

    • 処理時間5分以内の場合
    • → Step Functions コスト90%削減
  4. SESの最適化

    • バウンス管理による無駄削減
    • 配信レピュテーション維持

リソース削除手順

bash
# EventBridge Scheduler
aws scheduler delete-schedule --name financeflow-monthly-report-schedule --region ${AWS_REGION}

# Step Functions
aws stepfunctions delete-state-machine \
  --state-machine-arn arn:aws:states:${AWS_REGION}:${ACCOUNT_ID}:stateMachine:financeflow-monthly-report

# Lambda
aws lambda delete-function --function-name financeflow-fetch-companies
aws lambda delete-function --function-name financeflow-generate-report
aws lambda delete-function --function-name financeflow-send-emails
aws lambda delete-function --function-name financeflow-notify-completion

# DynamoDB
aws dynamodb delete-table --table-name financeflow-companies
aws dynamodb delete-table --table-name financeflow-report-jobs

# S3
aws s3 rm s3://financeflow-reports-${ACCOUNT_ID} --recursive
aws s3 rb s3://financeflow-reports-${ACCOUNT_ID}

# SNS
aws sns delete-topic --topic-arn arn:aws:sns:${AWS_REGION}:${ACCOUNT_ID}:financeflow-report-notifications

# IAM
aws iam delete-role-policy --role-name FinanceFlowSchedulerRole --policy-name StepFunctionsExecution
aws iam delete-role --role-name FinanceFlowSchedulerRole

学習のポイント

1. EventBridge Schedulerの活用

cron式による定期実行をサーバーレスで実現。CloudWatch Eventsより柔軟で、タイムゾーン対応も標準でサポート。

2. Step Functions Map stateによる並列処理

大量データを効率的に並列処理する方法。MaxConcurrencyでLambda同時実行数を制御し、リソース制限内で最大効率を実現。

3. エラーハンドリングとリトライ

Step Functionsの Retry / Catch 機能で、自動リトライと失敗時のフォールバックを実装。個別失敗が全体に影響しない設計。

4. SaaSのマルチテナント処理パターン

数千社のデータを効率的に処理するアーキテクチャ。テナント分離、並列処理、進捗管理の実践的なパターン。

5. PDFレポート生成のサーバーレス化

Lambda Layerを活用してPDF生成ライブラリを組み込み、サーバーレスでドキュメント生成を実現。