Create AWS Connect Queues

The aws:connect/queue:Queue resource, part of the Pulumi AWS provider, defines an Amazon Connect queue that holds contacts until agents become available to handle them. This guide focuses on three capabilities: queue creation with operating hours, quick connect integration for transfers, and outbound caller ID configuration.

Queues belong to a Connect instance and reference Hours of Operation, Quick Connects, phone numbers, and contact flows that must exist separately. The examples are intentionally small. Combine them with your own Connect instance, operating hours, and routing configuration.

Create a queue with operating hours

Contact centers route incoming calls to queues that hold contacts until agents become available. Each queue requires operating hours that define when agents can handle contacts.

import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";

const test = new aws.connect.Queue("test", {
    instanceId: "aaaaaaaa-bbbb-cccc-dddd-111111111111",
    name: "Example Name",
    description: "Example Description",
    hoursOfOperationId: "12345678-1234-1234-1234-123456789012",
    tags: {
        Name: "Example Queue",
    },
});
import pulumi
import pulumi_aws as aws

test = aws.connect.Queue("test",
    instance_id="aaaaaaaa-bbbb-cccc-dddd-111111111111",
    name="Example Name",
    description="Example Description",
    hours_of_operation_id="12345678-1234-1234-1234-123456789012",
    tags={
        "Name": "Example Queue",
    })
package main

import (
	"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/connect"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := connect.NewQueue(ctx, "test", &connect.QueueArgs{
			InstanceId:         pulumi.String("aaaaaaaa-bbbb-cccc-dddd-111111111111"),
			Name:               pulumi.String("Example Name"),
			Description:        pulumi.String("Example Description"),
			HoursOfOperationId: pulumi.String("12345678-1234-1234-1234-123456789012"),
			Tags: pulumi.StringMap{
				"Name": pulumi.String("Example Queue"),
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;

return await Deployment.RunAsync(() => 
{
    var test = new Aws.Connect.Queue("test", new()
    {
        InstanceId = "aaaaaaaa-bbbb-cccc-dddd-111111111111",
        Name = "Example Name",
        Description = "Example Description",
        HoursOfOperationId = "12345678-1234-1234-1234-123456789012",
        Tags = 
        {
            { "Name", "Example Queue" },
        },
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.connect.Queue;
import com.pulumi.aws.connect.QueueArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var test = new Queue("test", QueueArgs.builder()
            .instanceId("aaaaaaaa-bbbb-cccc-dddd-111111111111")
            .name("Example Name")
            .description("Example Description")
            .hoursOfOperationId("12345678-1234-1234-1234-123456789012")
            .tags(Map.of("Name", "Example Queue"))
            .build());

    }
}
resources:
  test:
    type: aws:connect:Queue
    properties:
      instanceId: aaaaaaaa-bbbb-cccc-dddd-111111111111
      name: Example Name
      description: Example Description
      hoursOfOperationId: 12345678-1234-1234-1234-123456789012
      tags:
        Name: Example Queue

The instanceId identifies your Connect instance. The hoursOfOperationId determines when agents can receive contacts from this queue. Without operating hours, the queue cannot route contacts to agents.

Enable quick connects for agent transfers

Agents often need to transfer contacts to other agents, queues, or external numbers. Quick connects provide pre-configured transfer destinations that agents can access during calls.

import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";

const test = new aws.connect.Queue("test", {
    instanceId: "aaaaaaaa-bbbb-cccc-dddd-111111111111",
    name: "Example Name",
    description: "Example Description",
    hoursOfOperationId: "12345678-1234-1234-1234-123456789012",
    quickConnectIds: ["12345678-abcd-1234-abcd-123456789012"],
    tags: {
        Name: "Example Queue with Quick Connect IDs",
    },
});
import pulumi
import pulumi_aws as aws

test = aws.connect.Queue("test",
    instance_id="aaaaaaaa-bbbb-cccc-dddd-111111111111",
    name="Example Name",
    description="Example Description",
    hours_of_operation_id="12345678-1234-1234-1234-123456789012",
    quick_connect_ids=["12345678-abcd-1234-abcd-123456789012"],
    tags={
        "Name": "Example Queue with Quick Connect IDs",
    })
package main

import (
	"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/connect"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := connect.NewQueue(ctx, "test", &connect.QueueArgs{
			InstanceId:         pulumi.String("aaaaaaaa-bbbb-cccc-dddd-111111111111"),
			Name:               pulumi.String("Example Name"),
			Description:        pulumi.String("Example Description"),
			HoursOfOperationId: pulumi.String("12345678-1234-1234-1234-123456789012"),
			QuickConnectIds: pulumi.StringArray{
				pulumi.String("12345678-abcd-1234-abcd-123456789012"),
			},
			Tags: pulumi.StringMap{
				"Name": pulumi.String("Example Queue with Quick Connect IDs"),
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;

return await Deployment.RunAsync(() => 
{
    var test = new Aws.Connect.Queue("test", new()
    {
        InstanceId = "aaaaaaaa-bbbb-cccc-dddd-111111111111",
        Name = "Example Name",
        Description = "Example Description",
        HoursOfOperationId = "12345678-1234-1234-1234-123456789012",
        QuickConnectIds = new[]
        {
            "12345678-abcd-1234-abcd-123456789012",
        },
        Tags = 
        {
            { "Name", "Example Queue with Quick Connect IDs" },
        },
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.connect.Queue;
import com.pulumi.aws.connect.QueueArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var test = new Queue("test", QueueArgs.builder()
            .instanceId("aaaaaaaa-bbbb-cccc-dddd-111111111111")
            .name("Example Name")
            .description("Example Description")
            .hoursOfOperationId("12345678-1234-1234-1234-123456789012")
            .quickConnectIds("12345678-abcd-1234-abcd-123456789012")
            .tags(Map.of("Name", "Example Queue with Quick Connect IDs"))
            .build());

    }
}
resources:
  test:
    type: aws:connect:Queue
    properties:
      instanceId: aaaaaaaa-bbbb-cccc-dddd-111111111111
      name: Example Name
      description: Example Description
      hoursOfOperationId: 12345678-1234-1234-1234-123456789012
      quickConnectIds:
        - 12345678-abcd-1234-abcd-123456789012
      tags:
        Name: Example Queue with Quick Connect IDs

The quickConnectIds property lists transfer destinations available to agents working this queue. Each ID references a Quick Connect resource that defines the transfer target (another queue, an agent, or an external phone number). Agents see these options in their contact control panel during active calls.

Configure outbound caller ID for callbacks

When agents make outbound calls or callbacks, the queue’s outbound caller configuration determines what caller ID information recipients see and which flow handles the call setup.

import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";

const test = new aws.connect.Queue("test", {
    instanceId: "aaaaaaaa-bbbb-cccc-dddd-111111111111",
    name: "Example Name",
    description: "Example Description",
    hoursOfOperationId: "12345678-1234-1234-1234-123456789012",
    outboundCallerConfig: {
        outboundCallerIdName: "example",
        outboundCallerIdNumberId: "12345678-abcd-1234-abcd-123456789012",
        outboundFlowId: "87654321-defg-1234-defg-987654321234",
    },
    tags: {
        Name: "Example Queue with Outbound Caller Config",
    },
});
import pulumi
import pulumi_aws as aws

test = aws.connect.Queue("test",
    instance_id="aaaaaaaa-bbbb-cccc-dddd-111111111111",
    name="Example Name",
    description="Example Description",
    hours_of_operation_id="12345678-1234-1234-1234-123456789012",
    outbound_caller_config={
        "outbound_caller_id_name": "example",
        "outbound_caller_id_number_id": "12345678-abcd-1234-abcd-123456789012",
        "outbound_flow_id": "87654321-defg-1234-defg-987654321234",
    },
    tags={
        "Name": "Example Queue with Outbound Caller Config",
    })
package main

import (
	"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/connect"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		_, err := connect.NewQueue(ctx, "test", &connect.QueueArgs{
			InstanceId:         pulumi.String("aaaaaaaa-bbbb-cccc-dddd-111111111111"),
			Name:               pulumi.String("Example Name"),
			Description:        pulumi.String("Example Description"),
			HoursOfOperationId: pulumi.String("12345678-1234-1234-1234-123456789012"),
			OutboundCallerConfig: &connect.QueueOutboundCallerConfigArgs{
				OutboundCallerIdName:     pulumi.String("example"),
				OutboundCallerIdNumberId: pulumi.String("12345678-abcd-1234-abcd-123456789012"),
				OutboundFlowId:           pulumi.String("87654321-defg-1234-defg-987654321234"),
			},
			Tags: pulumi.StringMap{
				"Name": pulumi.String("Example Queue with Outbound Caller Config"),
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;

return await Deployment.RunAsync(() => 
{
    var test = new Aws.Connect.Queue("test", new()
    {
        InstanceId = "aaaaaaaa-bbbb-cccc-dddd-111111111111",
        Name = "Example Name",
        Description = "Example Description",
        HoursOfOperationId = "12345678-1234-1234-1234-123456789012",
        OutboundCallerConfig = new Aws.Connect.Inputs.QueueOutboundCallerConfigArgs
        {
            OutboundCallerIdName = "example",
            OutboundCallerIdNumberId = "12345678-abcd-1234-abcd-123456789012",
            OutboundFlowId = "87654321-defg-1234-defg-987654321234",
        },
        Tags = 
        {
            { "Name", "Example Queue with Outbound Caller Config" },
        },
    });

});
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.connect.Queue;
import com.pulumi.aws.connect.QueueArgs;
import com.pulumi.aws.connect.inputs.QueueOutboundCallerConfigArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var test = new Queue("test", QueueArgs.builder()
            .instanceId("aaaaaaaa-bbbb-cccc-dddd-111111111111")
            .name("Example Name")
            .description("Example Description")
            .hoursOfOperationId("12345678-1234-1234-1234-123456789012")
            .outboundCallerConfig(QueueOutboundCallerConfigArgs.builder()
                .outboundCallerIdName("example")
                .outboundCallerIdNumberId("12345678-abcd-1234-abcd-123456789012")
                .outboundFlowId("87654321-defg-1234-defg-987654321234")
                .build())
            .tags(Map.of("Name", "Example Queue with Outbound Caller Config"))
            .build());

    }
}
resources:
  test:
    type: aws:connect:Queue
    properties:
      instanceId: aaaaaaaa-bbbb-cccc-dddd-111111111111
      name: Example Name
      description: Example Description
      hoursOfOperationId: 12345678-1234-1234-1234-123456789012
      outboundCallerConfig:
        outboundCallerIdName: example
        outboundCallerIdNumberId: 12345678-abcd-1234-abcd-123456789012
        outboundFlowId: 87654321-defg-1234-defg-987654321234
      tags:
        Name: Example Queue with Outbound Caller Config

The outboundCallerConfig block controls caller ID presentation for outbound calls. The outboundCallerIdName sets the display name, outboundCallerIdNumberId references a claimed phone number, and outboundFlowId specifies the contact flow that handles call setup. Recipients see the configured name and number when agents call from this queue.

Beyond these examples

These snippets focus on specific queue-level features: queue creation with operating hours, quick connect integration, and outbound caller ID configuration. They’re intentionally minimal rather than full contact center routing configurations.

The examples reference pre-existing infrastructure such as Amazon Connect instances, Hours of Operation resources, Quick Connect resources for transfer scenarios, and phone numbers and contact flows for outbound scenarios. They focus on configuring the queue rather than provisioning the surrounding Connect infrastructure.

To keep things focused, common queue patterns are omitted, including:

  • Queue capacity limits (maxContacts)
  • Queue status management (ENABLED/DISABLED)
  • Contact flow associations
  • Queue metrics and monitoring

These omissions are intentional: the goal is to illustrate how each queue feature is wired, not provide drop-in contact center modules. See the Connect Queue resource reference for all available configuration options.

Let's create AWS Connect Queues

Get started with Pulumi Cloud, then follow our quick setup guide to deploy this infrastructure.

Try Pulumi Cloud for FREE

Frequently Asked Questions

Configuration Basics
What are the required fields to create a Connect queue?
You need instanceId (your Connect instance), name (queue name), hoursOfOperationId (operating hours), status (ENABLED or DISABLED), and region (defaults to provider region if not specified).
How do I enable or disable a queue?
Set the status property to ENABLED or DISABLED.
Queue Capacity & Routing
What does maxContacts control?
The maxContacts property sets the maximum number of contacts allowed in the queue before it’s considered full. The minimum value is 0.
What are quick connects used for in a queue?
Quick connects determine which quick connect options are available to agents working the queue. Configure them using the quickConnectIds property with a list of quick connect IDs.
Outbound Calling
When should I configure outbound caller settings?
Configure outboundCallerConfig when you need to set the outbound caller ID name (outboundCallerIdName), caller ID number (outboundCallerIdNumberId), or outbound whisper flow (outboundFlowId) for calls from this queue.
Import & Management
How do I import an existing Connect queue?
Use the format instance_id:queue_id separated by a colon. For example: pulumi import aws:connect/queue:Queue example f1288a1f-6193-445a-b47e-af739b2:c1d4e5f6-1b3c-1b3c-1b3c-c1d4e5f6c1d4e5.

Using a different cloud?

Explore integration guides for other cloud providers: