
# 通过华为云Astro轻应用连接器对接第三方数据库
#### 应用场景
连接器是华为云Astro轻应用提供的，调用第三方服务的集成工具。通过使用华为云Astro轻应用连接器，开发者无需关注具体的代码实现，只需要配置集成服务的地址和鉴权信息，即可快速将第三方服务集成到应用中，大大提高了开发效率，降低了开发成本。
本实践将为您介绍如何通过自定义连接器将第三方数据库集成到华为云Astro轻应用中。
#### 方案优势
用户可以自主定义数据库的操作和鉴权接口， 独立控制第三方数据库的网络。
#### 操作流程
在华为云Astro轻应用中，通过连接器对接第三方数据库的流程，如[图1]所示。
图1通过连接器对接第三方数据库流程   
![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002111276892.png)
 #### 前提条件
- [db-adapter](https://obs-for-bj4-gongyouyun-update.obs.cn-north-4.myhuaweicloud.com/obs/deploy/db-adapter.zip)是用于操作第三方数据库的后端java demo代码。resources目录下的datasource.json文件用于配置第三方数据库的地址链接以及用户名、密码，用户可以基于自己的第三方数据库进行配置。DBExecuteController.java用于连接上数据库后，处理外部请求，返回数据库数据。
  图2datasource.json   
  ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002164023209.png "点击放大")
  图3DBExecuteController.java   
  ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002163867009.png "点击放大") 
- 基于db-adapter生成jar包，把编出的jar包放在"build"目录下，构建docker镜像。已将制作好的镜像包上传到容器镜像服务SWR，如何上传镜像包请参见[页面上传镜像](https://support.huaweicloud.com/usermanual-swr/swr_01_0012.html)。
  使用docker save制作镜像压缩包时，请使用"{image}:{tag}"命令，不要使用"image id"，否则无法在容器镜像服务SWR页面上传。镜像上传失败时，可参考[为什么通过页面上传镜像失败？](https://support.huaweicloud.com/swr_faq/swr_faq_0017.html)中操作处理。
  图4使用maven install，将db-adapter打成jar包   
  ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002164032173.png "点击放大")
  图5构建镜像   
  ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002128517574.png "点击放大") 
 
#### 步骤一：使用镜像包创建无状态工作负载
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，参考[购买Standard/Turbo集群](https://support.huaweicloud.com/usermanual-cce/cce_10_0028.html)中操作，购买所需的集群。
2. 集群购买成功后，参考[创建节点](https://support.huaweicloud.com/usermanual-cce/cce_10_0363.html)中操作，为集群添加节点。
3. 创建一个无状态工作负载。 
   1. 节点添加后，在左侧导航栏中选择"Kubernetes 资源 \> 工作负载 \> 无状态工作负载"。
   
   2. 单击"创建工作负载"，创建一个无状态工作负载。
      图6创建无状态工作负载   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002111623750.png "点击放大")
      图7选择镜像   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002147042993.png "点击放大")
      [表1]仅介绍本实践中使用到的参数，其他参数的解释请参见[创建无状态负载（Deployment）](https://support.huaweicloud.com/usermanual-cce/cce_10_0047.html)。
       表1无状态工作负载参数说明 
      | 参数   | 说明                                                                                                                                                                                                                                                                                                                                                                           | 示例               |
      |:---|:---|:---|
      | 负载类型 | 选择创建工作负载的类型。                                                                                                                                                                                                                                                                                                                                                                 | 无状态负载            |
      | 负载名称 | 新建工作负载的名称。命名要求如下： - 长度不能超过63字符。  - 可以包含小写英文字母、数字和中划线（-），并以小写英文字母开头，小写英文字母或数字结尾。   | astro-deployment |
      | 实例数量 | 填写实例的数量，即工作负载Pod的数量。                                                                                                                                                                                                                                                                                                                                                         | 1                |
      | 容器名称 | 输入容器的名称。                                                                                                                                                                                                                                                                                                                                                                     | astro-container  |
      | 镜像名称 | 单击后方的"选择镜像"，选择容器使用的镜像，即[前提条件]中上传的镜像。                                                                                                                                                                                                                                                                                     | db_adapter       |
         
      
   
   
   
   
4. 为工作负载添加服务。 
   1. 在"无状态负载"页签，单击已创建工作负载的名称，进入负载详情页。
      图8单击负载名称   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002146653469.png "点击放大") 
   
   2. 在"访问方式"页签中，单击"创建服务"，创建一个服务配置访问接口。
      图9创建服务   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002146587609.png "点击放大")
      表2服务参数说明 
      | 参数           | 说明                                             | 示例                       |
      |:---|:---|:---|
      | Service名称    | 输入新建服务的名称，也可以保持默认。                             | astro-deployment-service |
      | 访问类型         | 选择服务的访问类型。                                     | 节点访问                     |
      | 端口配置 \> 协议   | 请根据业务的协议类型选择。                                  | TCP                      |
      | 端口配置 \> 容器端口 | 业务容器进程监听的端口，端口范围为1-65535。                      | 8086                     |
      | 端口配置 \> 服务端口 | 通过Service访问的端口，端口范围为1-65535。                   | 8086                     |
      | 端口配置 \> 节点端口 | 即NodePort，可以选择"自动生成"，也可以指定端口，默认范围为30000-32767。 | 30280                    |
         
      
   
   
   
   
