2023/11/26に公開
2023/12/16
今回はLambdaとSNSを使って、自分のメールアドレス宛にメールを送るハンズオンを行います。アーキテクチャは以下のようになります。
このハンズオンを行う事で、Lambda・SNSの実際の扱い方を学ぶことができます。また本構成をCloudformation
というインフラコード化ツールを使ったハンズオンも別記事で紹介する予定です。そちらも併せてチャレンジしてみてください!
以下の項目を準備してください。
<必須>
<準備しているとGood>
※AWSアカウント作成方法は【初心者用】AWSアカウント作成方法と最初にやるべき2つのことを参考にして頂けます。
SNSでは、メッセージをトピックというグループに分けます。このトピックをサブスクライブするとsnsで通知されるようになります。例えばある会社の新着情報をメッセージとして送るcompany-new-topic
というトピックがあり、それをaaa@gmail.com
というメールアドレスがそのトピックをサブスクライブしていると、aaa@gmail.com宛てにcompany-new-topicのメッセージが送られるようになるというわけです。
ここからはLambdaで送るメッセージのトピックを作成していきます。
①AWS上でSNSと検索して、「トピック」をクリックします。
②「トピックの作成」をクリックします。
③タイプは「スタンダード」を選択し、名前を表示名は任意で記入します。
④「トピックの作成」をクリックします。これでトピックが作成されます。
今回はメールが送信されるようにしたいです。そのため、任意のメールアドレスをサブスクリプションに登録して、サブスクライブできるようにしましょう。
①トピック作成後の画面で、「サブスクリプションの作成」をクリックします。
②トピックARNが先ほど作成したトピックであることを確認し、プロトコルは「Eメール」、エンドポイントに任意のメールアドレスを入力し、「サブスクリプションの作成」をクリックします。
③遷移後の画面で、ステータスが保留中の確認となっています。メールアドレス側でサブスクリプションを認証しないといけません。次のステップで登録したメールアドレスを開いてください。
④「AWS Notification - Subscription Confirmation」というメールが届いていると思いますので、「Confirm subscription」をクリックします。
⑤以下の画面に遷移すればOKです。
⑥再度AWSコンソールに戻り、「サブスクリプション」をクリックします。
⑦作成したトピックに対して、エンドポイントが任意のメールアドレスになっていればSNSの構築は完了です!
ここからは実際にメッセージを作成して、SNSトピックに送るためのLambda関数を構築していきます。Pythonを使って簡単なメッセージを作成していきましょう。
①AWS上でLambdaと検索して、「関数の作成」をクリックします。
②一から作成と選択し、任意の関数名を記入します。ランタイムはPython 3.11
を選択し、アーキテクチャはx86_64
を選択し、「関数の作成」をクリックします。
③Lambda関数が作成されました。
Lambda関数に以下のコードを記述します。****の部分はご自身のAWSのIAMIDに変更してください。
import boto3
client = boto3.client('sns')
def lambda_handler(event, context):
params = {
'TopicArn': 'arn:aws:sns:ap-northeast-1:******:sns-for-lambda-test',
'Subject': 'Test Mail',
'Message': 'これはlambda-for-sns-testのテストメールです。'
}
client.publish(**params)
LambdaがSNSトピックにメッセージを送信するための権限が必要です。IAMについてはAWS IAMポリシー/ユーザー/グループ/ロールの違いを解説してみたを参考にしてください。
①Lambda関数の「設定」をクリックします。
②アクセス権限から、ロール名をクリックします。
③許可タグの「許可を追加」の「ポリシーをアタッチ」をクリックします。
④検索欄に「SNS」と入力し、AmazonSNSFullAccess
をクリックし、「許可を追加」をクリックします。
※SNSFullAccessは過剰権限ですが、構築を簡単にするために使用しております。実際にサービスを運用する場合は適切な権限を付与する必要があります。
⑤許可ポリシーにAmazonSNSFullAccess
が存在することを確認します。
最後にLambdaを動かして、実際にメールを送信してみます。
①Lambdaのコードに戻り、先ほどのコードで「Deploy」をクリックします。
②「テスト」タブをクリックします。
③イベント名に任意の名前を設定し、「テスト」をクリックします。
④画像のような表示が出れば成功です。
⑤メールを確認すると、画像のように正しくメールが届いています!実装できました!
本記事では、LambdaとSNSを使ったメール送信のハンズオンを行いました。LambdaもSNSも非常に簡単に設定できるため、メールを送る際の第一候補になるかと思います。またコストパフォーマンスに優れている点もメリットです。
今回はメール送信をしましたが、サブスクライブするエンドポイントを変更すれば、メール以外でも通知を送ることが可能です。別のエンドポイントに通知を送る際に、今度は違ったやり方で実装するなどすると、技術力の幅が広がると思います。様々なアプローチで試してみてください。
引き続きAWSを使ったコンテンツを執筆していきますので、お楽しみに!お疲れ様でした。
目次