将 TiDB 集成到 Amazon AppFlow
Amazon AppFlow 是一项全托管的 API 集成服务,你可以用它将你的 SaaS 应用程序与 AWS 服务连接,并安全地传输数据。通过 Amazon AppFlow,你可以在 TiDB 与多种数据提供方之间导入和导出数据,例如 Salesforce、Amazon S3、LinkedIn 和 GitHub。更多信息请参见 AWS 文档中的 Supported source and destination applications。
本文档介绍了如何将 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策略也已测试并可用。