0
0
TerraformHow-ToBeginner · 3 min read

How to Create an SQS Queue with Terraform

To create an AWS SQS queue with Terraform, use the aws_sqs_queue resource block specifying the queue name and optional settings. Apply the configuration with terraform apply to provision the queue in your AWS account.
📐

Syntax

The aws_sqs_queue resource defines an SQS queue in Terraform. You must provide a name for the queue. Optional arguments include delay_seconds to delay message delivery, visibility_timeout_seconds to control message visibility, and message_retention_seconds to set how long messages stay in the queue.

terraform
resource "aws_sqs_queue" "example" {
  name                      = "my-queue"
  delay_seconds             = 0
  visibility_timeout_seconds = 30
  message_retention_seconds  = 345600
}
💻

Example

This example creates a simple SQS queue named my-queue with default delay and visibility timeout settings. Running terraform apply will create the queue in AWS.

terraform
provider "aws" {
  region = "us-east-1"
}

resource "aws_sqs_queue" "my_queue" {
  name                      = "my-queue"
  delay_seconds             = 0
  visibility_timeout_seconds = 30
  message_retention_seconds  = 345600
}
Output
Apply complete! Resources: 1 added, 0 changed, 0 destroyed. Outputs: aws_sqs_queue.my_queue.id = "https://sqs.us-east-1.amazonaws.com/123456789012/my-queue"
⚠️

Common Pitfalls

Common mistakes include:

  • Not specifying a unique name for the queue, causing conflicts.
  • Using invalid values for delay_seconds or visibility_timeout_seconds outside allowed ranges.
  • Forgetting to configure the AWS provider with correct credentials and region.

Always validate your Terraform plan before applying to catch errors early.

terraform
/* Wrong: Missing name causes error */
resource "aws_sqs_queue" "bad_queue" {
  delay_seconds = 10
}

/* Right: Include name */
resource "aws_sqs_queue" "good_queue" {
  name          = "valid-queue-name"
  delay_seconds = 10
}
📊

Quick Reference

ArgumentDescriptionDefaultNotes
nameName of the SQS queueRequiredMust be unique in AWS account and region
delay_secondsSeconds to delay message delivery0Range: 0 to 900
visibility_timeout_secondsTime message is invisible after being received30Range: 0 to 43200
message_retention_secondsHow long messages are kept in queue345600Range: 60 to 1209600 (14 days)

Key Takeaways

Use the aws_sqs_queue resource with a unique name to create an SQS queue in Terraform.
Configure optional settings like delay_seconds and visibility_timeout_seconds to control queue behavior.
Always set up the AWS provider with correct region and credentials before applying.
Validate your Terraform plan to catch configuration errors early.
Message retention defaults to 4 days but can be customized up to 14 days.