5. 测试接口的连通性。
   
   将[2]中添加节点的**IP地址** 和[4.b]中配置的**节点端口** 拼接成完整的访问地址，访问地址由CCE节点IP端口部分、db-adapter中的context-path以及rest接口拼接而成，如http://*10.10.10.1*:30280/astro/native/demo/dbadapter/mysql/datasource1/read。
   图10context-path   
   ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002163884189.png "点击放大")
   图11context-path及rest接口   
   ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002487308089.png "点击放大")
   在Body页签中输入具体的SQL语句，单击"Send"，查看接口状态。状态为"200 OK"，表明接口调测通过。
   图12测试接口的连通性   
   ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002110923658.png "点击放大")
   
   
 
#### 步骤二：创建连接器对接第三方数据库
1. 创建一个低代码应用。 
   1. 参考[授权用户使用华为云Astro轻应用并购买实例](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_9046.html)中操作，申请华为云Astro轻应用免费试用或购买商业实例。
   
   2. 实例购买后，在华为云Astro轻应用服务控制台的"主页"中，单击"进入首页"，进入应用开发页面。
   
   3. 在"应用"中，单击"新建低代码应用"或单击![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002134818046.png "点击放大")，进入新建低代码应用页面。
      首次创建应用时，请根据界面提示创建一个命名空间。命名空间一旦创建，不能修改和删除，创建前请确认好相关信息。建议使用公司或团队的缩写作为命名空间。
      
   
   4. 在新建低代码应用页面，应用类型选择"标准应用"，单击"确定"。
   
   5. 输入应用的标签和名称，单击"新建"，即可进入应用设计器。
      图13创建一个空白应用   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002170372113.png "点击放大")
      表3新建空白应用参数说明 
      | 参数 | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | 示例      |
      |:---|:---|:---|
      | 标签 | 新建应用的标签，长度不能超过80个字符。标签是应用在系统中的唯一标识，创建后不支持修改。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | 我的第一个应用 |
      | 名称 | 新建应用的名称，输入标签值后单击该参数的输入框，系统会自动生成应用的名称，同时自动在名称前，添加***命名空间***__。命名要求如下： - 长度不能超过31个字符，包括前缀命名空间的长度。 名称前的内容为命名空间，在华为云Astro轻应用中为了避免不同租户间数据的重名，租户在首次创建应用时需要先定义一个命名空间。一个租户只能创建一个命名空间，创建后不支持修改。   - 必须以英文字母开头，只能由英文字母、数字或单下划线组成，且不允许以下划线结尾。   | A       |
         
      
   
   
   
   
2. 在应用设计器中，选择"集成"，单击"连接器"下的"连接器实例"。
3. 在类型中，选择"自定义连接器"，进入自定义连接器页面。
4. 单击"+"，配置连接器信息，单击"保存"。
   
   图14创建自定义连接器   
   ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002111102820.png "点击放大")
   表4自定义连接器参数说明 
   | 参数 | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 示例     |
   |:---|:---|:---|
   | 标签 | 自定义连接器的标签，创建后可修改。 取值范围：1\~64个字符。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | demoDB |
   | 名称 | 自定义连接器的名称，名称是连接器在系统中的唯一标识，创建后不可修改。命名要求如下： - 长度不能超过64个字符，包括前缀命名空间的长度。 标识前模糊掉的内容为命名空间，在华为云Astro轻应用中为了避免不同租户间数据的重名，租户在首次创建应用时需要先定义一个命名空间。一个租户只能创建一个命名空间，创建后不支持修改。   - 必须以英文字母开头，只能由英文字母、数字或单下划线组成，且不能以下划线结尾。   | demoDB |
      
   
   
