AWS LambdaのSNSとの連携について

  • 9
    Like
  • 0
    Comment
More than 1 year has passed since last update.

Lambdaは今年の4月のアップデートでSNSと連携できるようになりました。
今回、下記のようなLambdaとSNSとの連携方法について、説明します。

Untitled (1).png

LambdaとSNSの連携の流れ

LambdaとSNSの連携は下記の流れになります。

  1. Lambdaの登録
  2. SNSのSubscriptionのEndpointとして、1で登録したLambdaを指定

わずか2ステップで連携できるので、簡単ですね。

1. Lambdaの登録

まずは何はともあれ、Lambdaに登録しましょう。
下記はSNSのイベントを取得して、topicARN毎に処理を行うサンプルです。

lambda.scala
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毎に処理を何か処理を行う
  }
}
build.sbt
//kinesis sdkを追加
libraryDependencies ++= Seq(
  "com.amazonaws" % "aws-java-sdk-kinesis" % "1.0.0",
)

SNSと連携する際の注意点として、inputとして、SNSEventを指定しましょう。
後はsbt assemblyしてLambdaに登録するjarファイルを作成するだけです。

$ sbt clean assembly

Lambdaの登録画面にて下記の内容にて登録

スクリーンショット 2015-12-15 14.32.02.png

  • 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の管理画面で下記の内容で作成します。

スクリーンショット 2015-12-15 14.29.03.png

  • create new topicを選択
    • Topic name: Lambda
    • Display name: Lambda

スクリーンショット 2015-12-15 14.36.51.png

  • create subscriptionを選択
    • Protocol: AWS Lambda
    • Endpoint: < 1で作成したLambdaの名前を指定 >
    • version: default

作成したTopicにメッセージを送信すると、登録したLambdaが実行されます。

まとめ

SNSとの連携が可能になったことにより、他のAWSサービスとLambdaとの連携がさらに容易になりました。
例えば、あるサービスをCloudWatchで監視し、特定の閾値を超えた際にSNSに通知、SNSがLambdaを実行といった事が可能になります。
いっそう便利になったLambdaでより楽しいAWS生活がおくれそうですね。