当前位置:网站首页>使用 Terraform 在 AWS 上快速部署 MQTT 集群
使用 Terraform 在 AWS 上快速部署 MQTT 集群
2022-07-28 10:50:00 【51CTO】
Terraform 是由 HashiCorp 推出的一个基础设施即代码(IaC)工具,它包括了底层的组件如计算实例、存储和网络,以及高层的组件如 DNS、LBS 等。用户可以使用 Terraform 安全、高效地构建、改变和更新基础设施。
在传统的私有云或公有云部署方式中,用户需要先部署好基础设施(虚拟机、网络和存储等),之后才能开始部署 MQTT 集群。而如果使用 Terraform,用户则可以同时完成这两项工作。此外,同一套工具可以在不同的平台上进行部署,通过模版可重复、可预测的方式定义和配置资源,可大大减少人为因素导致的错误。
本文将以分布式物联网 MQTT 消息服务器 EMQX 为例,采用 AWS 作为公有云平台,介绍如何使用 Terraform 快速部署一个高可用的 MQTT 集群。
Terraform 简介
作为一个管理服务生命周期的工具,Terraform 可以用状态文件记录和跟踪所有环境变化。默认状态是存储在本地的,通过 HCL 或者 JSON 来定义,HCL 是 HashiCorp 提供的模板语言。

- Coding:用 HCL 来编写基础设施代码。可以定义块,参数和表达式。
- Plan:运行 Terraform Plan 来检查执行计划是否符合期望。
- Apply:运行 Terraform Apply 来构建用户所需的基础设施
安装与准备
安装 Terraform
以 Mac 为例,通过 brew 安装。
验证安装
具体参考 官方文档
安装 AWS Cli
以 Mac 为例
验证安装
参考 官方文档
添加用户
- 进入 AWS 的 IAM 菜单,点击“添加用户”

- 在添加用户中,记得勾选“访问密钥”

- 选择“创建组”

- 在创建组中添加“AdministratorAccess”策略

- 点击“创建用户”,完成用户添加

- 获取 Access Key 和 Secret

配置 AWS 的 Access Key
拿到上面创建好的access key和secret,设置环境变量
使用 Terraform 在 AWS 上部署 EMQX 集群
下载 AWS 部署脚本
部署脚本说明:
- 暂时不支持 EMQX 5.X
- AWS CLI:aws-cli/2.2.41 Python/3.8.8 Darwin/21.4.0 exe/x86_64 prompt/off
脚本配置文件路径:
- 单机部署配置文件:services/emqx/terraform.tfvars
- 集群部署配置文件:services/emqx_cluster/terraform.tfvars
部署脚本默认使用以下配置,读者可根据实际情况自行修改 terraform.tfvars 文件:
- 默认 EMQX 版本:企业版 4.4.3
如果要部署开源版,需要修改
emqx_package 值,比如部署开源版 4.4.3:https://www.emqx.com/en/downloads/broker/v4.4.3/emqx-4.4.3-otp23.3.4.9-3-ubuntu20.04-amd64.zip
- 默认AWS Region 为us-east-1
- 默认集群节点:3台
t3.small
部署 EMQX 集群
用户可以通过修改terraform.tfvars文件,来更改默认的配置
等待几分钟,部署完成的结果如下所示

验证 EMQX 集群部署结果
集群部署成功后,我们可以简单测试集群是否已正常运行。先从上图获取到集群的IP 地址,并通过以下信息访问 EMQX 企业版的 Dashboard。
用户名:
admin密码:
public
http://tf-elb-nlb-5bff6976b15586dd.elb.us-east-1.amazonaws.com:18083

从上图可以看到我们部署了 3 个节点,这时可以通过 Websocket 工具进行简单验证:
- 左边菜单栏选择工具→WebSocket

- 点击“连接”

- 订阅主题

- 点击发布,正常能看到如下结果

结语
至此,我们完成了通过 Terraform 在 AWS 上快速部署 MQTT 集群的全部流程。读者可根据实际情况修改部署脚本,创建满足自己业务需求的 EMQX 集群,借助 EMQX 在物联网数据连接、移动与处理方面的优势构建具有竞争力的物联网平台与应用。
参考:
代码仓库: https://github.com/emqx/terraform-emqx-emqx-aws
EMQX Terraform模块官方文档: https://docs.emqx.com/zh/emqx-terraform/latest
版权声明: 本文为 EMQ 原创,转载请注明出处。
原文链接: https://www.emqx.com/zh/blog/deploy-mqtt-cluster-on-aws-using-terraform
边栏推荐
- RHEL 6.4 安装svn和apache
- JWT login authentication + token automatic renewal scheme, well written!
- leetcode:981. 基于时间的键值存储【迭代for的陷阱:on】
- Bc35 NB module at instruction development summary
- 几个数据库的相关概念
- 低代码(aPaas)为什么最近又火了?
- Jianzhi offer 09. realize queue with two stacks
- Why should coding and modulation be carried out before transmission
- Question of hanging the interviewer
- Preliminary understanding of float
猜你喜欢

PHP发送移动MAS短信乱码的解决方法
Microsoft security team found an Austrian company that used windows Zero Day vulnerability to sell spyware

Remote shutdown of computer with mobile phone

Purchase, sale and inventory software suitable for small and medium-sized enterprises to solve five major problems

1天涨粉81W,打造爆款短视频的秘诀是什么?

leetcode:981. 基于时间的键值存储【迭代for的陷阱:on】

21. Merge two ordered linked lists

本地化、低时延、绿色低碳:阿里云正式启用福州数据中心

Reading these six books makes learning MySQL easier

Sword finger offer 30. stack containing min function
随机推荐
Nodejs: return value of mongodb after successful insertion
The solution of PHP sending mobile MAS SMS garbled code
Use the statement object to execute DDL statements to create tables
Microsoft security team found an Austrian company that used windows Zero Day vulnerability to sell spyware
Inventory: exciting data visualization chart
Understanding of the return value of the structure pointer function passed to the structure pointer
LiteSpeed Web服务器中安装SSL证书
使用共用体union及指针测试大小端
Installation points and precautions of split angle probe
Question of hanging the interviewer
Why should coding and modulation be carried out before transmission
Inventory: 6 books teach you the necessary skills for career promotion
五面阿里技术专家岗,已拿offer,这些面试题你能答出多少
内存操作函数memcpy()和memmove()的用法
机器学习强基计划0-5:为什么学习的本质是泛化能力?
Summary of the second semester of junior year
Offsetof macro and container_ Of macro analysis details
float浮动初步理解
Usage of memory operation functions memcpy() and memmove()
02.1.2. logic type bool