SQSをトリガーにLambdaを起動(Serverless Framework)
- 2019.11.17
- AWS
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に移動し、該当のロググループへ移動すると、きちんとログが吐き出されていることが確認できる。
-
前の記事
Amazon Cognitoを使ってNode.jsで認証 2019.11.16
-
次の記事
EC2 1台のフェイルオーバー構成をCloudFormationで構築する(前編) 2020.02.22