5. 为自定义连接器新建认证信息。
   
   1. 在"认证信息"页签，单击"新建"，进入添加认证信息页面。
   
   2. 设置认证信息，单击"保存"。
      图15添加认证信息   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002146628397.png "点击放大")
      [表5]仅介绍本实践中使用到的参数，其他参数解释请参见[使用自定义连接器调用第三方接口](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_9281.html#section3)。
       表5添加认证信息参数说明 
      | 参数 | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | 示例     |
      |:---|:---|:---|
      | 标签 | 认证的标签名，用于在页面显示。 取值范围：1\~64个字符。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | noauth |
      | 名称 | 认证的名称，名称是认证在系统中的唯一标识，创建后不可修改。命名要求如下： - 长度不能超过64个字符，包括前缀命名空间的长度。 标识前模糊掉的内容为命名空间，在华为云Astro轻应用中为了避免不同租户间数据的重名，租户在首次创建应用时需要先定义一个命名空间。一个租户只能创建一个命名空间，创建后不支持修改。   - 必须以英文字母开头，只能由英文字母、数字或单下划线组成，且不能以下划线结尾。   | noauth |
         
      
   
   
   
   
6. 为自定义连接器添加动作。
   
   1. 在"动作"页签中，单击"新建"。
   
   2. 设置动作的基本信息，单击"下一步"。
      图16设置基本信息   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002111120484.png "点击放大")
      表6动作基本信息参数说明 
      | 参数   | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | 示例                                                                         |
      |:---|:---|:---|
      | 标签   | 新建动作的标签名，用于在页面显示。 取值范围：1\~64个字符。                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | demoSql                                                                    |
      | 名称   | 新建动作的名称，名称是动作在系统中的唯一标识。命名要求如下： - 长度不能超过64个字符，包括前缀命名空间的长度。 标识前模糊掉的内容为命名空间，在华为云Astro轻应用中为了避免不同租户间数据的重名，租户在首次创建应用时需要先定义一个命名空间。一个租户只能创建一个命名空间，创建后不支持修改。   - 必须以英文字母开头，只能由英文字母、数字或单下划线组成，且不能以下划线结尾。   | demoSql                                                                    |
      | URL  | 第三方提供的协议服务的URL地址，即[5]中调试成功的地址。                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | http://10.10.10.1:30280/astro/native/demo/dbadapter/mysql/datasource1/read |
      | 方法   | 选择请求的方法。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | POST                                                                       |
      | 内容类型 | 输入内容的类型，该值取决于第三方支持哪种类型，是在HTTP标准协议中定义的。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | application/json                                                           |
      | 返回类型 | 选择返回类型。 取值为"application/json"时，表示会忽略第三方实际返回的"content-type"，使用第三方配置的"content-type"来解析第三方返回的内容。 如果该参数取值为空，表示使用HTTP返回中的"content-type"，来解析第三方返回的内容。                                                                                                                                                                                                                                                                                                           | application/json                                                           |
         
      
   
   
   
   
7. 本示例无需设置消息头入参，请单击![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002111419792.png)删除第一行参数，再单击"下一步"。
8. 设置输入参数，单击"下一步"。
   
   图17输入参数配置页面   
   ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002111227710.png "点击放大")
   [表7]仅介绍本实践中使用到的参数，其他参数解释请参见[使用自定义连接器调用第三方接口](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_9281.html#section3)。
    表7输入参数说明 
   | 参数   | 说明                          | 示例  |
   |:---|:---|:---|
   | 标签   | 输入参数的标签名，用于在页面显示。           | sql |
   | 名称   | 新建输入参数的名称，名称是输入参数在系统中的唯一标识。 | sql |
   | 参数位置 | 设置输入参数的位置。                  | 消息体 |
   | 数据类型 | 设置输入参数的数据类型，直接在下拉框中选择。      | 字符串 |
      
   
   
9. 本示例无需设置输出参数，请单击![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002146978953.png)删除第一行参数，再单击"保存"。
10. 返回动作页签，单击该动作所在行的![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002147018521.png)，启用该动作。
 
#### 步骤三：从第三方数据库获取数据
1. 在自定义连接器的"动作"页签中，单击[6]中添加的动作，进入动作列表页。
   
   图18单击动作名称   
   ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002146871841.png "点击放大")
   
   
