Lambdaは今年の4月のアップデートでSNSと連携できるようになりました。
今回、下記のようなLambdaとSNSとの連携方法について、説明します。
LambdaとSNSの連携の流れ
LambdaとSNSの連携は下記の流れになります。
- Lambdaの登録
- SNSのSubscriptionのEndpointとして、1で登録したLambdaを指定
わずか2ステップで連携できるので、簡単ですね。
1. Lambdaの登録
まずは何はともあれ、Lambdaに登録しましょう。
下記はSNSのイベントを取得して、topicARN毎に処理を行うサンプルです。
import com.amazonaws.services.lambda.runtime.{ Context, RequestHandler }
import com.amazonaws.services.lambda.runtime.events.SNSEvent
import scala.collection.JavaConverters._
object LambdaFunctionHandler extends RequestHandler[SNSEvent, String] {
//SNSとの連携はinputとして、SNSEventを指定するだけでOK
def handleRequest(input: SNSEvent, context: Context): String = {
// SNSのtopicArnを取得
val snsRecordHead = input.getRecords.asScala.headOption
val topicArn = snsRecordHead.get.getSNS.getTopicArn
//取得したtopicArn毎に処理を何か処理を行う
}
}
//kinesis sdkを追加
libraryDependencies ++= Seq(
"com.amazonaws" % "aws-java-sdk-kinesis" % "1.0.0",
)
SNSと連携する際の注意点として、inputとして、SNSEventを指定しましょう。
後はsbt assemblyしてLambdaに登録するjarファイルを作成するだけです。
$ sbt clean assembly
Lambdaの登録画面にて下記の内容にて登録
-
Name: < lambdaの名前 >
-
Description: SNS連携用Lambda
-
Runtime: Java8
-
Code entry type: Upload a .ZIP fileを選択し、上記で作成したjarファイルを指定
-
Handler: com.hoge.LambdaFunctionHandler::handleRequest
-
Role:< Lambda用のrole >
-
Memory: 512MB
-
Timeout: 1min
これでLambdaの準備は完了です。
2. SNSの作成
SNSでsubscriptionのEndpointを1で作成したLambdaに指定して作成します。
SNSの管理画面で下記の内容で作成します。
- create new topicを選択
- Topic name: Lambda
- Display name: Lambda
- create subscriptionを選択
- Protocol: AWS Lambda
- Endpoint: < 1で作成したLambdaの名前を指定 >
- version: default
作成したTopicにメッセージを送信すると、登録したLambdaが実行されます。
まとめ
SNSとの連携が可能になったことにより、他のAWSサービスとLambdaとの連携がさらに容易になりました。
例えば、あるサービスをCloudWatchで監視し、特定の閾値を超えた際にSNSに通知、SNSがLambdaを実行といった事が可能になります。
いっそう便利になったLambdaでより楽しいAWS生活がおくれそうですね。