将 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 Serverless 集群为例。
如果你没有 TiDB 集群,可以创建一个 TiDB Cloud Serverless 集群,该集群免费且大约在 30 秒内即可创建完成。
前提条件
JDK 11 或以上
Maven 3.8 或以上
AWS CLI 版本 2
AWS Serverless Application Model Command Line Interface (AWS SAM CLI) 1.58.0 或以上
一个具有以下权限的 AWS 身份与访问管理(IAM)用户:
用户可以使用 访问密钥 访问 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 访问密钥 ID 和密钥,请进行配置。
aws configure将 JAR 包作为 Lambda 上传:
sam deploy --guided如果看到类似如下的输出,说明 Lambda 已成功部署。
Successfully created/updated stack - <stack_name> in <region>进入 AWS Lambda 控制台,可以看到你刚刚上传的 Lambda。注意需要在右上角选择正确的区域。
使用 Lambda 注册连接器
在 AWS 管理控制台,导航到 Amazon AppFlow > Connectors,点击 Register new connector。
在 Register a new connector 对话框中,选择你上传的 Lambda 函数,并用连接器名称指定连接器标签。
点击 Register。此时,TiDB 连接器注册成功。
第 2 步:创建数据流
导航到 Amazon AppFlow > Flows,点击 Create 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 中创建一个
sf_account
表,用于存储 Salesforce 的 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 集群的连接属性。如果使用 TiDB Cloud Serverless 集群,需要将 TLS 选项设置为
Yes
,以启用 TLS 连接。然后点击 Connect。现在可以获取你指定连接的数据库中的所有表。从下拉列表中选择 sf_account 表。
下图显示了将 Salesforce Account 对象中的数据传输到 TiDB 中
sf_account
表的配置示例:在 Error handling 区域,选择 Stop the current flow run。在 Flow trigger 区域,选择 Run on demand 触发类型,即需要手动运行数据流。然后点击 Next。
设置映射规则
将 Salesforce 中 Account 对象的字段映射到 TiDB 中的 sf_account
表,然后点击 Next。
sf_account
表在 TiDB 中是新建且为空的。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。
确认并创建数据流
确认即将创建的数据流信息。如果一切正常,点击 Create flow。
第 3 步:运行数据流
在新建数据流的页面,点击右上角的 Run 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 |
+--------------------+-------------------------------------+--------------------+---------------+--------+----------------+
重要事项
- 如果出现问题,可以在 CloudWatch 页面查看日志。
- 本文档中的步骤基于 Building custom connectors using the Amazon AppFlow Custom Connector SDK。
- TiDB Cloud Serverless 不是 生产环境。
- 为了避免篇幅过长,本文中的示例仅展示了
Insert
策略,但Update
和Upsert
策略也已测试,可以使用。