AWS Step FunctionsでAmazon SES v2メール送信を試してみた

AWS Step FunctionsでAmazon SES v2メール送信を試してみた

Clock Icon2025.06.11

はじめに

AWS Step Functionsからクエリ言語JSONataを使用して、Amazon SES v2でメール送信を試してみました。

SES v1のSendMailでJSONPathを使用する方法については、以下の記事が参考になります。
https://dev.classmethod.jp/articles/sending-an-email-using-amazon-ses-from-the-aws-step-functions-state-machine/

今回は、SES v2のSendMailでクエリ言語JSONataを使用します。SES v1とv2では、使用する引数が異なる点にご注意ください。

v1とv2の違いについては、以下の記事が参考になります。基本的には、v2の利用が推奨されています。
https://dev.classmethod.jp/articles/amazon-ses-send-v1-v2/

なお、ステートマシンのクエリ言語は、従来のJSONPathではなく、より高度なデータ操作が可能なJSONataの使用が推奨されています。

SESセットアップ

Amazon SESは初期状態ではサンドボックス環境となっており、認証済みのメールアドレスに対してのみメール送信が可能など制限があります。
今回は、サンドボックス環境を解除します。

サンドボックス環境の解除方法については、AWSドキュメントや以下の記事を参考にしてください。
https://dev.classmethod.jp/articles/amazon-ses-production-access-request/

今回は、ドメインが設定済みであることを前提として、以下の設定でIDを作成しました。

  • IDタイプはドメイン
  • DKIMの有効化
  • カスタム MAIL FROM ドメインの設定

cm-hirai-screenshot 2025-06-03 8.40.23

ステートマシン作成

以下のコードでステートマシンを作成します。本文は生成AIに考えてもらったサンプル文章です。

{
  "Comment": "SES v2でメール送信を行うStep Functions",
  "StartAt": "SendEmail",
  "States": {
    "SendEmail": {
      "Type": "Task",
      "Arguments": {
        "FromEmailAddress": "xx",
        "Destination": {
          "ToAddresses": [
            "example1@example.com"
          ],
          "CcAddresses": [
            "example2@example.com"
          ],
          "BccAddresses": [
            "example3@example.com"
          ]
        },
        "Content": {
          "Simple": {
            "Subject": {
              "Data": "【重要】システムメンテナンス完了のお知らせ",
              "Charset": "UTF-8"
            },
            "Body": {
              "Text": {
                "Data": "〇〇様\n\nいつもお世話になっております。\nシステム運用チームです。\n\n本日実施しておりましたシステムメンテナンスが無事完了いたしましたので、ご報告させていただきます。\n\n■ メンテナンス期間\n2024年1月15日 02:00 ~ 05:00\n\n■ 作業内容\n・データベースの最適化\n・セキュリティパッチの適用\n・パフォーマンス改善\n\n現在、すべてのサービスが正常に稼働しております。\nご利用の際にご不明な点がございましたら、お気軽にお問い合わせください。\n\n今後ともよろしくお願いいたします。",
                "Charset": "UTF-8"
              }
            }
          }
        },
        "ReplyToAddresses": [
          "xx"
        ]
      },
      "Resource": "arn:aws:states:::aws-sdk:sesv2:sendEmail",
      "End": true
    }
  },
  "QueryLanguage": "JSONata"
}

cm-hirai-screenshot 2025-06-10 14.54.05

設定のポイント

  • FromEmailAddress:送信者のメールアドレス(認証済みドメインのもの)
  • Destination:宛先の設定(To、Cc、Bccが指定可能)
  • ReplyToAddresses:返信先アドレス(省略可能)
  • Resource:SES v2のAPI呼び出しを指定
  • QueryLanguage:JSONataを使用することを明示

実際の環境では、FromEmailAddressや各宛先アドレス、ReplyToAddressesは、ご自身の認証済みメールアドレスやドメインに置き換えてください。

詳細なAPIパラメータについては、以下のAWSドキュメントを参照してください。
https://docs.aws.amazon.com/ses/latest/APIReference/API_SendEmail.html

IAMポリシーの設定

ステートマシンがSESを呼び出すために、IAMポリシーを手動で作成する必要があります。

cm-hirai-screenshot 2025-06-10 13.42.47

以下のIAMポリシーをステートマシンのIAMロールに適用します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ses:SendEmail"
            ],
            "Resource": "*"
        }
    ]
}

なお、Raw形式のメール(MIMEメッセージ)を送信する場合は、ses:SendRawEmailの権限が必要になります。

実行して動作確認

作成したステートマシンを実行して、メール送信が正常に動作することを確認します。

ステートマシンの実行画面で「開始」ボタンをクリックし、実行を開始します。実行が成功すると、以下のように緑色で「成功」が表示されます。

cm-hirai-screenshot 2025-06-10 15.07.47

実際に指定したメールアドレスにメールが送信されていることが確認できました。

cm-hirai-screenshot 2025-06-10 14.50.06

メールの件名や本文も、ステートマシンで定義した内容通りに送信されています。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.