9
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CloudWatchのSNS通知をまとめてみる

Posted at

以下の図のように複数AWSアカウントの複数リージョンでCloudWatchのアラームを利用している。
何も考えずに各環境でSNSを設定してたら、サブスクライブやメールアドレス変更が大変になってしまったのでまとめられないか考えてみた。

snsバラバラ (1).png

AWSアカウント間でSNSを共通に利用する

別アカウントのSNSを利用する

別アカウントのSNSTopic利用 (1).png

上の図のように別アカウントで作成されたSNS アプリを利用することでがきる。
Management ConsoleだとSNS Topicを作成してTopic Policy編集でPublish Messagesを許可するユーザをAWSユーザにして利用したいAWSアカウントのIDを指定する感じでいける。

ただし、CloudWatchの利用では以下のことに注意する必要がある。

  • 同じリージョンのSNS Topicを作成する必要がある。
  • 別アカウントのSNS Topicを指定する場合はManagement Consoleからはできない(aws cliなどでは可能)。

別アカウントにSubscriptionだけ作成する

別アカウントにSubscription作成 (2).png

上の図のようにSNSのSubscriptionだけ別アカウントに作成できる。
Management ConsoleだとSNS Topicを作成してTopic Policy編集で利用するAWSアカウントIDに対してsubscribeを許可し、許可したアカウントでSubscriptionを作成する感じでいける。

同じアカウントにSubscriptionの設定はまとめられる。
ただし、SubscriptionはTopic毎に作成する必要があるため、あるアカウントのTopicと別のアカウントのTopicに対するSubscriptionの2つになる。

リージョン間でSNS通知をまとめる

SQSでまとめる

AWS - SNSから他のアカウントのSQSへメッセージを送るのをやってみる - Qii参照
ただし、SQSから取り出して通知するシステムがいりエコじゃない感じ。

Lambdaでまとめる

SNSとlambda.png

上の図のようにSNSから別のRegionのlambda Functionが利用できるので以下のようなFunctionで通知をまとめる。

console.log('Loading function');

var AWS = require ('aws-sdk')

exports.handler = function(event, context) {
    console.log(JSON.stringify(event, null, 2));
    console.log('From SNS:', event.Records[0]);
    
    var sns = new AWS.SNS({region: 'Region指定'});
    var params = {
        TopicArn: 'SNS Topic ARN指定',
        Subject: event.Records[0].Sns.Subject,
        Message: event.Records[0].Sns.Message
    };
    sns.publish(params, function(err, data) {
       if (err) console.log(err, err.stack);
       else console.log(data);
    });
    
    context.succeed();
};
9
11
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
9
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?