スポンサーリンク

AWSで定期的にメールを送信してみる

AWSで定期的にメールを送信してみるAWS
AWSで定期的にメールを送信してみる
スポンサーリンク

AWSで定期的なメールを送信する仕組みを作成してみたいと思います。

今回はAWSマネジメントコンソール上で実装します。

必要なAWSサービス

Simple Email Service

フルマネージド型のメール配信サービス

特徴

  • オンプレミスの簡易メール転送プロトコル (SMTP) システムを利用しない
  • 利用した分だけ払う従量課金制
  • DKIM認証でなりすまし対策が可能
Amazon SES(高可用性で低価格なEメール送信サービス)| AWS
Amazon SESは、デジタルマーケティング担当者やアプリケーション開発者がマーケティング、通知、トランザクションに関するEメールを送信できるように設計された、クラウドベースのEメール送信サービスです。Eメールを利用してお客様とのつながりを維持するあらゆる規模の企業を対象とした、コスト効率の高い信頼できるサービスです...

Lambda

サーバレスコンピューティングサービス

特徴

  • サーバを意識することなくプログラミング言語を用いて実行することができる
  • 他のAWSサービスと疎結合での連携ができる
  • 15分以上の時間がかかる処理ができない
AWS Lambda(イベント発生時にコードを実行)| AWS
AWS Lambda を使用すれば、サーバーのプロビジョニングや管理なしでコードを実行できます。課金は実際に使用したコンピューティング時間に対してのみ発生し、コードが実行されていないときには料金も発生しません。

Amazon EventBridge

イベント駆動型のサーバーレスアプリケーションサービス

特徴

  • イベントスケジュールを設定することで他のAWSサービスを実行できる
Amazon EventBridge (サーバーレスイベントバスでアプリ同士を簡単に接続) | AWS
Amazon EventBridge は、独自のアプリケーション、SaaS アプリケーションや AWS のサービスからデータを取り込み、そのデータをターゲットにルーティングする、サーバーレスイベントバスです。

Simple Email Service

SESを利用するにはE メールアドレスやドメインの登録と自身が所有していることを証明するための検証が必要です。

まずはSESにメールアドレスを登録していきます。

IDタイプにEメールアドレスを選択してメールアドレスを入力後にIDの作成をする。

画面右上の「新しい確認Eメールへ」を押下。

登録したメールアドレスの受信トレイに承認用URLが届くのでクリックする。

メールアドレスの検証に成功すると登録したメールアドレスでSESを利用可能となります。

Lambda

関数の作成

関数名とランタイムに使用したい言語を選択します。今回はpythonにしました。

関数名:任意の名前

ランタイム:任意の言語

作成完了しました。

次はメール送信処理関数を作成します。

import boto3

def lambda_handler(event, context):
        client = boto3.client(
        'ses',
        aws_access_key_id=event["accessKey"],
        aws_secret_access_key=event["secretKey"],
        region_name=event["region"]
    )
        response = client.send_email(
            Source=event["from"],
            Destination={
                'ToAddresses': [
                    event["to"],
                ],
            },
            Message={
                'Subject': {
                    'Data': 'title',
                    'Charset': 'UTF-8'
                },
                'Body': {
                    'Text': {
                        'Data': 'hello',
                        'Charset': 'UTF-8'
                    }
                }
            }
        )
        return response

boto3のドキュメント

SES - Boto3 1.34.113 documentation

参考にしたテンプレートです。

send_email - Boto3 1.34.113 documentation

さきほど作成したsendMailFunctionに定義した関数に渡す引数を定義していきます。

Configure Test Event

実際に使用する場合はvalue値を任意の値に変更してください。

{
  "from": "送信元メールアドレス",
  "to": "送信先メールアドレス",
  "accessKey": "アクセスキー",
  "secretKey": "シークレットキー",
  "region": "リージョン"
}

Amazon EventBridge

定期的にメールを送信するためにスケジューリングを作成します。

「トリガーを追加」を押下

EventBridge(CloudWatch Events)を選択する

「新規ルールを作成」を選択して、ルール名に任意の名前を入力

スケジュール方式を選択して、今回は毎日午後11時の45分,50分にlambdaが起動するように設定する

Cron式でのタイムゾーンはUTC時間のため、時間設定に注意が必要。

日本時間を設定する場合は、日本時間-9時間にしておく。

Cron式のドキュメント

Creating an Amazon EventBridge rule that runs on a schedule - Amazon EventBridge
Learn how to create an EventBridge rule that runs on a regular schedule.

EventBridgeの設定完了しました。

Cron式のタイムゾーンがわかりにくい人向けのやり方

設定からsendmailを選択するとeventbridgeルール編集画面に遷移します。

タイムゾーンがわかりにくい場合はEventBridgeの編集画面でローカルタイムゾーンを選択すると現在の起動時間の設定が見れるのでこちらで編集したほうがわかりやすいです。

設定した時間になるとEventBridgeが起動→sendMailFunction(lambda)が起動します。

送信先の受信トレイを開いて無事にメールが届いていたらスケジューリングの成功です。

タイトルとURLをコピーしました