この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
皆様こんにちは。
Terraformを利用して、AWSで高可用性アーキテクトの構築をしていきます。
今回はSNSを作成していきます。
1.高可用性アーキテクト構築目次
2.SNSの概要
Amazon Simple Notification Service (Amazon SNS) は、配信者から受信者 (または生産者から消費者) へのメッセージ配信を提供するマネージドサービスです。発行者は、論理アクセスポイントおよび通信チャネルであるトピックにメッセージを送信することで、受信者と非同期的に通信します。クライアントは、Amazon Kinesis Data Firehose、Amazon SQS、AWS Lambda、HTTP、E メール、モバイルプッシュ通知、モバイルテキストメッセージ (SMS) などのサポートされたエンドポイントを使用して SNS トピックにサブスクライブし発行されたメッセージを受信できます。
SNSは、トピックという単位で情報を管理します。システム管理者は、メッセージを管理する単位でトピックを作成します。トピックの利用者としては、通知する人(Publisher)と通知される人(Subscriber)がいます。Subscriberは、利用するトピックおよび受け取るプロトコルを登録します。これを購読と呼びます。
Publisherはトピックに対してメッセージを配信するだけで、Subscriberのこともプロトコルのことも意識する必要はありません。
類似サービスとしてはSESがあります。
SNS | SES |
---|---|
プッシュ型の通知サービスで、システムのイベント通知の中核を担う。様々な通信プロトコルに対応している | Eメール送信サービスで、SMTPプロトコルを利用する |
3.フロー図
フロー図は下記の通りです。
カスタムメトリクスを含むCloudWatchAlarmのアラームの通知を自分のメールアドレスに配信するために、SNSを作成します。
4.SNS作成
SNSを作成していきます。
4-1.SNSトピック作成
はじめに、通知メールの配信先となるSNSトピックを作成します。
ソースコードは下記の通りです。
# 1.SNSトピック作成
resource "aws_sns_topic" "higa_updates" {
name = "higa-sns-topic"
}
設定項目は下記の通りです。
使用するオプション | 設定値 | 説明 |
---|---|---|
name | higa-sns-topic | トピック名 |
上記より、SNSトピックの作成ができました。
4-2.サブスクリプション作成
次に配信先を指定するためにサブスクリプションを作成します。
ソースコードは下記の通りです。
# 2.サブスクリプション作成
resource "aws_sns_topic_subscription" "higa_updates_email_target" {
topic_arn = "arn:aws:sns:ap-southeast-1:アカウントID:higa-sns-topic"
protocol = "email"
endpoint = "自分のメールアドレス"
}
設定項目は下記の通りです。
使用するオプション | 設定値 | 説明 |
---|---|---|
topic_arn | arn:aws:sns:ap-southeast-1:アカウントID:higa-sns-topic | SNSトピックのARN |
protocol | 使用するプロトコルをemailに指定 | |
endpoint | 自分のメールアドレス | データを送信するエンドポイント |
上記より、サブスクリプションを作成ができました。下記は届いたメールです。
5.検証
4-2のメールのリンクをクリックしてconfirmします。
下記より、confirmedが確認できました。
次に、作成したSNSトピックからエンドポイント(自分のメールアドレス)に対してメッセージが配信できるか検証します。
マネジメントコンソール画面から「A間損SNS」→「トピック」に移動して、メッセージを発行します。
件名、本文を入力してメッセージの発行をします。
エンドポイント(自分のメールアドレス)からメッセージが届いているか確認します。
上記より、メッセージの配信が確認できました。
6.まとめ
設定自体は簡単にできました。今後SNSを使ったイベント通知の方法等の知見を増やしていきたいです。
7.参考文献
- terraformの公式ドキュメント
Docs overview | hashicorp/aws | Terraform Registry