皆様こんにちは。
今回はCloudFormationを利用して高可用性アーキテクトの構築をしていきます。
この記事ではCloudFormationよりSNSの設定を行います。
このブログはCloudFormationによるSNSの設定をする上での知識を記事としてまとめ再確認し、皆様と共有するため作成します。

1.高可用性アーキテクト構築目次

目次はこちら

2.SNSとは

Amazon Simple Notification Service (Amazon SNS) は、配信者から受信者 (または生産者から消費者) へのメッセージ配信を提供するマネージドサービスです。発行者は、論理アクセスポイントおよび通信チャネルであるトピックにメッセージを送信することで、受信者と非同期的に通信します。クライアントは、Amazon Kinesis Data Firehose、Amazon SQS、AWS Lambda、HTTP、E メール、モバイルプッシュ通知、モバイルテキストメッセージ (SMS) などのサポートされたエンドポイントを使用して SNS トピックにサブスクライブし発行されたメッセージを受信できます。
引用:Amazon SNS とは

エンドポイント

エンドポイントは通知の配信対象のことです。
EメールやAmazon Kinesis Data Firehose、Amazon SQS、AWS Lambda等といったAWSサービスも指定できます。

SNSトピック

SNSトピックは、複数のエンドポイントを一つのグループとしてまとめたものです。
トピックに通知メールを発行すると、登録しているエンドポイントに通知を配信することができます。

サブスクリプション

サブスクリプションは指定したエンドポイントをSNSトピックにサブスクライブ(登録)するデータです。

今回はCloudWatchAlarmのアラームの通知を自分のメールアドレスに配信したいためSNSを使用します。

類似サービスとしてフルマネージドのキューイングサービスの「Amazon SQS」があげられます。

3.フロー図

file
カスタムメトリクスを含むCloudWatchAlarmのアラームの通知を自分のメールアドレスに配信するには上記の図の構成でします。

今回はSNS設定のフローを以下で紹介します。

  1. CloudWatchAlarmのアラームの通知を受け取るSNSトピックを作成します。
  2. SNSトピックにエンドポイントを登録するためサブスクリプションの作成をします。

4.SNS設定

SNS構築の全体のソースコードは下記の通りです。
ファイル名「ut-SNS-CF」

AWSTemplateFormatVersion: "2010-09-09"
Resources:
#SNSトピック作成
  SNSTopic:
    Type: "AWS::SNS::Topic"
    Properties:
      TopicName: "ut-SNS"
      Tags: 
      - 
        Key: "Name"
        Value: "ut-SNS"

#サブスクリプション設定
  Subscription:
    Type: "AWS::SNS::Subscription"
    Properties:
      TopicArn: !Ref SNSTopic
      Endpoint: "自分のメールアドレス"
      Protocol: "email"

#Outputsセクション設定
Outputs:
  SNSOutput1:
    Value: !Ref SNSTopic
    Export:
      Name: ut-sns-topic-arn

SNSトピック作成部分のソースコードとサブスクリプション設定部分のソースコード、アウトプットセクション設定部分のソースコードをそれぞれ説明していきます。

4-1.SNSトピック作成

まずは通知メールの配信先となるSNSトピックを作成します。
SNSトピック作成のソースコードは下記の通りです。

#SNSトピック作成
  SNSTopic:
    Type: "AWS::SNS::Topic"
    Properties:
      TopicName: "ut-SNS"
      Tags: 
      - 
        Key: "Name"
        Value: "ut-SNS"

設定項目は下記の通りです。

使用するオプション 設定値 説明
TopicName ut-SNS 設定したいトピックネームを入力
Tags Key=Name,Value=ut-SNS 設定したいタグを指定

これでSNSトピック作成のソースコードの説明は以上です。

4-2.サブスクリプション設定

次にエンドポイントに自分のメールアドレスを指定するためにサブスクリプションを設定します。
サブスクリプション設定のソースコードは下記の通りです。

#サブスクリプション設定
  Subscription:
    Type: "AWS::SNS::Subscription"
    Properties:
      TopicArn: !Ref SNSTopic
      Endpoint: "自分のメールアドレス"
      Protocol: "email"

設定項目は下記の通りです。

使用するオプション 設定値 説明
TopicArn !Ref SNSTopic  先ほど作成したSNSトピックのARNを参照
Endpoint 自分のメールアドレス 配信先に自分のメールアドレスを設定します。
Protocol email 使用するプロトコルを指定します

これでサブスクリプション設定のソースコードの説明は以上です。

4-3.Outputsセクション設定

Outputsセクション設定のソースコードは下記の通りです。

#Outputsセクション設定
Outputs:
  SNSOutput1:
    Value: !Ref SNSTopic
    Export:
      Name: ut-sns-topic-arn

設定項目は下記の通りです。

使用するオプション 設定値 説明
Value !Ref SNSTopic  SNSトピックのARNを参照
Name ut-sns-topic-arn 名前を付けて出力

これでOutputsセクション設定のソースコードの説明は以上です。

4-4.サブスクリプションを有効化

スタック作成後、指定したメールアドレスにメールが届きますのでconfirmしてください。
file

サブスクリプションを有効化できました!
file

これでSNSの設定は完了しました。

5.検証

実際に作成したSNSトピックからエンドポイント(自分のメールアドレス)に対してメッセージが配信できるかの検証を行っていきたいと思います。

CLIから[aws sns publish]コマンドを使用してメッセージを送信します。

使用するオプション 設定値 説明
--topic-arn arn:aws:sns:ap-northeast-2:xxxxx:ut-SNS SNSトピックのARNを入力
--message  "test message" 配信するメッセージの内容を入力

入力

aws sns publish `
    --topic-arn "arn:aws:sns:ap-northeast-2:xxxxx:ut-SNS" `
    --message "test message"

出力

{
    "MessageId": "6d150d8f-082f-5e71-9f15-56a4453e9eff"
}

次に自分のメールアドレスにメッセージが配信されているかの確認をします。

file

メッセージが配信されていることを確認できました。

これで検証を終わります。

6.感想

設定自体は躓くことなくできましたが、サブスクリプションの言葉の意味を理解するのに少し時間がかかりました。
次回もよろしくお願いします。

7.参照

AWS CloudFormation – AWS::SNS::Topic
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html
AWS CloudFormation – AWS::SNS::Subscription
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-sns-subscription.html

Last modified: 2022-06-22

Author