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 configuration for transfers, and outbound caller ID settings.

Queues belong to a Connect instance and reference hours of operation, quick connects, and contact flows that must exist separately. The examples are intentionally small. Combine them with your own Connect instance, operating schedules, and routing configuration.

Create a queue with operating hours

Contact centers route incoming calls to queues that hold contacts until agents become available.

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 handle contacts from this queue. Without additional configuration, the queue uses default routing behavior and doesn’t support transfers or outbound calling.

Enable quick connects for agent transfers

Agents often need to transfer contacts to other agents, queues, or external numbers 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 predefined transfer destinations that agents can access. Each quick connect ID references a configured destination (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 from a queue, the system needs to know which caller ID to display.

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 the phone number to show, and outboundFlowId specifies the contact flow that handles the outbound call logic.

Beyond these examples

These snippets focus on specific queue-level features: queue creation with operating hours, agent transfer destinations, and outbound caller ID configuration. They’re intentionally minimal rather than full contact center deployments.

The examples reference pre-existing infrastructure such as Amazon Connect instances, hours of operation schedules, and quick connects, caller ID numbers, and contact flows for relevant examples. 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 (status: ENABLED/DISABLED)
  • Contact routing priorities and delays
  • Queue metrics and real-time 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 & Setup
What's required to create a Connect queue?
You must provide instanceId, name, hoursOfOperationId, and status. The status must be either ENABLED or DISABLED.
What are the valid status values for a queue?
Valid values are ENABLED or DISABLED.
Queue Features & Limits
What's the minimum value for maxContacts?
The minimum value is 0, which specifies the maximum number of contacts that can be in the queue before it’s considered full.
What's the difference between quickConnectIds and outboundCallerConfig?
Use quickConnectIds to specify quick connects available to agents working the queue. Use outboundCallerConfig to define the outbound caller ID name, number, and outbound whisper flow for outbound calls.
Management & Operations
How do I import an existing Connect queue?
Use the format instanceId:queueId 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: