Skip to content
Back to main site

Amazon SQS

Create queues, send and receive messages, then delete messages and queues.

Plan: Free23 of 23 operations implemented3Known differences

Visibility changes, long polling, per-message delays and content-based FIFO deduplication did not behave like AWS in testing of Vera 1.2.0 preview.

Example checked on Vera 1.2.2, 8 November 2026. Each coverage note names its own evidence and date.

This Free service needs no license key. Start Vera as in Get started, then run this in a terminal of its own, from an empty scratch directory. It gives the official AWS CLI dummy credentials and a config file of its own, so no AWS account is needed and your own AWS profile isn't touched.

Terminal window
export VERA_ENDPOINT="http://localhost:5003"
export AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=test
export AWS_REGION=us-east-1 AWS_DEFAULT_REGION=us-east-1
export AWS_SHARED_CREDENTIALS_FILE=/dev/null
export AWS_EC2_METADATA_DISABLED=true
export AWS_PAGER="" AWS_CLI_AUTO_PROMPT=off
unset AWS_PROFILE AWS_DEFAULT_PROFILE
unset AWS_SESSION_TOKEN AWS_SECURITY_TOKEN
unset AWS_WEB_IDENTITY_TOKEN_FILE AWS_ROLE_ARN AWS_ROLE_SESSION_NAME
unset AWS_CONTAINER_CREDENTIALS_FULL_URI
unset AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
cat > vera-aws-config <<'EOF'
[default]
region = us-east-1
output = json
cli_binary_format = base64
s3 =
addressing_style = path
EOF
export AWS_CONFIG_FILE="$PWD/vera-aws-config"

When you've finished every example in this terminal, close it and delete vera-aws-config, not before.

Use the AWS CLI’s sqs commands. The emulator serves the 2012-11-05 API over the AWS JSON protocol. The example also needs python3, to copy the receipt handle out of a response, and tee.

A queue URL looks like AWS’s, such as https://sqs.us-east-1.amazonaws.com/123456789012/vera-docs-queue. Pass it as --queue-url, but keep --endpoint-url on every command: the URL names the queue, and requests still go to VERA_ENDPOINT.

Create a queue, send example.net to it, then receive the message. The receive’s output is shown and also saved to received.json.

Terminal window
QUEUE_URL=$(aws --endpoint-url "$VERA_ENDPOINT" sqs create-queue \
--queue-name vera-docs-queue \
--attributes '{"VisibilityTimeout": "30", "MessageRetentionPeriod": "60"}' \
--query QueueUrl --output text)
aws --endpoint-url "$VERA_ENDPOINT" sqs send-message \
--queue-url "$QUEUE_URL" --message-body example.net
aws --endpoint-url "$VERA_ENDPOINT" sqs receive-message \
--queue-url "$QUEUE_URL" --wait-time-seconds 0 --max-number-of-messages 1 | tee received.json

The receive returns the message with its body, example.net. These are selected fields; the MessageId and ReceiptHandle differ on every run.

Output (selected fields)
{
"Messages": [
{
"MessageId": "f011df34-abc1-4597-a7b9-5c1d9ef2dd2d",
"ReceiptHandle": "recpt-e942e8cb804a4105b",
"Body": "example.net"
}
]
}

To clean up, delete the message with the receipt handle saved in received.json, then delete the queue and the file. The first line copies the ReceiptHandle out of the file. Both deletes print nothing.

Terminal window
RECEIPT_HANDLE=$(python3 -c 'import json; print(json.load(open("received.json"))["Messages"][0]["ReceiptHandle"])')
aws --endpoint-url "$VERA_ENDPOINT" sqs delete-message \
--queue-url "$QUEUE_URL" --receipt-handle "$RECEIPT_HANDLE"
aws --endpoint-url "$VERA_ENDPOINT" sqs delete-queue --queue-url "$QUEUE_URL"
rm received.json
  • Queues, created with attributes such as VisibilityTimeout and MessageRetentionPeriod, and deleted. GetQueueAttributes returns a queue’s QueueArn.
  • Send, receive and delete: a received message carries its body and a receipt handle, and deleting with that handle removes it.
  • Batches and purging: in a supplemental test, both messages of a two-message batch send were received, and a batch delete removed them by their receipt handles. PurgeQueue also succeeded.
  • Messages from other services: SNS and EventBridge delivered to local queues.
  • Also served, not yet tested: batch visibility changes, dead-letter source queues, message move tasks, tags and queue permissions.

