0
0

サーバーレスCSV出力・ダウンロードの構成

Last updated at Posted at 2024-10-04

こんにちは!
普段Web開発や保守をしており、
サーバーレス構成で開発を行ったので、その記事を記載します。

はじめに

今回は、サーバーレスアーキテクチャを活用した出力システムの構成についてご紹介します。
サーバーレスアーキテクチャは、スケーラビリティとコスト効率が高いため、多くの企業で採用されています。
本記事では、AWSのStep Functions、Lambda、RDS、S3を使用して、データを取得し、CSV形式でS3に保存した後、CloudFrontの署名付きURLでメール送信するシステムの構築について詳しく解説します。

構成図

【資料用】記事用_構成図2.png

各サービスの役割

  • Step Functions
    • 一連の処理フローをオーケストレーションし、各サービス間の連携を管理します。
  • Lambda
    • 各種処理を担当します。
  • RDS
    • ログを保存するリレーショナルデータベースサービスです。
  • S3
    • 生成されたCSVファイルを保存するストレージサービスです。
  • CloudFront
    • S3に保存されたファイルへの署名付きURLを提供し、安全かつ効率的に配信します。
  • SES
    • メール送信サービスで、通知を送信します。
  • ECS Fargate
    • フルマネージドのコンテナオーケストレーションサービスで、コンテナ化されたアプリケーションのデプロイと管理を行います。
  • Secrets Manager
    • 機密情報を安全に管理します。

システム詳細

  1. ユーザー操作(ECS・Fargate)
    ユーザーが画面を通じて処理リクエストします。
    StepFunctionsの呼び出し方は複数あり、今回はAWS SDK を使用しました。

  2. CSV生成(Lambda)
    Lambda関数がRDSからデータを取得し、CSVファイルを生成しS3に出力します。

  3. 署名付きURLの生成とメール送信(Lambda)
    アップロード完了後、CloudFrontの署名付きURLを生成し、そのURLを含むメールをSESを使用してメール送信します。

  4. エラー通知(Lambda)
    処理の途中でエラーが発生した場合、それを検知して通知します。

セキュリティの強化

CloudFrontの署名付きURLを活用し、S3にアップロードされたCSVファイルへのアクセスを制限します。署名付きURLは、指定した期限が過ぎると無効になり、セキュリティを強化します。これにより、ユーザーは一時的にしかファイルにアクセスできず、個人情報の漏洩リスクを軽減します。具体的には、署名付きURLの有効期限を「通知後3時間」に設定しています。

エラーハンドリングと通知

ログ出力処理がLambdaの最大実行時間である15分を超える場合、タイムアウト通知がメールでユーザーに送信され、再確認を促します。また、タイムアウト以外のエラーが発生した場合は、運用チームにチャット通知が送られ、迅速に対応できる体制を整えています。

システムは最大6回まで再試行を行い、それでも失敗が続いた場合にのみ通知が送信されます。

サーバーレス技術の活用

今回のシステムでは、サーバーレス技術を最大限に活用しています。特にAWS Lambdaは、リクエストに応じて自動的にスケールするため、データが少量でも大量でも効率的に処理可能です。また、Step Functionsは、各処理フローをスケーラブルにオーケストレーションする設計になっており、柔軟に対応可能です。

コスト面でも、サーバーを常時稼働させる必要がなく、オンデマンドで必要なリソースを使用することで効率的な運用が可能です。LambdaやStep Functionsは、実行時間に基づいて課金されるため、無駄なコストを抑えられます。

AWS SAMによるデプロイ

AWS SAMを使用してStep FunctionsとLambdaをデプロイしました。これにより、サーバーレスアプリケーションのデプロイと管理が効率化され、YAML形式のテンプレートを使用して、Lambda関数の定義やStep Functionsのワークフローを一括でデプロイ可能です。

SAMを活用することで、リソース管理がコードとして一元化され、人為的なミスが減少し、属人化を防ぐことが期待できます。

まとめ

今回紹介した出力システムは、サーバーレスアーキテクチャを基盤としたスケーラビリティ、コスト効率、セキュリティを考慮した構成となっています。ユーザーからのリクエストに基づき、RDSからデータを取得し、それをS3にアップロードし、CloudFrontの署名付きURLを生成してメールで送信するという一連のプロセスを実現しました。

エラーやタイムアウトが発生した際には迅速に適切な通知が行われ、システムの信頼性が高まります。この仕組みにより、ユーザーは安心してログ出力を利用でき、スムーズな運用が可能となります。

今後もサーバーレス技術を活用し、さらなる改善を図っていきたいと思います。

0
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
0
0