🌟

LambdaからSNS経由でメール通知する

2023/09/18に公開

はじめに

実務で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