# 数据集成简介


作为全托管的 MQTT 消息云服务，EMQX Cloud 通过 MQTT 协议连接物联网设备并实时传递消息。在此基础上，数据集成为 EMQX Cloud 引入了与云资源的连接，从而实现设备与其他业务系统的无缝集成。EMQX Cloud 数据集成不仅提供了一个清晰灵活的"可配置"架构解决方案，而且还简化了开发过程，提高了用户的可用性，降低了业务系统和 EMQX Cloud 之间的耦合程度，提供了一个更优秀的数据转发的基础架构。

![data_integration_intro](./_assets/integration_intro_01.png)

## 工作原理

EMQX Cloud 数据集成是一个开箱即用的功能。设备通过 MQTT 协议连接到 EMQX 部署并发送消息流和上报设备事件。借助内置的规则引擎，部署接收到的消息数据会由规则引擎中定义的规则进行处理，之后规则将触发一个动作，通过配置的连接器将处理后的数据转发到云资源。您可以在部署中的数据集成页面中轻松创建连接器、规则、添加动作，无需任何编码工作。

### [连接器](./connectors.md)

连接器关联了您从云平台购买的云服务产品，可以是 Kafka 这样的消息队列服务，也可以是 RDS 存储服务。“连接器”等同与专有版数据集成中的“资源”，用于连接由云服务商提供的服务。

### [规则](./rules.md)

规则描述了「数据从哪里来」和「如何筛选并处理数据」。规则使用类 SQL 语句来自定义编写数据，并且可以使用 SQL 测试来模拟导出的数据。想要学习和了解如何编写规则 SQL，参阅[规则 SQL 编写](./rule-sql-syntax.md)。

### [动作](./rules.md#添加动作)

动作解决了「处理后的数据到哪里去」，一个规则可以对应一个或者多个动作，动作关联定义好的连接器，也就是将处理后的数据发送到哪个服务。

#### 输出动作

输出动作是数据输出组件，被添加到规则的动作中，规则引擎处理完成后的数据将被转发到指定的输出动作，你可以在输出动作中配置数据的操作方式，例如使用 `${var}` 或者 `${.var}` 语法从数据中提取变量，动态生成 SQL 语句或数据模板，再通过连接器发送到外部数据系统，实现消息存储、数据更新和事件通知等操作。

在输出动作中支持的变量提取语法如下：

- `${var}`：这种语法用于从规则的输出结果中提取变量，例如 `${topic}`。如果您想要提取嵌套的变量，可以使用 `.`， 例如 `${payload.temp}`。请注意，如果输出结果中不包含您想要提取的变量，您将得到 `undefined` 字符串。
- `${.var}`：这种语法首先会尝试从规则的输出结果中提取变量，如果输出结果中不存在这个变量，它会尝试从对应的事件数据中提取，例如 `${.topic}`。同样也也支持使用 `.` 来提取嵌套的变量，例如 `${.payload.temp}`。如果规则输出结果和事件数据中都不存在您想要提取的变量，您将得到 `undefined` 字符串。您也可以使用 `${.}` 来提取规则输出结果和事件数据合并后的所有变量。

#### 输入动作

输入动作是数据输入组件，作为规则的[数据源](../rule_engine/rule_engine_events.md)，通过规则 SQL 进行选择。

输入动作从外部 MQTT 或 Kafka 等外部数据系统订阅或消费消息，当新的消息通过连接器到达 EMQX 部署时，规则引擎将匹配并执行相应规则，对数据进行筛选和处理，处理完成后的数据可以发布到指定 EMQX 部署主题中，实现云端指令下发等操作。

## 创建流程

以下是创建数据集成的基本流程：

![data_integration_intro](./_assets/integration_intro_02.png)

1. 选定或创建一个“连接器”。您可以从数据集成的初始页面选择需要集成的连接服务并配置连接器。
2. 创建规则来处理从设备上收集的数据。该规则可以通过使用 SQL 语句，以你想要的方式收集和处理数据。
3. 将动作添加到规则上。当规则触发动作后，经处理的数据将通过配置的连接器被转发到云资源。
4. 测试创建的数据集成是否能正常运行。

## 不同部署的网络设置

不同部署的数据集成功能需要不同级别的数据源访问和网络连接。

**Serverless 部署**

- 数据源仅支持公网访问。因此，在创建数据源之前，您需要确保数据源具备公网访问能力，并打开安全组。

- 仅支持 Kafka 和 HTTP Server 连接器。

- Serverless 部署的数据集成采用按需付费模式，具体说明如下：

  EMQX Serverless 为用户提供数据集成的免费额度：每月最多1百万次规则动作执行数。超过免费额度之外的部分，将以 ¥1.80 每百万次规则动作执行数进行计费。

  为了保持最佳性能和可管理性，EMQX Cloud 对每个部署创建的连接器、规则和动作施加以下限制：

  | 配额名称               | 限制数 |
  | ---------------------- | ------ |
  | 可创建的连接器数量     | 2      |
  | 可创建的规则数量       | 4      |
  | 单条规则关联的动作数量 | 1      |

**专有版部署**

- 建议通过内部网络访问数据源。因此，在创建之前，您需要首先配置 [VPC 对等连接](../deployments/vpc_peering.md)并打开安全组。
- 如果您需要通过公网访问，可以启用 [NAT 网关](../vas/nat-gateway.md)。

**BYOC 部署**

:::tip 提示
BYOC 部署无法在控制台上进行数据集成配置。请使用 [EMQX 管理控制台](../deployments/byoc_management.md)进行配置。
:::

- 建议通过内部网络访问数据源，以提高网络安全性和性能。在创建之前，您需要在公有云控制台中配置资源所在的 VPC 与 BYOC 部署所在的 VPC 之间的对等连接，并打开相关安全组。相关步骤，请参考[创建 VPC 对等连接](../deployments/byoc_vpc_peering.md)部分。
- 如果您需要通过公网访问资源，请在您的公有云控制台为 BYOC 部署所在的 VPC 配置 NAT 网关。
