TiDB 与 Amazon AppFlow 集成指南
Amazon AppFlow 是一项全托管的 API 集成服务,可用于将软件即服务 (SaaS) 应用与 AWS 服务连接,并安全地传输数据。通过 Amazon AppFlow,你可以在 TiDB 与多种数据提供方之间导入和导出数据,例如 Salesforce、Amazon S3、LinkedIn 和 GitHub。更多信息请参见 AWS 文档中的支持的源和目标应用。
本文档介绍了如何将 TiDB 与 Amazon AppFlow 进行集成,并以集成 TiDB Cloud Starter 集群为例进行说明。
如果你还没有 TiDB 集群,可以创建一个 TiDB Cloud Starter 集群,该集群免费,且大约 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) 用户:
该用户可以通过 access key 访问 AWS。
该用户拥有以下权限:
AWSCertificateManagerFullAccess:用于读写 AWS Secrets Manager。AWSCloudFormationFullAccess:SAM CLI 使用 AWS CloudFormation 来声明 AWS 资源。AmazonS3FullAccess:AWS CloudFormation 使用 Amazon S3 进行发布。AWSLambda_FullAccess:目前,AWS Lambda 是为 Amazon AppFlow 实现新连接器的唯一方式。IAMFullAccess:SAM CLI 需要为连接器创建ConnectorFunctionRole。
一个 SalesForce 账号。
第 1 步:注册 TiDB 连接器
克隆代码
克隆 TiDB 与 Amazon AppFlow 的集成示例代码仓库:
git clone https://github.com/pingcap-inc/tidb-appflow-integration
构建并上传 Lambda
构建包:
cd tidb-appflow-integration mvn clean package(可选)如果你还没有配置 AWS access key ID 和 secret access key,请进行配置。
aws configure将你的 JAR 包上传为 Lambda:
sam deploy --guided如果你看到类似如下输出,说明 Lambda 部署成功。
Successfully created/updated stack - <stack_name> in <region>进入 AWS Lambda 控制台,你可以看到刚刚上传的 Lambda。注意需要在窗口右上角选择正确的 region。

使用 Lambda 注册连接器
在 AWS 管理控制台 中,前往 Amazon AppFlow > Connectors,然后点击 Register new connector。

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

点击 Register。此时,TiDB 连接器注册成功。
第 2 步:创建 flow
前往 Amazon AppFlow > Flows,点击 Create flow。

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

设置源表和目标表
选择 Source details 和 Destination details。TiDB 连接器可以在这两者中使用。
选择源名称。本文档以 Salesforce 作为示例源。

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

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

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

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

在点击 Connect 之前,你需要在 TiDB 中为 Salesforce 的 Account 对象创建一个
sf_account表。注意该表结构与 Tutorial of 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 集群的连接属性。如果你使用的是 TiDB Cloud Starter 集群,需要将 TLS 选项设置为
Yes,这样 TiDB 连接器会使用 TLS 连接。然后点击 Connect。
现在你可以获取到在连接中指定的数据库里的所有表。从下拉列表中选择 sf_account 表。

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

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

本文示例需要以下映射规则(源字段名 -> 目标字段名):
Account ID -> id
Account Name -> name
Account Type -> type
Billing State/Province -> billing_state
Account Rating -> rating
Industry -> industry


(可选)设置过滤器
如果你想为数据字段添加一些过滤条件,可以在此处设置。否则,跳过此步骤,并点击 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策略也已测试并可用。