Migrate to CloudAMQP from AmazonMQ

You’ve been hosting your RabbitMQ cluster on AmazonMQ and now you want to migrate to CloudAMQP?

This guide will walk you through how to do that with queue-federation. Before we jump into the migration steps, let’s clarify some key terms.

Key terms

  • Upstream cluster: This is where messages are published to, initially.
  • Downstream cluster: This is where the messages get forwarded to from the upstream cluster.

In our case, the upstream is the RabbitMQ cluster on AmazonMQ and the downstream is the new RabbitMQ cluster on CloudAMQP you are migrating to.

Next, take the following steps to migrate.

Step 1: Choose a CloudAMQP plan

  • Decide the right CloudAMQP plan for your workload. Our team is happy to make recommendations, if you need help with sizing or general guidance on migrating.

Step 2: Create a downstream cluster

Step 3: Configure VPC peering

  • If you are migrating from a private broker on AmazonMQ, first, create a VPC peering connection between upstream and downstream. Skip this step, if your AmazonMQ cluster is public.

Step 4: Export/Import definitions

We will show you two ways of doing this. Note that definitions can be exported for a specific virtual host or the entire cluster (all virtual host).

First approach: GUI

  • Go to the RabbitMQ console of your AmazonMQ cluster, the upstream → Choose the overview tab → Expand the Export definitions tab →  Click the Download broker definitions  button.

  • Next, go to the RabbitMQ console of your CloudAMQP cluster, the downstream → Choose the overview tab → Expand the Import definitions tab → Choose file to be uploaded, the file exported in the previous step →  Click the Upload broker definitions button.

Second approach: CLI

  • Export definitions with curl via the management API :

    sudo curl -u $user:$password -o /upstream_definitions.json https://b-f627e6bc-b7b1-4c73-b693-6de3512c67da.mq.us-east-2.amazonaws.com/api/definitions

  • Next, upload the downloaded definitions with curl, again:

     sudo curl -i -u $user:$password -H "Content-Type: application/json" -d @/upstream_definitions.json -XPOST https://test-peppy-plum-cougar.rmq6.cloudamqp.com/api/definitions
    

Step 5: Create federation policy

  • In your downstream cluster, create a federation policy either for all queues or selected queues — As an example, we will create a federation policy for the log queues defined in the upstream.

  • To do this, navigate to Admin → Policies and click Add / update a policy to create the policy — Do this in the downstream.

Step 6: Create federation upstream

  • From the management interface of your downstream cluster, go to the  Admin → Federation Upstreams  screen and press  Add a new upstream.  Fill in all information needed. The URI should be the URI of the upstream server.

  • The queues in the downstream should be marked as federated if the policy is applied, like in the image below:

Step 7: Cleanup

Importing definitions also imports set of users and policies— for example, the AWS-DEFAULT-POLICY-SINGLE-INSTANCE automatically defined for all AmazonMQ clusters. You can get rid of these users and policies if you don’t feel the need to keep them.

Step 8: Migrate consumers and publishers

  • Once you can see the federation policy applied on the downstream cluster, move the consumers from the upstream cluster to the downstream cluster. Once consumers are moved, messages will be federated from old to new cluster. Confirm that old cluster is drained.
  • Move publishes to the new clusteron CloudAMQP.

Step 9: Delete AmazonMQ cluster

Once done with all queues, you are ready to delete the federation policy and the Amazon MQ cluster.