Hi! I’m trying to deploy a function that depends on the custom resources I specified. I would like to set the output value of some resources to environment variable at the function level. Unfortunately, it fails because the Lambda function seems to be deployed first and the output values are not yet exported. Is it a use case that serverless can handle?
To give some context, the “Queue” is really related to the service, this is why I’d like to create it with this service and avoid to add a separate step to create first the queue then deploy the service.
An example below
serverless.yml
functions:
consumer:
environment:
QUEUE_URL:
'Fn::ImportValue': QueueUrl-${self:provider.stage}
handler: handler.consume
events:
- sqs:
arn: somevalidarn
batchSize: 1
resources:
- ${file(cloudformation/queue.yml)}
cloudformation/queue.yml
Resources:
Queue:
Type: AWS::SQS::Queue
Properties:
QueueName: ${self:provider.stage}-queue
RedrivePolicy:
deadLetterTargetArn:
Fn::GetAtt:
- "DeadLetterQueue"
- "Arn"
maxReceiveCount: 5
DeadLetterQueue:
Type: AWS::SQS::Queue
Properties:
QueueName: ${self:provider.stage}-deadletter-queue
Outputs:
QueueUrl:
Description: "URL of the queue"
Value:
Ref: Queue
Export:
Name: QueueUrl-${self:provider.stage}
QueueArn:
Description: "ARN of the queue"
Value:
Fn::GetAtt:
- "Queue"
- "Arn"
Export:
Name: QueueArn-${self:provider.stage}
DeadLetterQueueUrl:
Description: "Url of the dead letter queue"
Value:
Ref: DeadLetterQueue
Export:
Name: DeadLetterQueueUrl-${self:provider.stage}
DeadLetterQueueArn:
Description: "ARN of the dead letter queue"
Value:
Fn::GetAtt:
- "DeadLetterQueue"
- "Arn"
Export:
Name: DeadLetterQueueArn-${self:provider.stage}