LambdaからSNS経由でメール通知する
はじめに
実務でLambdaでエラーが起きたときに、すぐに検知する必要があったので、LambdaからSNS経由でメール通知するシステムを構築しました。今回はエラー処理は行っておりません。
構築環境
AWS:Lambda,SES,IAM
言語:Node.js
構築手順
1.メール送信の設定
AWSコンソールよりSNSを開く
①トピックの作成
タイプ:スタンダード
名前:test-sns-mail-alert
トピックの作成をクリック
②サブスクリプション作成
メールの送信先を設定する
①で作成したトピックを選択し、サブスクリプションタブをクリック
プロトコル:Eメール
エンドポイント:(受信するメールアドレスを入力)
サブスクリプションの作成をクリック
サブスクリプションを登録すると、登録したメールアドレス宛にに確認メールが届く
「confirm subscription」をクリックする
サブスクリプションが作成された段階では、ステータスが「保留中の確認」となっているが、上記が完了すると、「確認済み」となる
2.Lambda関数を作成
AWSコンソールよりLambdaを開く
①Lambda関数を作成
1から作成
関数名:TestErrorAlert
ランタイム:Node.js 18.x
アーキテクチャ:x86_64
デフォルトの実行ロールの変更を開く
実行ロール:基本的なLambdaアクセス権限で新しいロールを作成
関数の作成をクリック
3.SNSの権限設定
2-①で作成したロールに対して、SNSの操作権限を付与する
AWSコンソールよりIAMを開く
①ポリシーを作成
サービスの選択:SNS
アクション許可 > 書き込み > Publishをチェック
リソースはすべてを選択
次へをクリック
ポリシー名:test-sns-publish-policy
ポリシーの作成をクリック
JSONだと以下のようになる
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sns:Publish",
"Resource": "*"
}
]
}
②ロールにポリシーをアタッチ
2-①で作成したロールを検索する
※ロール名は、Lambda関数をクリック > 設定 > アクセス権限 > ロール名より分かる
ロールをクリックする
「ポリシーをアタッチします」をクリック
①で作成したポリシーを検索して、選択する
「ポリシーのアタッチ」をクリック
4.Lambdaでプログラムを書く
2で作成した関数をクリック
下記のプログラムを記載する
import SNS from "@aws-sdk/client-sns";
const snsClient = new SNS.SNSClient();
export const handler = async (event) => {
const subject = "テストメールタイトル";
const message = "Hello from SNS!";
const topicArn = "[ARN]";
try {
const response = await snsClient.send(
new SNS.PublishCommand({
Message: message,
Subject: subject,
TopicArn: topicArn,
})
);
console.log(response);
return response;
} catch (error) {
console.error(error);
throw error;
}
};
・[ARN]:1-①で作成したトピックのARNをコピペする
テスト
「テストタブ」から「テスト」をクリック
実行結果が成功になっていて、メール送信がされていれば成功
Discussion