将 TiDB 集成到 Amazon AppFlow
Amazon AppFlow 是一项全托管的 API 集成 service,可用于将你的 SaaS 应用程序与 AWS service 连接,并安全地传输数据。通过 Amazon AppFlow,你可以在 TiDB 与多种数据提供方之间导入和导出数据,例如 Salesforce、Amazon S3、LinkedIn 和 GitHub。更多信息请参见 AWS 文档中的 Supported source and destination applications。
本文档介绍如何将 TiDB 集成到 Amazon AppFlow,并以集成 TiDB Cloud Starter cluster 为例。
如果你还没有 TiDB cluster,可以创建一个 TiDB Cloud Starter cluster,该 cluster 免费且大约 30 秒即可创建完成。
前置条件
JDK 11 或更高版本
Maven 3.8 或更高版本
AWS CLI 版本 2
AWS Serverless Application Model Command Line Interface (AWS SAM CLI) 1.58.0 或更高版本
一个满足以下要求的 AWS Identity and Access Management (IAM) user:
该 user 可以通过 access key 访问 AWS。
该 user 需要具备以下权限:
AWSCertificateManagerFullAccess:用于读写 AWS Secrets Manager。AWSCloudFormationFullAccess:SAM CLI 使用 AWS CloudFormation 来声明 AWS 资源。AmazonS3FullAccess:AWS CloudFormation 使用 Amazon S3 进行发布。AWSLambda_FullAccess:目前,AWS Lambda 是为 Amazon AppFlow 实现新 connector 的唯一方式。IAMFullAccess:SAM CLI 需要为 connector 创建ConnectorFunctionRole。
一个 SalesForce account。
步骤 1. 注册 TiDB connector
克隆代码
克隆 TiDB 与 Amazon AppFlow 的 集成示例代码仓库:
git clone https://github.com/pingcap-inc/tidb-appflow-integration
构建并上传 Lambda
构建 package:
cd tidb-appflow-integration mvn clean package(可选)如果尚未配置 AWS access key ID 和 secret access key,请进行配置。
aws configure将 JAR package 作为 Lambda 上传:
sam deploy --guided如果你看到如下类似输出,说明 Lambda 已成功部署。
Successfully created/updated stack - <stack_name> in <region>进入 AWS Lambda 控制台,你可以看到刚刚上传的 Lambda。请注意需要在窗口右上角选择正确的 region。

使用 Lambda 注册 connector
在 AWS 管理控制台 中,导航到 Amazon AppFlow > Connectors,点击 Register new connector。

在 Register a new connector 对话框中,选择你上传的 Lambda function,并使用 connector 名称指定 connector label。

点击 Register,此时 TiDB connector 注册成功。
步骤 2. 创建 flow
导航到 Amazon AppFlow > Flows,点击 Create flow。

设置 flow 名称
输入 flow 名称,然后点击 Next。

设置 source 和 destination 表
选择 Source details 和 Destination details。TiDB connector 可用于两者。
选择 source 名称。本文以 Salesforce 作为示例 source。

注册 Salesforce 后,Salesforce 会在你的平台中添加一些示例数据。接下来的步骤将以 Account 对象作为示例 source 对象。

点击 Connect。
在 Connect to Salesforce 对话框中,指定该连接的名称,然后点击 Continue。

点击 Allow,确认 AWS 可以读取你的 Salesforce 数据。

在 Destination details 区域,选择 TiDB-Connector 作为 destination。此时会显示 Connect 按钮。

在点击 Connect 之前,需要在 TiDB 中为 Salesforce 的 Account 对象创建
sf_account表。注意该表结构与 Amazon AppFlow 教程 中的示例数据不同。CREATE TABLE `sf_account` ( `id` varchar(255) NOT NULL, `name` varchar(150) NOT NULL DEFAULT '', `type` varchar(150) NOT NULL DEFAULT '', `billing_state` varchar(255) NOT NULL DEFAULT '', `rating` varchar(255) NOT NULL DEFAULT '', `industry` varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (`id`) );创建好
sf_account表后,点击 Connect,会弹出连接对话框。在 Connect to TiDB-Connector 对话框中,输入 TiDB cluster 的连接属性。如果你使用 TiDB Cloud Starter cluster,需要将 TLS 选项设置为
Yes,以便 TiDB connector 使用 TLS 连接。然后点击 Connect。
现在你可以获取到指定 database 下的所有表。从下拉列表中选择 sf_account 表。

