
# 外部服务接入LakeFormation
#### 概述
本文指导用户通过调用API的方式，介绍外部服务对接LakeFormation的完整流程。
本流程假设终端租户已经在Console界面完成LakeFormation的服务授权。API的调用方法请参见[如何调用API](https://support.huaweicloud.com/api-lakeformation/lakeformation_04_0008.html)。
#### 前提条件
已获取以下信息：
- endpoint：通过[地区和终端节点](https://developer.huaweicloud.com/endpoint?LakeFormation)查询服务的终端节点获取。
- project_id：参考[获取项目ID](https://support.huaweicloud.com/api-lakeformation/lakeformation_04_0026.html)获取。
 
#### 操作步骤
1. 调用[创建实例](https://support.huaweicloud.com/api-lakeformation/CreateLakeFormationInstance.html)接口，创建LakeFormation实例，同时记录接口返回的实例Id。
   
   请求示例：
   POST https://*{* *endpoint* *}* /v1/*{* *project_id* *}*/instances
   Body:
   ```
   {
       "name": "lakeformation",
       "charge_mode": "postPaid",
       "shared": "false",
       "specs": [
           {
               "spec_code": "lakeformation.unit.basic.qps",
               "stride_num": 5
           }
       ],
       "enterprise_project_id": "0"
   }
   ```
   响应示例：
   ```
   {
       "instance_id": "13677734-a4ee-43e2-9d11-30b8b2e32a95",
       "name": "lakeformation",
       "description": "",
       "enterprise_project_id": "0",
       "shared": false,
       "default_instance": false,
       "create_time": "2023-06-29T09:08:33.000+00:00",
       "update_time": "2023-06-29T09:08:34.000+00:00",
       "status": "RESOURCE_PREPARATION",
       "resource_progress": 25,
       "resource_expected_duration": 15,
       "in_recycle_bin": false,
       "tags": [],
       "specs": [
           {
               "spec_code": "lakeformation.unit.basic.qps",
               "stride_num": 5
           },
           {
               "spec_code": "lakeformation.unit.basic.metadata",
               "stride_num": 5
           }
       ]
   }
   ```
   
   
2. 调用[查询实例详情](https://support.huaweicloud.com/api-lakeformation/ShowLakeFormationInstance.html)接口，查询实例状态，等待实例状态变为RUNNING运行中，表示实例创建完成。
   
   请求示例：
   GET https://*{endpoint}* /v1/*{project_id}* /instances/*{instance_id}*
   instance_id：[1]响应信息中的"instance_id"参数值。
   响应示例：
   ```
   {
       "instance_id": "13677734-a4ee-43e2-9d11-30b8b2e32a95",
       "name": "lakeformation",
       "description": "",
       "enterprise_project_id": "0",
       "shared": false,
       "default_instance": false,
       "create_time": "2023-06-29T09:08:33.000+00:00",
       "update_time": "2023-06-29T09:08:34.000+00:00",
       "status": "RUNNING",
       "in_recycle_bin": false,
       "tags": [],
       "specs": [
           {
               "spec_code": "lakeformation.unit.basic.qps",
               "stride_num": 5
           },
           {
               "spec_code": "lakeformation.unit.basic.metadata",
               "stride_num": 5
           }
       ]
   }
   ```
   
   
3. （可选）如果当前租户首次创建LakeFormation实例，该实例将自动作为默认实例（default）。客户端可以直接访问默认实例，或通过指定具体的实例ID来访问对应的实例。非默认实例可以通过调用[设为默认实例](https://support.huaweicloud.com/api-lakeformation/UpdateLakeFormationInstanceDefault.html)接口将非默认实例设为默认实例。
   
   请求示例：
   POST https://*{endpoint}* /v1/*{project_id}* /instances/*{instance_id}*/default
   instance_id：[1]响应信息中的"instance_id"参数值。
   
   
4. 调用[创建服务接入客户端](https://support.huaweicloud.com/api-lakeformation/CreateAccessClient.html)接口，选择客户端对应的VPC相关信息创建接入客户端，LakeFormation服务将自动为其创建终端节点和DNS内网域名，用于打通网络连接。
   
   请求示例：
   POST https://*{endpoint}* /v1/*{project_id}* /instances/*{instance_id}*/access-clients
   instance_id：[1]响应信息中的"instance_id"参数值。
   Body:
   ```
   {
       "name": "access-client",
       "vpc_id": "131fb837-37ae-4aa6-9e87-312919df659f",
       "subnet_id": "2fa7ec47-c7f6-4a81-8e77-1dd41121b726"
   }
   ```
   响应示例：
   ```
   {
       "id": "b73a9311-1ce9-48fe-b714-21bc41ce7b82",
       "name": "access-client",
       "access_mode": "SYSTEM",
       "status": "CREATING",
       "vpc_id": "131fb837-37ae-4aa6-9e87-312919df659f",
       "subnet_id": "2fa7ec47-c7f6-4a81-8e77-1dd41121b726"
   }
   ```
   
   
5. 调用[获取服务接入客户端详情](https://support.huaweicloud.com/api-lakeformation/ListAccessClientInfos.html)接口，查询接入客户端状态，等待状态变为RUNNING，表示接入客户端创建完成，同时可以在详情中查看接入IP、域名等详细信息。
   
   请求示例：
   GET https://*{endpoint}* /v1/*{project_id}* /instances/*{instance_id}* /access-clients/*{client_id}*
   - instance_id：[1]响应信息中的"instance_id"参数值。
   
   - client_id：[4]响应信息中的"id"参数值。
   
   
   响应示例：
   ```
   {
       "id": "b73a9311-1ce9-48fe-b714-21bc41ce7b82",
       "name": "access-client",
       "access_mode": "SYSTEM",
       "status": "RUNNING",
       "vpc_id": "131fb837-37ae-4aa6-9e87-312919df659f",
       "subnet_id": "2fa7ec47-c7f6-4a81-8e77-1dd41121b726",
       "access_connections": [
           {
               "vpcep_id": "f72c8034-df38-4dbc-bd5d-2f50531ba104",
               "ip": "10.0.0.6",
               "owner": "555d9e8999c94705be3d7edb70a3199a",
               "domain": "xxx.dalf-ed1c-b3070cba-baae-4220-b7ff-9b2bca043efb.apig-lakeformation.com"
           }
       ],
       "create_time": "2023-06-29T12:12:12.000+00:00"
   }
   ```
   
   
6. 参考[目录管理](https://support.huaweicloud.com/api-lakeformation/topic_300000006.html)相关接口，使用上述步骤获取的接入IP与实例ID访问元数据管理相关接口，获取目录列表。
   
   请求示例：
   GET https://*{endpoint}* /v1/*{project_id}* /instances/*{instance_id}*/catalogs
   - endpoint：*{instance_id}* .lakeformation.lakecat.com，如果已经将实例设为默认实例可以使用default-*{project_id}*.lakeformation.lakecat.com。
   
   - instance_id：[1]响应信息中的"instance_id"参数值，如果已经将实例设为默认实例可以直接使用default作为实例ID。
   
   
   请求头示例
   ```
   Host：lakeformation.lakecat.com
   ```
   响应示例：
   ```
   [
       {
           "catalog_name": "hive",
           "description": "Default catalog, for Hive",
           "location": "obs://lakeformation-555d9e8999c94705-xxx/ed1ce787-1671-4ce4-b84f-6f40ccb26752"
       }
   ]
   ```
   
   
 
