自分用メモ

プログラミングとかのメモを書きたいです

AWSのLambdaからSES(Amazon Simple Email Service)を使ってメール送信

やったこと

  • AWSのLambdaからSES(Amazon Simple Email Service)を使ってメール送信
  • 5分にいちどメール送信

背景

  • AWS料金は、Cost ExplorerのBudgetからアラートを投げることもできるけれど、強制的に定期的に通知するような仕組みが欲しいと思った。
  • 必要そうなことはざっくり下記。
    • lambdaでコードを書いて実行できること(できればpythonで)
    • lambdaで定期実行すること(これはなんか簡単にできそうな印象)
    • lambda でメール送信すること
    • 現在の使用料金の情報を取得すること (今回の対象外)

参考サイト

手順

1.SES(Amazon Simple Email Service)の設定

  • 使用するアドレス(送信元にしたいもの)を登録する
  • 詳細は参考URL参照。

2.関数の定義の作成

  • Pythonで作成する
  • ロールは新規に作成してみた。ポリシーは下記の2つとしたが、もっと絞ったほうが良いのかも。
    • AmazonSESFullAccess
    • AWSLambda_FullAccess
    • AWSLambdaBasicExecutionRole
      • これがないと「モニタリング」で「アクセス権限が見つかりません お使いの関数には、Amazon CloudWatch Logs に書き込むためのアクセス権限がありません。ログを閲覧するには、その実行ロールに AWSLambdaBasicExecutionRole の管理ポリシーを追加します。」と表示される。

3.ソースの記載

  • 参考URLのまま。
import boto3
import json

SRC_MAIL = "送信元のメルアド"
DST_MAIL = "送信先のメルアド"
REGION = "ap-northeast-1"

def send_email(source, to, subject, body):
    print("-- start : send_mail --")
    client = boto3.client('ses', region_name=REGION)

    response = client.send_email(
        Source=source,
        Destination={
            'ToAddresses': [
                to,
            ]
        },
        Message={
            'Subject': {
                'Data': subject,
            },
            'Body': {
                'Text': {
                    'Data': body,
                },
            }
        }
    )
    return response

def lambda_handler(event, context):
    email = "テスト配信"
    message = json.dumps(event, indent = 4)
    r = send_email(SRC_MAIL, DST_MAIL, email, message)
    return r    

4.定期実行

  • Lambdaのトリガーで、EventBridge(CloudWatch Events)を選択する
  • ルール名、ルールの説明を入れる
  • ルールタイプは「スケジュール式」
  • スケジュール式は「rate(5 minutes)」
    • とりあえず5分おきに実行とする。

参考情報

  • テスト実行する際にはパラメータも渡せる。
  • 標準出力で出しておけば、後でそれが見える。
  • 過去に実行された分もモニタリングで見える

スクリーンショット

f:id:ebinafactory:20211118205932p:plain
AWS Lambda関数の作成

f:id:ebinafactory:20211118213359p:plain
ロール

f:id:ebinafactory:20211118211007p:plain
SES画面。メルアドを登録する。

f:id:ebinafactory:20211118211652p:plain
Lambdaのトリガーで定期実行