-
Notifications
You must be signed in to change notification settings - Fork 136
Description
I'm not sure whether this is an issue with the plugin or the core serverless-offline itself, so apologies if it's the latter. I have an SQS queue with the following Serverless YAML config:
Type: AWS::SQS::Queue
Properties:
QueueName: '${self:service}-event-source-${self:custom.environment}'
VisibilityTimeout: '${self:custom.sqs.visibilityTimeout.${self:custom.environment}, self:custom.sqs.visibilityTimeout.default}'
DelaySeconds: '${self:custom.sqs.delaySeconds.${self:custom.environment}, self:custom.sqs.delaySeconds.default}'
KmsMasterKeyId: ${self:custom.kmsKeyId}
RedrivePolicy:
deadLetterTargetArn: !GetAtt SqsEventSourceDlq.Arn
maxReceiveCount: '${self:custom.sqs.maxReceiveCount.${self:custom.environment}, self:custom.sqs.maxReceiveCount.default}'
In serverless-offline 5.x with serverless-offline-sqs 3.x, the queue is created and functions correctly. The dead letter queue is not created, but I'm aware there is already an issue open about this (#65), and this is not important to our local setup.
In serverless-offline 6.x with serverless-offline-sqs 4.x, the queue fails to create with the following error (SLS_DEBUG on):
AWS.SimpleQueueService.NonExistentQueue: AWS.SimpleQueueService.NonExistentQueue; see the SQS docs.
at Request.extractError (/home/node/app/node_modules/serverless-offline-sqs/node_modules/aws-sdk/lib/protocol/query.js:50:29)
at Request.callListeners (/home/node/app/node_modules/serverless-offline-sqs/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
at Request.emit (/home/node/app/node_modules/serverless-offline-sqs/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
at Request.emit (/home/node/app/node_modules/serverless-offline-sqs/node_modules/aws-sdk/lib/request.js:688:14)
at Request.transition (/home/node/app/node_modules/serverless-offline-sqs/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (/home/node/app/node_modules/serverless-offline-sqs/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /home/node/app/node_modules/serverless-offline-sqs/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/home/node/app/node_modules/serverless-offline-sqs/node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (/home/node/app/node_modules/serverless-offline-sqs/node_modules/aws-sdk/lib/request.js:690:12)
at Request.callListeners (/home/node/app/node_modules/serverless-offline-sqs/node_modules/aws-sdk/lib/sequential_executor.js:116:18)
at Request.emit (/home/node/app/node_modules/serverless-offline-sqs/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
at Request.emit (/home/node/app/node_modules/serverless-offline-sqs/node_modules/aws-sdk/lib/request.js:688:14)
at Request.transition (/home/node/app/node_modules/serverless-offline-sqs/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (/home/node/app/node_modules/serverless-offline-sqs/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /home/node/app/node_modules/serverless-offline-sqs/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/home/node/app/node_modules/serverless-offline-sqs/node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (/home/node/app/node_modules/serverless-offline-sqs/node_modules/aws-sdk/lib/request.js:690:12)
at Request.callListeners (/home/node/app/node_modules/serverless-offline-sqs/node_modules/aws-sdk/lib/sequential_executor.js:116:18)
at callNextListener (/home/node/app/node_modules/serverless-offline-sqs/node_modules/aws-sdk/lib/sequential_executor.js:96:12)
at IncomingMessage.onEnd (/home/node/app/node_modules/serverless-offline-sqs/node_modules/aws-sdk/lib/event_listeners.js:313:13)
at IncomingMessage.emit (events.js:203:15)
at IncomingMessage.EventEmitter.emit (domain.js:448:20)
at endReadableNT (_stream_readable.js:1143:12)
at process._tickCallback (internal/process/next_tick.js:63:19)
From previous event:
at PluginManager.invoke (/home/node/app/node_modules/serverless/lib/classes/PluginManager.js:498:22)
at getHooks.reduce.then (/home/node/app/node_modules/serverless/lib/classes/PluginManager.js:533:24)
From previous event:
at PluginManager.run (/home/node/app/node_modules/serverless/lib/classes/PluginManager.js:533:8)
at variables.populateService.then (/home/node/app/node_modules/serverless/lib/Serverless.js:162:33)
From previous event:
at Serverless.run (/home/node/app/node_modules/serverless/lib/Serverless.js:149:74)
at serverless.init.then.then (/home/node/app/node_modules/serverless/scripts/serverless.js:58:26)
at runCallback (timers.js:705:18)
at tryOnImmediate (timers.js:676:5)
at processImmediate (timers.js:658:5)
at process.topLevelDomainCallback (domain.js:126:23)
From previous event:
at Object.<anonymous> (/home/node/app/node_modules/serverless/scripts/serverless.js:58:4)
at Module._compile (internal/modules/cjs/loader.js:778:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Module.require (internal/modules/cjs/loader.js:692:17)
at require (internal/modules/cjs/helpers.js:25:18)
at Object.<anonymous> (/home/node/app/node_modules/serverless/bin/serverless.js:41:1)
at Module._compile (internal/modules/cjs/loader.js:778:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)
Investigating this, we discovered that, if the RedrivePolicy
is removed, the queue will be created successfully. This would be a workaround; however, we need the RedrivePolicy when we deploy to production, and it doesn't seem possible to put a condition on a RedrivePolicy.
Essentially, something that used to work with an old version of the plugin is broken with the current one, which means we can't upgrade to the current version. It's also not a configuration error on our side as it works with 'online' Serverless.