SNS(Amazon Simple Notification Service)を利用して「Lambda A」から「Lambda B」を起動する方法を確認します。
作るもの
Lambda
からSNS
のTopic
にメッセージを送信して、別のLambda
を起動します。
SNSの用語
Topic
- 論理アクセスポイント
- 通信チャネルとして機能
Subscription
- 通知宛先や通知方法の定義
- pub-sub
Publish
- トピックにメッセージを送信
Subscribe
- トピックを購読
Publisher
- 発行者
Subscriber
- 受信者
Lambda作成
管理コンソールからLambda関数を2つ作りました。
「sns-publisher」
「sns-subscriber」
SNS
Topicの作成
トピックの作成
をクリックします。
今回はTestTopic
という名前でトピックを作成します。
Subscriptionの作成
作成したトピックのサブスクリプションを作成します。
プロトコルにLambdaを選択します。
エンドポイントに先ほど作成したLambda関数( sns-subscriber
)を選択します。
サブスクリプションの作成
をクリックします。
サブスクリプションを作成したことで、Lambda関数( sns-subscriber
)のトリガにSNSが表示されるようになりました。
動作確認
( 管理コンソールからPublish )
前準備
Lambda関数( sns-subscriber
)の処理を以下のようにします。
exports.handler = async (event) => {
console.log(JSON.stringify(event, null, 4))
}
確認
メッセージの発行
をクリックして、トピックへメッセージを発行します。
Lambda関数( sns-subscriber
)が実行されました。
console.log(JSON.stringify(event, null, 4))
の出力結果です。
動作確認
( LambdaからPublish )
前準備
Lambda関数( sns-publisher
)の処理を以下のようにします。
const AWS = require('aws-sdk')
exports.handler = async (event) => {
const params = {
Message: 'This is test message from sns-publisher.',
TopicArn: 'arn:aws:sns:ap-northeast-1:XXXXXXXXXXXX:TestTopic'
}
const createTopicPromise = new AWS.SNS().publish(params).promise()
await createTopicPromise.then((data) => {
console.log('MessageID is ' + data.MessageId)
}).catch((err) => {
console.error(err, err.stack)
})
}
Amazon SNS
の権限も付与しておきます。
確認
Lambda関数( sns-publisher
)を実行すると、Topicにメッセージが送信され、Lambda関数( sns-subscriber
)が実行されました。
console.log(JSON.stringify(event, null, 4))
の出力結果です。