SQSをトリガーにLambdaを起動(Serverless Framework)

  • 2019.11.17
  • AWS
SQSをトリガーにLambdaを起動(Serverless Framework)

Lambdaの起動のトリガとなるサービスは、API Gatewayはじめ、いろいろありますが、今回は、疎結合なシステムを作成する際によく使用する、SQSをトリガにしてLambdaで処理をしてみました。処理といっても、SQSのメッセージをCloud Watch Logsに吐き出すだけです。

プロジェクトの作成

Serverless FrameworkのインストールやAWS Credentialsの設定は完了している前提。

sls create --template aws-nodejs --name sqs-lambda

serverless.ymlの設定

serverless.ymlの中でイベントソースとなるSQSを指定する際に、アカウントIDを記述する必要があり、かつベタ書きはしたくないので、プラグインを導入。

npm i serverless-pseudo-parameters

serverless.yml

service: sqs-lambda

plugins:
  - serverless-pseudo-parameters

provider:
  name: aws
  runtime: nodejs10.x

  stage: dev
  region: ap-northeast-1

functions:
  receiver:
    handler: receiver.handler
    events:
      - sqs: 
          arn: "arn:aws:sqs:${self:provider.region}:#{AWS::AccountId}:TestQ2"

“arn:aws:sqs:${self:provider.region}:#{AWS::AccountId}:TestQ2″のうち、TestQ2の部分は、各自のSQSのキュー名を入力。また、上記のプラグインを入れたことで、#{AWS::AccountId}でアカウントIDを取得できる。

関数の作成

receiver.js

'use strict';

module.exports.handler = async event => {
  console.log('events', JSON.stringify(event));
  return {
    statusCode: 200,
    body: JSON.stringify(
      {
        message: 'SQS event processed',
        input: event,
      }
    ),
  };
}

これだけで終了。SQSからメッセージを取得するだけであれば、Lambdaへのロールの付与は記述しなくて良いみたい。また、Cloud Watch Logsへのログの書き出しについても、ロール付与の記述が必要という記事もあったが、不要なようです。

動作確認

マネジメントコンソールからSQSへ移動し、キュー操作からメッセージの送信ができるので、送信する。

CloudWatchに移動し、該当のロググループへ移動すると、きちんとログが吐き出されていることが確認できる。