SQSとLambdaのポーリングを実装するときに便利だったのでシェア。

elasticmq:latest起動+SLSにプラグイン導入

# elasticmq:latestを起動(Queueのエンドポイント)
docker run -it -p 9999:9324 s12v/elasticmq:latest

# SQSのプラグインを入れる
yarn add serverless-offline-sqs -D

プラグインの設定

autoCreateはtrueにされることを推奨します。Queueが存在しない場合自動的にQueueが作成されます。

# serverless.yml
plugins:
  serverless-offline-sqs

custom:
  serverless-offline-sqs:
    autoCreate: true
    apiVersion: '2012-11-05'
    endpoint: http://0.0.0.0:9999 # CMQのエンドポイントを指定
    region: ap-northeast-1
    accessKeyId: root
    secretAccessKey: root
    skipCacheInvalidation: false  

あとは適当にQueueのエンドポイントへリクエストを投げてみる。
SQS⇨Lambdaキックを指定している場合は、自動的にポーリングされるはずです。

SQS_MSG=$(cat << EOS
{
  "Example": "サンプル",
}
EOS
)

aws sqs send-message \
  --queue-url "http://localhost:9999/queue/example-queue" \
  --message-body "${SQS_MSG}" \
  --endpoint-url "http://localhost:9999"

手動でQueue作成される場合

CLIで下記を実行する。

aws sqs create-queue --queue-name example-queue-name --endpoint-url http://localhost:9999