見出し画像

嘘ついた。Serverless Framework で SQS キュー作成できた。

 前に note で「Serverless Framework + TypeScriptで型情報を頼りにSQSからLambdaを呼び出すLambda関数を作る」を書きました。

 その中で以下のように SQS キューは Serverless Framework で SQS キューを作れないと書きました。

 Serverless Framework では SQS キューを作成することはできません。なので事前に SQS キューを作成しておく必要があります

Note: The sqs event will hook up your existing SQS Queue to a Lambda function. Serverless won't create a new queue for you.
https://serverless.com/framework/docs/providers/aws/events/sqs/#sqs-queues

 正しくありませんでした。🙇‍♂️

 serverless.yml の resources 内に CloudFormation Template を記述できるので、対応している AWS リソースなら何でも作れます!

 ドキュメントの 「Serverless Framework はあなたのために新しいキューを作らない」と書いてあるのは、不可能という意味ではなく、API Gateway のように自動で作ってくれないという意味でしたね。。。

やってみた

 help でなんだっけと確かめなくても打てるようになった新規作成コマンドを打ち込んでプロジェクトを作成します。

slss create -n example-create-sqs -t aws-nodejs-typescript -p example-create-sqs
cd example-create-sqs
npm i
code .

 ソースコードや serverless.yml は前回のを使い回します。

handler.ts

import { SQSHandler } from "aws-lambda";
import "source-map-support/register";

export const hello: SQSHandler = async (event, _context) => {
 event.Records.forEach((record) => {
   console.log(record.body);
 });
};

serverless.yml

 AWS アカウント ID やキュー名やバケット名は適宜変更してください。

service:
 name: example-create-sqs

custom:
 webpack:
   webpackConfig: ./webpack.config.js
   includeModules: true

plugins:
 - serverless-webpack

provider:
 name: aws
 region: ap-northeast-1
 memorySize: 128
 logRetentionInDays: 1
 runtime: nodejs12.x
 environment:
   AWS_NODEJS_CONNECTION_REUSE_ENABLED: 1
   LANG: ja_JP.UTF-8
 versionFunctions: false
 deploymentBucket:
   name: dafujii-serverless-deploymentbucket

functions:
 hello:
   handler: handler.hello
   events:
     - sqs: arn:aws:sqs:ap-northeast-1:xxxxxxxxxx:example-queue-by-serverless

resources:
 Resources:
   MyQueue:
     Type: "AWS::SQS::Queue"
     Properties:
       QueueName: "example-queue-by-serverless"

 CloudFormation Template の SQS キュー のドキュメントは下記にあります。

デプロイして確認!

serverless deploy

 AWS コンソールで SQS を確認するとありました。🎊

画像1

 💡 AWS CLI で SQS キューを確認する場合は以下の通り。

aws sqs list-queues

 試しにメッセージも送ってみます。

画像2

 💡 AWS CLI で SQS キューにメッセージを送信する場合は以下の通り。

aws sqs send-message  --queue-url https://ap-northeast-1.queue.amazonaws.com/xxxxxxxxxx/example-queue-by-serverless --message-body "マジごめん"

 CloudWatch Logs に Lambda から出力された文字列が残っていました。

画像3

 💡 serverless コマンドで確認する場合は下記の通り。

serverless logs -f hello

後片付け

serverless remove

 無事に作成した SQS キューも消えていることが確認できました。

まとめ

 すまんな。

 Serverless Framework の可能性が(自分の中で)さらに広がりました!

 (AWS CDK にも対応してくれたら1つのプロジェクトで完結して TypeScript で統一できるのでは!?)

 ついつい AWS コンソール触りがちですが、ちょっとした作業くらいなら息吐くように AWS CLI を使いこなせるようになりたい!


😉