嘘ついた。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 を確認するとありました。🎊
💡 AWS CLI で SQS キューを確認する場合は以下の通り。
aws sqs list-queues
試しにメッセージも送ってみます。
💡 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 から出力された文字列が残っていました。
💡 serverless コマンドで確認する場合は下記の通り。
serverless logs -f hello
後片付け
serverless remove
無事に作成した SQS キューも消えていることが確認できました。
まとめ
すまんな。
Serverless Framework の可能性が(自分の中で)さらに広がりました!
(AWS CDK にも対応してくれたら1つのプロジェクトで完結して TypeScript で統一できるのでは!?)
ついつい AWS コンソール触りがちですが、ちょっとした作業くらいなら息吐くように AWS CLI を使いこなせるようになりたい!
😉