

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

# 在 Amazon MQ 中自动化 RabbitMQ 配置
<a name="automate-rabbitmq-configuration-in-amazon-mq"></a>

*Yogesh Bhatia 和 Afroz Khan，Amazon Web Services*

## Summary
<a name="automate-rabbitmq-configuration-in-amazon-mq-summary"></a>

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

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

## 先决条件和限制
<a name="automate-rabbitmq-configuration-in-amazon-mq-prereqs"></a>

**先决条件**
+ AWS Command Line Interface (AWS CLI) [已安装并配置为](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-linux.html)指向您的 AWS 账户
+ Ansible 已安装，因此您可以运行 playbook 来创建配置
+ **rabbitmqadmin** 已安装 (有关说明，请参阅 [RabbitMQ 文档](https://www.rabbitmq.com/management-cli.html))
+ 亚马逊 MQ 中的 RabbitMQ 集群，使用健康的亚马逊指标创建 CloudWatch 

**其他要求**
+ 确保单独为虚拟主机和用户创建配置，而不是作为 JSON 的一部分。
+ 确保配置 JSON 是存储库的一部分并且受版本控制。
+ **rabbitmqadmin** CLI 的版本必须与 RabbitMQ 服务器的版本相同，因此最好的选择是从 RabbitMQ 控制台下载 CLI。
+ 作为管道的一部分，请确保在每次运行之前验证 JSON 语法。

**产品版本**
+ AWS CLI 版本 2.0
+ Ansible 版本 2.9.13
+ **rabbitmqadmin** 版本 3.9.13 (必须与 RabbitMQ 服务器版本相同)

## 架构
<a name="automate-rabbitmq-configuration-in-amazon-mq-architecture"></a>

**源技术堆栈**
+ 在现有本地虚拟机或 Kubernetes 集群（本地或云端）上运行的 RabbitMQ 集群

**目标技术堆栈**
+ Amazon MQ 上针对 RabbitMQ 的自动化 RabbitMQ 配置

**目标架构 **

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

![在 Amazon MQ 中自动化 RabbitMQ 配置](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/294120b6-c95f-4cc5-bf85-5ad7e2abdad5/images/292e1284-5c9e-4c82-bb41-010fa84d8d74.png)


## 工具
<a name="automate-rabbitmq-configuration-in-amazon-mq-tools"></a>

**AWS 服务**
+ [Amazon MQ](https://docs.aws.amazon.com/amazon-mq/) 是托管式消息代理服务，让您可轻松地在云中设置和操作消息代理。
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)利用基础架构即代码，帮助您设置 AWS 基础架构并加快云配置速度。
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)允许您在命令行 sh AWS 服务 ell 中使用命令进行交互。 

**其他工具**
+ [rabbitmqadmin](https://www.rabbitmq.com/management-cli.html) 是基于 RabbitMQ HTTP 的 API 的命令行工具。它用于管理和监控 RabbitMQ 节点和集群。
+ [Ansible](https://www.ansible.com/) 是一款用于自动化应用程序和 IT 基础设施的开源工具。

**代码存储库**

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

## 操作说明
<a name="automate-rabbitmq-configuration-in-amazon-mq-epics"></a>

### 创建您的 AWS 基础架构
<a name="create-your-aws-infrastructure"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在上创建 RabbitMQ 集群。 AWS | 如果您还没有 RabbitMQ 集群，则可以使用在上创建[AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)堆栈。 AWS或者，你可以使用 [Ansible 中的CloudFormation 模块](https://docs.ansible.com/projects/ansible/latest/collections/amazon/aws/cloudformation_module.html)来创建堆栈。使用后一种方法，您可使用 Ansible 完成这两项任务：创建 RabbitMQ 基础设施和管理配置。  | 通用 AWS、Ansible | 

### 创建 Amazon MQ for RabbitMQ 配置
<a name="create-the-amqlong-for-rabbitmq-configuration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建属性文件。 | 下载附件中的 JSON 配置文件 (`rabbitmqconfig.json`)，或者从 RabbitMQ 控制台将其导出。 修改它以配置队列、交换器和绑定。此配置文件演示了以下内容：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/automate-rabbitmq-configuration-in-amazon-mq.html)<br />根据 **rabbitmqadmin** 的要求，这些配置在根 (/) 虚拟主机下执行。  | JSON | 
| 检索适用于 RabbitMQ 的 Amazon MQ 基础设施的详细信息。 | 在上检索 RabbitMQ 基础设施的以下详细信息： AWS[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/automate-rabbitmq-configuration-in-amazon-mq.html)<br />您可以使用 AWS 管理控制台 或 AWS CLI 来检索此信息。这些详细信息使 Ansible 剧本能够连接到您的 AWS 账户 并使用 RabbitMQ 集群来运行命令。运行 Ansible 剧本的计算机必须能够访问您的 AWS 账户，并且 AWS CLI 必须已按*先决条件*部分中所述进行配置。 | 常规 AWS | 
| 创建 `hosts_var` 文件。 | 为 Ansible 创建 `hosts_var` 文件并确保文件中定义了所有变量。考虑使用 Ansible 保管库存储密码。您可按如下方式配置 `hosts_var` 文件（用您的信息替换星号）：<pre>RABBITMQ_HOST: "***********.mq.us-east-2.amazonaws.com"<br />RABBITMQ_VHOST: "/"<br />RABBITMQ_USERNAME: "admin"<br />RABBITMQ_PASSWORD: "*******"</pre> | Ansible | 
| 创建 Ansible Playbook。 | 有关示例 Playbook，请参阅附件中的 `ansible-rabbit-config.yaml`。下载并保存此文件。Ansible playbook 导入并管理应用程序所需所有 RabbitMQ 配置，例如队列、交换和绑定。 <br />遵循 Ansible playbook 的最佳实践，例如保护密码。使用 Ansible Vault 进行密码加密，并从加密文件中检索 RabbitMQ 密码。 | Ansible | 

### 部署配置
<a name="deploy-the-configuration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 运行 Playbook。 | 运行您在上一部操作说明中创建的 Ansible Playbook。<pre>ansible-playbook ansible-rabbit-config.yaml</pre><br />您可在 RabbitMQ 控制台上验证新的配置。 | General AWS、RabbitMQ、Ansible | 

## 相关资源
<a name="automate-rabbitmq-configuration-in-amazon-mq-resources"></a>
+ [从 RabbitMQ 迁移到亚马逊 MQ（博客文章）](https://aws.amazon.com/blogs/compute/migrating-from-rabbitmq-to-amazon-mq/)AWS 
+ [管理命令行工具](https://www.rabbitmq.com/management-cli.html)（RabbitMQ 文档）
+ [创建或删除 AWS CloudFormation 堆栈](https://docs.ansible.com/ansible/latest/collections/amazon/aws/cloudformation_module.html)（Ansible 文档）
+ [将消息驱动的应用程序迁移到 Amazon MQ for RabbitMQ](https://aws.amazon.com/blogs/compute/migrating-message-driven-applications-to-amazon-mq-for-rabbitmq/)（博客文章）AWS 

## 附件
<a name="attachments-294120b6-c95f-4cc5-bf85-5ad7e2abdad5"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/294120b6-c95f-4cc5-bf85-5ad7e2abdad5/attachments/attachment.zip)