Skip to content

Using a local mock SQS server

Pablo Cantero edited this page Apr 14, 2017 · 9 revisions

It is possible to configure Shoryuken to use a local mock SQS server implementation in place of Amazon's real SQS. This is useful, for example, when doing local development without an Internet connection.

This guide will help you to configure one such mock SQS service implementation, moto. We'll set up aws-sdk-ruby and shoryuken to use moto instead of the real SQS provided by AWS.

Download and install moto

At the time of writing, the most recent version of moto published on PyPi is 0.4.31. This version does not contain the fixes that make it possible to use the SQS implementation in moto from the AWS SDK for Ruby. For now, doing local SQS development with moto requires cloning the moto repository and installing it ourselves.

git clone git@github.com:spulec/moto.git
cd moto
make init

To run it:

moto_server sqs -p 4576

Upgrade aws-sdk

To use a local SQS server, you must be running aws-sdk version 2.2.15 or later. If your version of aws-sdk is older, update it.

bundle update aws-sdk

Configure Shoryuken to use moto

We'll need to change the :sqs_endpoint key of Shoryuken's AWS config to point to your local moto instance. We'll also have to disable MD5 checks from send_message* calls in the AWS SDK.

Configure Client

Shoryuken.configure_client do |config|
  config.sqs_client = Aws::SQS::Client.new(
    region: ENV["AWS_REGION"],
    access_key_id: ENV["AWS_ACCESS_KEY_ID"],
    secret_access_key: ENV["AWS_SECRET_ACCESS_KEY"],
    endpoint: 'http://localhost:4576',
    verify_checksums: false
  )
end

Configure Server

Shoryuken.configure_server do |config|
  config.sqs_client = Aws::SQS::Client.new(
    region: ENV["AWS_REGION"],
    access_key_id: ENV["AWS_ACCESS_KEY_ID"],
    secret_access_key: ENV["AWS_SECRET_ACCESS_KEY"],
    endpoint: 'http://localhost:4576',
    verify_checksums: false
  )
end