在 Amazon MQ 中自动化 RabbitMQ 配置 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 Amazon MQ 中自动化 RabbitMQ 配置

由 Yogesh Bhatia(AWS) 和 Afroz Khan(AWS) 编写

环境:PoC 或试点

技术:消息和通信 DevOps;基础架构

AWS 服务:亚马逊 MQ;AWS CloudFormation

Summary

Amazon MQ 是一项托管式消息代理服务,可兼容许多常见消息代理。将 Amazon MQ 与 RabbitMQ 配合使用可提供一个在 Amazon Web Services (AWS) Cloud 中管理的强大的 RabbitMQ 集群,其中包含多个代理和配置选项。Amazon MQ 提供了高度可用、安全且可扩展的基础设施,并且每秒可以轻松处理大量消息。多个应用程序可以使用具有不同虚拟主机、队列和交换器的基础设施。但是,管理这些配置选项或手动创建基础设施,可能需要时间和精力。此示例介绍了一种通过单个文件一步管理 RabbitMQ 配置的方法。您可将此模式提供的代码嵌入到任何持续集成(CI)工具(例如 Jenkins 或 Bamboo)中。 

您可使用此模式来配置任何 RabbitMQ 集群。它所需要的只是连接至集群。尽管还有许多其他方法可以管理 RabbitMQ 配置,但此解决方案只需一步即可创建整个应用程序配置,因此您可轻松管理队列和其他细节。

先决条件和限制

先决条件

  • AWS 命令行界面(AWS CLI)已安装并配置为指向您的 Amazon Web Services account(有关说明,请参阅 AWS CLI 文档

  • Ansible 已安装,因此您可以运行 playbook 来创建配置

  • rabbitmqadmin 已安装 (有关说明,请参阅 RabbitMQ 文档)

  • 亚马逊 MQ 中的 RabbitMQ 集群,使用健康的亚马逊指标创建 CloudWatch

其他要求

  • 确保单独为虚拟主机和用户创建配置,而不是作为 JSON 的一部分。

  • 确保配置 JSON 是存储库的一部分并且受版本控制。

  • rabbitmqadmin CLI 的版本必须与 RabbitMQ 服务器的版本相同,因此最好的选择是从 RabbitMQ 控制台下载 CLI。

  • 作为管道的一部分,请确保在每次运行之前验证 JSON 语法。

产品版本

  • AWS CLI 版本 2.0

  • Ansible 版本 2.9.13

  • rabbitmqadmin 版本 3.9.13 (必须与 RabbitMQ 服务器版本相同)

架构

源技术堆栈

  • 在现有本地虚拟机或 Kubernetes 集群(本地或云端)上运行的 RabbitMQ 集群

目标技术堆栈

  • Amazon MQ 上针对 RabbitMQ 的自动化 RabbitMQ 配置

目标架构

配置 RabbitMQ 的方法有很多种。此模式使用导入配置功能,其单个 JSON 文件包含所有配置。此文件应用所有设置,并且可以由 Bitbucket 或 Git 等版本控制系统管理。此模式使用 Ansible 通过 rabbitmqadmin CLI 实现配置。

在 Amazon MQ 中自动化 RabbitMQ 配置

工具

工具

  • rabbitmqadmin 是基于 RabbitMQ HTTP 的 API 的命令行工具。它用于管理和监控 RabbitMQ 节点和集群。

  • Ansible 是一款用于自动化应用程序和 IT 基础设施的开源工具。

  • AWS CLI 让您能够在命令行 Shell 中使用命令与 Amazon Web Services 进行交互。 

Amazon Web Services

  • Amazon MQ 是托管式消息代理服务,让您可轻松地在云中设置和操作消息代理。

  • AWS 利用基础设施即代码, CloudFormation帮助您设置 AWS 基础设施并加快云配置速度。

代码

附件中提供了此模式中使用的 JSON 配置文件和示例 Ansible playbook。

操作说明

任务描述所需技能

在 AWS 中创建一个 RabbitMQ 集群。

如果您还没有 RabbitMQ 集群,则可以使用 AWS 在 AW S CloudFormation 上创建堆栈。或者,您可以使用 Ansible 中的 Cloudformation 模块创建堆栈。使用后一种方法,您可使用 Ansible 完成这两项任务:创建 RabbitMQ 基础设施和管理配置。 

AWS CloudFormation、Ansible
任务描述所需技能

创建属性文件。

下载附件中的 JSON 配置文件 (rabbitmqconfig.json),或者从 RabbitMQ 控制台将其导出。 修改它以配置队列、交换器和绑定。此配置文件演示了以下内容:

- 创建两个队列:sample-queue1sample-queue2 

- 创建两个交易所:sample-exchange1sample-exchange2

- 实现队列和交换之间的绑定

根据 rabbitmqadmin 的要求,这些配置在根 (/) 虚拟主机下执行。 

JSON

检索适用于 RabbitMQ 的 Amazon MQ 基础设施的详细信息。

检索 AWS 上的 RabbitMQ 基础设施的以下详细信息:

  • 代理名称

  • RabbitMQ 主机

  • RabbitMQ 用户名(在创建集群时创建的管理员用户)

  • RabbitMQ 密码

您可使用 AWS 管理控制台 或 AWS CLI 来检索此信息。这些详细信息使 Ansible playbook 能够连接到您的 Amazon Web Services account 并使用 RabbitMQ 集群来运行命令。

重要提示:运行 Ansible Playbook 的计算机必须能够访问您的 Amazon Web Services account,并且 AWS CLI 必须已经配置,如先决条件部分所述。

AWS CLI、Amazon MQ

创建 hosts_var 文件。

为 Ansible 创建 hosts_var 文件并确保文件中定义了所有变量。考虑使用 Ansible 保管库存储密码。您可按如下方式配置 hosts_var 文件(用您的信息替换星号):

RABBITMQ_HOST: "***********.mq.us-east-2.amazonaws.com" RABBITMQ_VHOST: "/" RABBITMQ_USERNAME: "admin" RABBITMQ_PASSWORD: "*******"
Ansible

创建 Ansible Playbook。

有关示例 Playbook,请参阅附件中的 ansible-rabbit-config.yaml。下载并保存此文件。Ansible playbook 导入并管理应用程序所需所有 RabbitMQ 配置,例如队列、交换和绑定。 

遵循 Ansible playbook 的最佳实践,例如保护密码。使用 Ansible Vault 进行密码加密,并从加密文件中检索 RabbitMQ 密码。

Ansible
任务描述所需技能

运行 Playbook。

运行您在上一部操作说明中创建的 Ansible Playbook。

ansible-playbook ansible-rabbit-config.yaml

您可在 RabbitMQ 控制台上验证新的配置。

RabbitMQ、Amazon MQ、Ansible

相关资源

附件

要访问与此文档相关联的其他内容,请解压以下文件:attachment.zip