2. 在页面右上方，单击"测试"，进入测试页面。
3. "认证信息"选择[5]中创建的noauth，设置输入参数，单击"测试"。
   
   图19测试   
   ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002115621126.png "点击放大")
   例如，从第三方数据库的"indexes"表中，获取1条数据。其中，"sql"为[8]中添加的输入参数，"indexes"为第三方数据库中某个表的名称。单击"测试"，返回如下数据：
   ```
   {
       "result": {
           "content": [
               {
                   "created_by": "10gd000000bHFh7DZ9iS",
                   "created_date": "2021-04-09T00:59:20.000+00:00",
                   "description": null,
                   "field_id1": "cust000000hDkpq2Puy0",
                   "field_id2": null,
                   "index_id": "cust000000inMlDAbr6X",
                   "index_name": "HWAC__applicationId__CST",
                   "index_type": 3,
                   "label": null,
                   "last_modified_by": null,
                   "last_modified_date": "2021-04-09T00:59:20.000+00:00",
                   "obj_id": "cust000000hBjuCHLJom",
                   "status": 0,
                   "tenant_id": "0000000000bHFh7DZ9iT"
               }
           ]
       },
       "dataForm": "2006-01-02",
       "dataTimeFormat": "2006-01-02 15:04:05",
       "reqMsg": "",
       "respMsg": "{\"url\":\"http://10.10.10.1:30280/astro/native/demo/dbadapter/mysql/datasource1/read\",\"method\":\"POST\",\"parameters\":{\"content\":\"******\"},\"tenantID\":\"000000000142c5UhjFvk\",\"statusCode\":200}",
       "timeElapsed": 207722711,
       "statusCode": 200,
       "headers": {
           "Connection": "keep-alive",
           "Content-Type": "application/json",
           "Date": "Fri, 13 Dec 2024 08:55:24 GMT",
           "Server": "nginx"
       }
   }
   ```
   
   
 
#### 步骤四：通过脚本调用连接器获取数据
1. 在应用设计器中，选择"逻辑"，单击脚本后的"+"。
2. 新建一个空白的脚本，名称设置为"dbscript"，单击"添加"。 
   图20创建脚本dbscript   
   ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002163903445.png "点击放大")
   
   
3. 在脚本编辑器中，输入示例代码。 
   示例代码中，"*命名空间* __demoDB"为[4]中定义的连接器名称，"*命名空间* __noauth"为[3]中添加的认证信息，"*命名空间* __demoSql"为[6]中添加的动作。
   ```
   import * as connector from 'connector';
   import * as context from 'context';//导入上下文相关的标准库
   //定义入参结构
   @action.object({ type: "param" })
   export class ActionInput {
       @action.param({ type: 'String', required: false, label: 'String' })
       sql: string;
   }
   //定义出参结构
   @action.object({ type: "param" })
   export class ActionOutput {
       @action.param({ type: 'any' })
       res: any;
   }
   @action.object({ type: "method" })
   export class CreateWorkOrder {    //定义接口类，接口的入参为ActionInput，出参为ActionOutput
       @action.method({ input: 'ActionInput', output: 'ActionOutput' })
       public createWorkOrder(input: ActionInput): ActionOutput {
           let out = new ActionOutput();    //新建出参ActionOutput类型的实例，作为返回值
           let error = new Error();    //新建错误类型的实例，用于在发生错误时保存错误信息
           try {
               // 页面上自己创建的自定义连接器的调用方法，第一个参数是创建的自定义连接器名称，第二个参数是认证信息名称
               let client = connector.newClient("命名空间__demoDB", "命名空间__noauth");
               //入参
               let input = { "sql": "select * from flowinstance limit 1" };
               // 第一个入参是动作名称， 第二个参数是入参
               let resp = client.invoke("命名空间__demoSql", input);
               // 打印输出结果
               console.log(resp);
               out.res = resp;
           } catch (error) {
               console.error(error.name, error.message);
               context.setError(error.name, error.message);
           }
           return out;
       }
   }
   ```
   
   
4. 单击页面上方的![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002164055065.png)，保存脚本。
5. 单击编辑器上方的![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002163896677.png)，执行脚本。
6. 在页面底部单击测试窗口右上角的![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002128695320.png)，在"输出参数"中可以查看到返回的数据库数据。
   
   图21查看返回数据   
   ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000002163895477.png "点击放大")
   
   
 
