Node.js からAmazon SNS APIをコールしてみた

Node.jsのプログラムからメール通知をしたかったので、お手軽に実装できそうなAmazon SNSを使用してみた。

事前準備

  • TOPIC作成とsubscribeはAWS Management Consoleから事前にやりました
  • IAMを使用して下記のような権限を絞ったユーザを作っておくとベターです(必須ではありません)
{
  "Statement": [
    {
      "Action": [
        "sns:Publish"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:sns:*:123456789012:nodetest"
    }
  ]
}

ライブラリのインストール

$ npm install aws-lib

でインストールされるライブラリを使用(https://github.com/livelycode/aws-lib)。
ここここを見て当たりをつけて、実装してみる。

送信テストしてみる

$ cat sns.js
const sys = require('sys'),
      aws = require('aws-lib');

sns = aws.createSNSClient('ACCESSKEY','SECRETKEY');
sns_args={
	'TopicArn':'arn:aws:sns:us-east-1:123456789012:nodetest',
	'Subject':'test desu',
	'Message':'this is test'
};

sns.call('Publish',sns_args,function(result) {
	console.log(result);
});

$ node sns.js
{ '@': { xmlns: 'http://sns.amazonaws.com/doc/2010-03-31/' },
  PublishResult: { MessageId: 'e16cbfd1-b8b8-413b-8898-aed24459861c' },
  ResponseMetadata: { RequestId: '495f13fa-e402-11e0-b040-0310cd74adef' } }

すぐにこんな感じのメールが来ます。

From: TEST TOPIC <no-reply@sns.amazonaws.com>
Subject: test desu

this is test

--
If you wish to stop receiving notifications from this topic, please click or visit the link below to unsubscribe:
https://sns.us-east-1.amazonaws.com/unsubscribe.html?SubscriptionArn=arn:aws:sns:us-east-1:123456789012:nodetest:....

Please do not reply directly to this e-mail. If you have any questions or comments regarding this email, please contact us at sns-question@amazon.com

まとめ

かなり楽勝にメールが飛ばせていい感じですね。今度はsubscribeするためのinterfaceをexpress+ejsで作ってみたいと思います。