1
0

AWS Lambda/SNSを連携し、メール通知を行ってみる[01]

Last updated at Posted at 2024-04-30

こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚です。

今回はAWS LambdaとSNS(Simple Notification Service)を使ってメール通知機能を実装してみたいと思います。

最終的に構築するイメージ

何回かに分けて、以下の環境をつくっていきたいと考えております。
Cloud9で作ったDjango環境でS3にアップロードするようなWebページを作成。
ユーザはそれを使ってS3にデータをアップロードすると、S3がイベント通知をSQSに行い、SQSがLambdaをキック。LambdaがSNSを呼び出して登録したメールアドレスにメールを送付します。
aws-django01-ページ6.drawio.png

この記事ではLambdaとSNSだけ環境を構築していきます。

全体の流れは以下にまとめています。

構築

SNS

AWS管理コンソールにログインしてSNSの管理画面にアクセスします。
右にあるトピックの作成の下にある次のステップを押下します。
image.png
以下の設定で作成します。タイプと名前以外はデフォルトで問題ありません。

  • タイプ:スタンダード
  • 名前:qiita-sns

screencapture-ap-northeast-1-console-aws-amazon-sns-v3-home-2024-04-30-19_03_59.png
作成後サブスクリプションを確認できるタブがありますので、それを押下しサブスクリプションの作成を押下します。
image.png
以下の設定で作成します。

  • プロトコル:Eメール
  • エンドポイント:任意のメールアドレス

2024050103.png
ステータスが保留中の確認となっていることがわかります。これを解消します。
2024050104.png
入力したメールアドレス宛にSNSからメールが届いています。
リンクとなっているConfirm Subscriptionを押下します。
image.png
正常に登録が完了すると以下のような画面が表示されます。
2024050105.png
ステータスが確認済みになります。
SNSの設定は以上です。
2024050106.png

Lambda

Lambdaを作っていきます。関数の管理を押下します。
image.png
関数の作成を押下します。
image.png
以下の設定で作成します。

  • 一から作成
  • 関数名:qiita_lambda
  • ランタイム:Python 3.12
  • 実行ロール:基本的なLambdaアクセス権限で新しいロールを作成

screencapture-ap-northeast-1-console-aws-amazon-lambda-home-2024-04-30-19_13_59.png
以下のような画面が表示されます。
Lambdaアイコンの右に表示されている送信先を追加を押下します。
2024050108.png
以下の設定で保存します。
必要なアクセス許可を追加にチェックがついていることを確認します。
恐らくこれにチェックを入れることでIAM roleにSNSへの権限がアタッチされるのかなと。。。

  • ソース:非同期呼び出し
  • 条件:正常
  • 送信先タイプ:SNSトピック
  • 送信先:qiita-sns

2024050107.png
以下のようにLambdaの右側にSNSが表示されます。
2024050109.png
このタイミングでLambdaのroleにSNSに関するものが追加されています。
アクションのところに記載されているAllow:snsPublishがあることでLambdaからSNSにメッセージ送信が可能となるようです。
リソースのところにモザイクを入れていますが、SNSのArnが表示されています。
2024050110.png
Lambdaのコードを書き換えます。
デフォルトでは以下の設定となっています。
image.png
これを以下のように書き換えます。TopicArnは連携したいSNSのArnを持ってきてください。Subjectはメールの件名。Messageはメールの本文を示します。

import boto3
client = boto3.client('sns')

def lambda_handler(event, context):
    
    params = {
    'TopicArn': '★SNSのArnをここに張り付ける★',
    'Subject': 'S3+SQS+Lambda+SNS環境を構築する',
    'Message': '色々覚えることが多くて大変だ~汗'
    }
    
    client.publish(**params)

変更したら上にあるDeployを押下します。
これをしないと変更が反映れません。
最初Deployをしてなくて「なんで変更されない!?」となりました(1敗)
Deployを押した後青色のTestボタンを押下します。
2024050101.png
テストを作成する画面が表示されます。
テストの名前を適当につけて保存してください。
この後、ひとつ前の画面に自動で移動しますので改めてTestボタンを押下してください。
Pasted image 20240430192550.png
メールが来ているかを確認します。
Gmailで試験をしている場合、プロモーションのところにメールが飛んできているはずです。
今回はここまで!
2024050102.png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0