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
namefor the queue, causing conflicts. - Using invalid values for
delay_secondsorvisibility_timeout_secondsoutside 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
| Argument | Description | Default | Notes |
|---|---|---|---|
| name | Name of the SQS queue | Required | Must be unique in AWS account and region |
| delay_seconds | Seconds to delay message delivery | 0 | Range: 0 to 900 |
| visibility_timeout_seconds | Time message is invisible after being received | 30 | Range: 0 to 43200 |
| message_retention_seconds | How long messages are kept in queue | 345600 | Range: 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.