Replace AWS SQS & SNS with KubeMQ
Point your AWS SDK or LocalStack-style endpoint at KubeMQ's drop-in SQS/SNS connector — no rewrite; verify with the aws CLI or boto3.
Your AWS SDK (or an existing LocalStack-style setup) already talks SQS and SNS over HTTP — point its endpoint at KubeMQ and everything else — SDK, code, request shapes — stays the same.
Drop-in level: endpoint-only (legend)
1 · Enable the connector
The AWS connector is disabled by default — enable it and publish its port:
docker run -d \ --name kubemq \ -p 4566:4566 \ -p 50000:50000 \ -e KUBEMQ_TOKEN=YOUR_LICENSE_KEY \ -e CONNECTORS_AWS_ENABLE=true \ europe-docker.pkg.dev/kubemq/images/kubemq:nextPort 4566 is the AWS SDK endpoint_url / LocalStack-style convention
(Connectors.Aws.Port on the client side) — not a fixed broker listener, so it
doesn't appear in KubeMQ's shared port tables. That's not a typo.
2 · Point your client at KubeMQ
# No endpoint override; the SDK talks to the regional AWS endpoint.export AWS_ENDPOINT_URL_SQS=http://localhost:4566
export AWS_ENDPOINT_URL_SNS=http://localhost:4566
export AWS_ACCESS_KEY_ID=test
export AWS_SECRET_ACCESS_KEY=test
export AWS_DEFAULT_REGION=us-east-1 # any value works; not enforcedOr override the endpoint per-client in boto3:
import boto3
sqs = boto3.client(
"sqs",
endpoint_url="http://localhost:4566",
region_name="us-east-1",
aws_access_key_id="test",
aws_secret_access_key="test",
)Dummy credentials are still required — the connector's accept-any mode doesn't verify the signature value, but the SDK must still form a syntactically valid SigV4 request.
3 · Smoke test
Adapted from the AWS connector's verification smoke test:
import boto3
sqs = boto3.client(
"sqs",
endpoint_url="http://localhost:4566",
region_name="us-east-1",
aws_access_key_id="test",
aws_secret_access_key="test",
)
queue_url = sqs.create_queue(QueueName="smoke-test")["QueueUrl"]
sqs.send_message(QueueUrl=queue_url, MessageBody="smoke-test-payload")
resp = sqs.receive_message(QueueUrl=queue_url, WaitTimeSeconds=5)
msg = resp["Messages"][0]
assert msg["Body"] == "smoke-test-payload"
sqs.delete_message(QueueUrl=queue_url, ReceiptHandle=msg["ReceiptHandle"])
print("Smoke test PASSED.")You should see:
Smoke test PASSED.What carries over — and what doesn't
Your AWS SDK/CLI, code, and the SQS/SNS wire protocol carry over unchanged — only the endpoint moves. Existing queues/topics are not auto-migrated (recreate them against KubeMQ) and a few AWS features (SNS email/SMS/Lambda subscriptions, connector-side TLS) aren't supported — see the deviations list below.
AWS connector getting started
The full round-trip walkthrough — SQS, SNS fan-out, and every language SDK.
Migrating from AWS SQS/SNS
The full cutover guide — compatibility matrix, deviations, and security.
Didn't work?
- Connection refused — the connector is opt-in; confirm
CONNECTORS_AWS_ENABLE=truewas set when the container started. - "missing credentials" from the SDK — accept-any mode still requires a
syntactically valid SigV4 request; set dummy
AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY/ region even though their values aren't checked. - Wrong port — the AWS connector listens on
4566, not a broker port you may already have mapped (gRPC50000, REST9090, dashboard8080).
Was this page helpful?
Replace RabbitMQ with KubeMQ
Get your RabbitMQ (AMQP 0-9-1) app running on KubeMQ in three steps — enable the connector, swap the connection string, verify.
Replace MQTT with KubeMQ
Change your MQTT broker host to KubeMQ's drop-in connector — 3.1.1 and 5.0 clients connect unchanged; verify with mosquitto.