The main limits are below. A few more apply to every service, and the API coverage notes cover smaller differences.

  • Visibility changes don’t make messages visible. In Vera 1.2.0 preview, ChangeMessageVisibility with a timeout of 0 succeeded, but the message wasn’t returned by the next receive. Its receipt handle still deleted it.
  • No long polling. In Vera 1.2.0 preview, an empty receive with WaitTimeSeconds set to 2 returned in about 0.23 seconds. No long-poll wait was observed.
  • Per-message delays are ignored. In Vera 1.2.0 preview, a message sent to a standard queue with DelaySeconds set to 2 was received at once, before the delay had passed.
  • Content-based deduplication didn’t deduplicate. In Vera 1.2.0 preview, a FIFO queue accepted FifoQueue and ContentBasedDeduplication set to true, but two messages with the same body in the same message group were both returned. Don’t rely on exactly-once delivery, and FIFO ordering wasn’t confirmed either.
  • Not yet verified: retention expiry, quotas, dead-letter moves and concurrent consumers.

AWS describes the intended delay and deduplication behavior in its SendMessage reference.

Every operation in AWS's published 2012-11-05 API (SDK model, botocore 1.43.105), and whether the emulator implements it. Availability combines the earlier implementation inventory with the dated observations below; checking a page's example does not verify every operation. Each note names its evidence first; an observation given without a build or date comes from earlier testing, on 3 November 2026. What the statuses mean

OperationStatusNotes
AddPermissionImplemented
CancelMessageMoveTaskImplemented
ChangeMessageVisibilityKnown differenceLocal observation: Vera 1.2.0 preview, 5 November 2026 — As in earlier testing, a timeout of 0 succeeds, but the message isn't returned by the next receive. Its receipt handle still deletes it.
ChangeMessageVisibilityBatchImplemented
CreateQueueImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — Created a standard queue with VisibilityTimeout and MessageRetentionPeriod, returning an AWS-style queue URL. A FIFO queue with FifoQueue and ContentBasedDeduplication was accepted too, which doesn't establish FIFO semantics: see SendMessage.
DeleteMessageImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — Deleted a received message by its receipt handle, printing nothing.
DeleteMessageBatchImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — Deleted both messages of a two-message batch by their receipt handles.
DeleteQueueImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — Deleted the example's queue, printing nothing.
GetQueueAttributesImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — Returned the queue's QueueArn.
GetQueueUrlImplemented
ListDeadLetterSourceQueuesImplemented
ListMessageMoveTasksImplemented
ListQueueTagsImplemented
ListQueuesImplemented
PurgeQueueImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — A purge request succeeded in a supplemental test.
ReceiveMessageKnown differenceLocal observation: Vera 1.2.0 preview, 5 November 2026 — Returned the example's message with its body and receipt handle. A message made visible again with ChangeMessageVisibility timeout 0 wasn't returned by the next receive. An empty receive with WaitTimeSeconds 2 returned in about 0.23 seconds: no long-poll wait was observed, as earlier source inspection suggested.
RemovePermissionImplemented
SendMessageKnown differenceLocal observation: Vera 1.2.0 preview, 5 November 2026 — A standard-queue message sent with DelaySeconds 2 was received at once, before the delay had passed. On a FIFO queue with ContentBasedDeduplication enabled, two messages with the same body in the same message group were both received, so content-based deduplication didn't apply.
SendMessageBatchImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — Both messages of a two-message batch were sent and received.
SetQueueAttributesImplemented
StartMessageMoveTaskImplemented
TagQueueImplemented
UntagQueueImplemented