はじめに

S3バケットにファイルがアップロードされたら自動的に処理を行い、最終的にメールでファイルを送信する仕組みをつくってみました。

事前準備

使用するサービス

  • Amazon S3:ファイル格納用
  • AWS Glue:ファイル前処理やETL用(必要な場合)
  • Amazon EventBridge:イベントトリガー
  • AWS Lambda:メール送信ロジック(ファイル添付以外の単純なメール送信はAmazon SESのみでも可能)
  • Amazon SES:メール送信

IAMロールの準備

Lambda に対して以下のアクセス許可があるロールを作成(追加のロールが必要な場合もある)

  • s3:GetObject
  • ses:SendEmail
  • logs:*

Glueに対して以下のアクセス許可があるロールを作成(追加のロールが必要な場合もある)

  • Glue に S3 読み取り・書き込みのパーミッション

S3バケットの作成と設定

  1. AWSコンソールからS3バケットを作成。(例:my-upload-bucket
  2. バケットポリシーで、GlueとLambdaが読み取れるように設定。

AWS Glue ジョブの作成(任意)

ファイルの前処理(CSVのクレンジングなど)が不費用な場合は読み飛ばしてください。

  1. Glueコンソールでジョブを作成。
  2. ソースとしてS3を指定。
  3. 必要な変換処理(例:CSV→JSON)を記述。
  4. 出力先として別のS3バケット or 同じバケットを指定。

EventBridge の設定(イベントルール)

  1. EventBridge コンソールにアクセス。
  2. 新しいルールを作成。
  3. イベントソース: S3
    • パターン:オブジェクト作成(例:PutObject)
    • 対象バケット:my-upload-bucket
  4. ターゲットに Lambda 関数を指定。

Lambda 関数の作成

  1. Lambda コンソールで新しい関数を作成。(例:send-email-function
  2. 環境変数(任意、直接コードに書き込み可能)
    • RECIPIENT_EMAIL:送信先メールアドレス
    • SENDER_EMAIL:SESで認証済みの送信元メールアドレス
  3. Lambdaコード作成(コードは省略)

SES(Simple Email Service)の設定

  1. メール認証(Verify Email Address)
    • SENDER_EMAIL と RECIPIENT_EMAIL を SESで認証。
  2. サンドボックス解除(本番利用時)
    • SESサポートに申請して「Productionモード」へ移行。

動作確認手順

  1. my-upload-bucket にファイルをアップロード。
  2. EventBridge がトリガーされ、Lambda 実行。
  3. SES を通じてメールが送信される。

最後に

Glueジョブが不要な場合、EventBridge → Lambda だけでも十分構築可能です。定期的にS3のファイルをレポート送信したい場合などにこの自動化がおすすめです。