Queue
The Queue
construct is a higher level CDK construct that makes it easy to create a SQS Queues. You can create a queue by specifying a consumer function. And then publish to the queue from any part of your serverless app.
This construct makes it easier to define a queue and a consumer. It also internally connects the consumer and queue together.
Examples
Using the minimal config
import { Queue } from "sst/constructs";
new Queue(stack, "Queue", {
consumer: "src/queueConsumer.main",
});
Configuring consumers
Lazily adding consumer
Create an empty queue and lazily add the consumer.
const queue = new Queue(stack, "Queue");
queue.addConsumer(stack, "src/queueConsumer.main");
Configuring the consumer function
new Queue(stack, "Queue", {
consumer: {
function: {
handler: "src/queueConsumer.main",
timeout: 10,
environment: { bucketName: bucket.bucketName },
permissions: [bucket],
},
},
});
Configuring the consumer event source
Configure the internally created CDK Event Source
.
new Queue(stack, "Queue", {
consumer: {
function: "src/queueConsumer.main",
cdk: {
eventSource: {
batchSize: 5,
},
},
},
});
Giving the consumer some permissions
Allow the consumer function to access S3.
const queue = new Queue(stack, "Queue", {
consumer: "src/queueConsumer.main",
});
queue.attachPermissions(["s3"]);
FIFO queue
new Queue(stack, "Queue", {
consumer: "src/queueConsumer.main",
cdk: {
queue: {
fifo: true,
},
},
});
Advanced examples
Configuring the SQS queue
Configure the internally created CDK Queue
instance.
import { Duration } from "aws-cdk-lib";
new Queue(stack, "Queue", {
consumer: "src/queueConsumer.main",
cdk: {
queue: {
queueName: "my-queue",
visibilityTimeout: Duration.seconds(5),
},
},
});
Importing an existing queue
Override the internally created CDK Queue
instance.
import * as sqs from "aws-cdk-lib/aws-sqs";
new Queue(stack, "Queue", {
consumer: "src/queueConsumer.main",
cdk: {
queue: sqs.Queue.fromQueueArn(stack, "MySqsQueue", queueArn),
},
});
Using existing Lambda functions as consumer
import * as iam from "aws-cdk-lib/aws-iam";
import * as lambda from "aws-cdk-lib/aws-lambda";
new Queue(stack, "Queue", {
consumer: {
cdk: {
function: lambda.Function.fromFunctionAttributes(stack, "IFunction", {
functionArn: "arn:aws:lambda:us-east-1:123456789:function:my-function",
role: iam.Role.fromRoleArn(
stack,
"IRole",
"arn:aws:iam::123456789:role/my-role"
),
}),
},
},
});
Constructor
new Queue(scope, id, props)
Parameters
- scope Construct
- id string
- props QueueProps
QueueProps
consumer?
Type : QueueConsumerProps | string | Function
Used to create the consumer for the queue.
new Queue(stack, "Queue", {
consumer: "src/function.handler",
})
cdk?
Type :
cdk.id?
Type : string
Allows you to override default id for this construct.
cdk.queue?
Type : IQueue | QueueProps
Override the default settings this construct uses internally to create the queue.
new Queue(stack, "Queue", {
consumer: "src/function.handler",
cdk: {
queue: {
fifo: true,
},
}
});
Properties
An instance of Queue
has the following properties.
consumerFunction?
The internally created consumer
Function
instance.
id
Type : string
queueArn
Type : string
The ARN of the SQS Queue
queueName
Type : string
The name of the SQS Queue
queueUrl
Type : string
The URL of the SQS Queue
cdk
Type :
cdk.queue
Type : IQueue
The internally created CDK
Queue
instance.
Methods
An instance of Queue
has the following methods.
addConsumer
addConsumer(scope, consumer)
Parameters
- scope Construct
- consumer QueueConsumerProps | string | Function
Adds a consumer after creating the queue. Note only one consumer can be added to a queue
const queue = new Queue(stack, "Queue");
queue.addConsumer(props.stack, "src/function.handler");
attachPermissions
attachPermissions(permissions)
Parameters
- permissions Permissions
Attaches additional permissions to the consumer function
const queue = new Queue(stack, "Queue", {
consumer: "src/function.handler",
});
queue.attachPermissions(["s3"]);
bind
bind(constructs)
Parameters
- constructs Array<BindingResource>
Binds the given list of resources to the consumer function
const queue = new Queue(stack, "Queue", {
consumer: "src/function.handler",
});
queue.bind([STRIPE_KEY, bucket]);
QueueConsumerProps
Used to define the consumer for the queue and invocation details
function?
Type : string | Function | FunctionProps
Used to create the consumer function for the queue.
new Queue(stack, "Queue", {
consumer: {
function: {
handler: "src/function.handler",
timeout: 10,
},
},
});
cdk?
Type :
cdk.eventSource?
Type : SqsEventSourceProps
This allows you to override the default settings this construct uses internally to create the consumer.
new Queue(stack, "Queue", {
consumer: {
function: "test/lambda.handler",
cdk: {
eventSource: {
batchSize: 5,
},
},
},
});
cdk.function?
Type : IFunction
This allows you to use an existing or imported Lambda function.
new Queue(stack, "Queue", {
consumer: {
cdk: {
function: lambda.Function.fromFunctionAttributes(stack, "ImportedFn", {
functionArn: "arn:aws:lambda:us-east-1:123456789:function:my-function",
role: iam.Role.fromRoleArn(stack, "IRole", "arn:aws:iam::123456789:role/my-role"),
}),
},
},
});