やったこと
- 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.ソースの記載
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)」
参考情報
- テスト実行する際にはパラメータも渡せる。
- 標準出力で出しておけば、後でそれが見える。
- 過去に実行された分もモニタリングで見える