当前位置:网站首页>使用 Terraform 在 AWS 上快速部署 MQTT 集群
使用 Terraform 在 AWS 上快速部署 MQTT 集群
2022-07-25 15:56:00 【EMQX】
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 安装。
brew tap hashicorp/tap 2brew install hashicorp/tap/terraform
验证安装
terraform -help
具体参考官方文档
安装 AWS Cli
以 Mac 为例
curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /
验证安装
which aws
aws --version
参考官方文档
添加用户
进入 AWS 的 IAM 菜单,点击“添加用户”

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

选择“创建组”

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

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

获取 Access Key 和 Secret

配置 AWS 的 Access Key
拿到上面创建好的access key和secret,设置环境变量
AWS_ACCESS_KEY_ID: ${anaccesskey}
AWS_SECRET_ACCESS_KEY: ${asecretkey}
使用 Terraform 在 AWS 上部署 EMQX 集群
下载 AWS 部署脚本
git clone "https://github.com/emqx/terraform-emqx-emqx-aws.git"
部署脚本说明:
- 暂时不支持 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文件,来更改默认的配置
cd services/emqx_cluster
terraform init
terraform plan
terraform apply -auto-approve
等待几分钟,部署完成的结果如下所示

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

从上图可以看到我们部署了 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
边栏推荐
- mysql 隔离级别事务
- Product upgrade observation station in June
- Release of v6.5.1/2/3 series of versions of Xingyun housekeeper: the ability of database OpenAPI continues to be strengthened
- 面试8家公司,1周拿了5个offer,分享一下自己的心得
- 报表工具的二次革命
- Data system partition design - partition and secondary index
- Is there only one lib under JDBC in Seata?
- # JWT 图解
- How Google cloud disk is associated with Google colab
- MySQL 悲观锁
猜你喜欢

Ml image depth learning and convolution neural network

Equivalent change of resistance circuit (Ⅱ)

Ice 100g network card fragment message hash problem

Redis distributed lock, it's really impossible without it

如何构建面向海量数据、高实时要求的企业级OLAP数据引擎?

General test case writing specification

SVD singular value decomposition derivation and application and signal recovery

【服务器数据恢复】HP EVA服务器存储意外断电导致RAID信息丢失的数据恢复案例

用GaussDB(for Redis)存画像,推荐业务轻松降本60%

Implementation of recommendation system collaborative filtering in spark
随机推荐
通用测试用例写作规范
共2600页!又一份神级的面试手册面世~
Product dynamics - Android 13 high-efficiency adaptation new upgrade
Okaleido launched the fusion mining mode, which is the only way for Oka to verify the current output
Matlab -- CVX optimization kit installation
BSC smart chain contract mode system development details
Analysis and solution of data and clock mismatch delay in SPI transmission
MySQL tutorial 65 data in MySQL operation table
Record Locks(记录锁)
MySQL table write lock
mysql 表读锁
阿唐的小帮手
Pytoch framework exercise (based on kaggle Titanic competition)
Mysql读写锁
mysql 隔离级别事务
What is a physical firewall? What's the effect?
Why is preparestatement better and safer?
30行自己写并发工具类(Semaphore, CyclicBarrier, CountDownLatch)
报表工具的二次革命
Crazy God redis notes 12