下图展示了将 Salesforce Account 对象数据传输到 TiDB 的
sf_account表的配置:
在 Error handling 区域,选择 Stop the current flow run。在 Flow trigger 区域,选择 Run on demand 触发类型,表示需要手动运行 flow。然后点击 Next。

设置映射规则
将 Salesforce 中 Account 对象的 field 映射到 TiDB 的 sf_account 表,然后点击 Next。
sf_account表在 TiDB 中是新建的,当前为空。test> SELECT * FROM sf_account; +----+------+------+---------------+--------+----------+ | id | name | type | billing_state | rating | industry | +----+------+------+---------------+--------+----------+ +----+------+------+---------------+--------+----------+设置映射规则时,可以在左侧选择 source field 名称,右侧选择 destination field 名称。然后点击 Map fields,即可设置一条规则。

本文档需要以下映射规则(Source field name -> Destination field name):
Account ID -> id
Account Name -> name
Account Type -> type
Billing State/Province -> billing_state
Account Rating -> rating
Industry -> industry


(可选)设置过滤器
如果你希望为数据 field 添加过滤器,可以在此设置。否则跳过此步骤,点击 Next。

确认并创建 flow
确认即将创建的 flow 信息。如果一切无误,点击 Create flow。

步骤 3. 运行 flow
在新建 flow 的页面右上角,点击 Run flow。

下图展示了 flow 成功运行的示例:

查询 sf_account 表,可以看到 Salesforce Account 对象的数据已写入该表:
test> SELECT * FROM sf_account;
+--------------------+-------------------------------------+--------------------+---------------+--------+----------------+
| id | name | type | billing_state | rating | industry |
+--------------------+-------------------------------------+--------------------+---------------+--------+----------------+
| 001Do000003EDTlIAO | Sample Account for Entitlements | null | null | null | null |
| 001Do000003EDTZIA4 | Edge Communications | Customer - Direct | TX | Hot | Electronics |
| 001Do000003EDTaIAO | Burlington Textiles Corp of America | Customer - Direct | NC | Warm | Apparel |
| 001Do000003EDTbIAO | Pyramid Construction Inc. | Customer - Channel | null | null | Construction |
| 001Do000003EDTcIAO | Dickenson plc | Customer - Channel | KS | null | Consulting |
| 001Do000003EDTdIAO | Grand Hotels & Resorts Ltd | Customer - Direct | IL | Warm | Hospitality |
| 001Do000003EDTeIAO | United Oil & Gas Corp. | Customer - Direct | NY | Hot | Energy |
| 001Do000003EDTfIAO | Express Logistics and Transport | Customer - Channel | OR | Cold | Transportation |
| 001Do000003EDTgIAO | University of Arizona | Customer - Direct | AZ | Warm | Education |
| 001Do000003EDThIAO | United Oil & Gas, UK | Customer - Direct | UK | null | Energy |
| 001Do000003EDTiIAO | United Oil & Gas, Singapore | Customer - Direct | Singapore | null | Energy |
| 001Do000003EDTjIAO | GenePoint | Customer - Channel | CA | Cold | Biotechnology |
| 001Do000003EDTkIAO | sForce | null | CA | null | null |
+--------------------+-------------------------------------+--------------------+---------------+--------+----------------+
注意事项
- 如果遇到问题,可以在 AWS 管理控制台的 CloudWatch 页面查看日志。
- 本文档步骤基于 Building custom connectors using the Amazon AppFlow Custom Connector SDK。
- TiDB Cloud Starter 不是 生产环境。
- 为避免篇幅过长,本文示例仅展示了
Insert策略,Update和Upsert策略也已测试且可用。