创建 API CONNECTION
API CONNECTION 主要用于存储和保护第三方应用服务的身份认证信息。借助 API CONNECTION,云器 Lakehouse 的 EXTERNAL FUNCTION(外部函数)能够以安全的方式通过 API 调用与这些服务进行交互。目前,API CONNECTION 支持的外部服务包括 阿里云函数计算(Function Compute)、腾讯云云函数(Cloud Functions),以及 AWS Lambda。
语法
参数说明
参数 | 说明 |
---|---|
connection_name | 要创建的 API 连接名称。 |
PROVIDER | 云函数服务提供商。支持的取值包括:'TENCENT' 、'ALIYUN' 和 'AWS' 。 |
REGION | 云函数部署所在的区域。
示例:
• 阿里云:'cn-shanghai' (区域代码参考)
• 腾讯云:'ap-beijing' (区域代码参考)
• AWS:'cn-northwest-1' |
ROLE_ARN | 用于执行云函数的角色 ARN
示例(阿里云):
acs:ram::1222800000000000:role/czudfrole |
NAMESPACE | 云函数的命名空间。腾讯云需要提供该值。对于其他云服务,可填写 'default' ,或根据实际情况留空。 |
CODE_BUCKET | 存储云函数代码包的对象存储 bucket 名称。 |
其中,NAMESPACE:在腾讯云使用必须提供。如果是其他云服务则可以不填写或者直接填写'default'
该值如下图所示获取
案例说明
API CONNECTION 主要应用于 EXTERNAL FUNCTION 的创建。EXTERNAL FUNCTION 的使用如下过程
- 用户开通云上的函数计算服务(如阿里云的函数计算FC)和对象存储服务
- 将函数执行代码 & 可执行文件、依赖的库、模型和数据文件,打包上传至对象存储
- 并且授予云器 Lakehouse 操作上述服务和访问函数文件的权限
- 用户在云器 Lakehouse SQL 语句中调用 EXTERNAL FUNCTION
- 云器 Lakehouse 根据提供的服务地址和认证信息发送 http 请求调用运行函数
- 云器 Lakehouse 获取响应信息返回结果 因此您必须开通函数计算服务和对象存储服务。并且授权给云器 Lakehouse 权限
阿里云创建API CONNECTION
-
环境准备 EXTERNAL FUNCTION 依赖阿里云的 "对象存储" 和 "函数计算" 服务, 请确保相关服务已开通
-
步骤1: 用户开通云上的函数计算服务(如阿里云的函数计算FC)和对象存储服务
-
步骤2. 阿里云侧操作:在阿里云 RAM 控制台中创建权限策略 (CzUdfOssAccess ):注意:需要用户具有RAM权限
- 访问阿里云访问控制(RAM)产品控制台
- 左侧导航栏 权限管理 -> 权限策略,在权限控制界面选择 搜索AliyunFCFullAccess->编辑 AliyunFCFullAccess 权限策略 添加下面"acs**:Service": "fc.aliyuncs.com"**部分
-
步骤3:在阿里云 RAM 控制台中创建权限策略 (CzUdfOssAccess ):注意:需要用户具有RAM权限
- 访问阿里云访问控制(RAM)产品控制台
- 左侧导航栏 权限管理 -> 权限策略,在权限控制界面选择 创建权限策略
- 在创建权限策略页面选择 脚本编辑 的页签,将下面
[bucket_name_1|2|3]
替换为实际的 OSS bucket 名称。注意:按照阿里云OSS 的约定,相同的bucket 需要有两条Resource条目:"acs:oss:*:*:bucket_name_1"
与"acs:oss:*:*:bucket_name_1/*"
同时存在才能达到授权效果:
-
步骤4: 阿里云控制台:在阿里云 RAM 中创建角色(如:CzUDFRole):
- 在RAM 控制台左侧导航栏 身份管理 -> 角色,点击创建角色
- 在 创建角色 页面中,选择类型为 阿里云账号, 配置角色中填写自定义角色名称 如 (CzUDFRole),在选择信任的云账号 中选择 其他云账号,并写入:1384322691904283(云器 Lakehouse 上海的云主账号),点击完成
- 创建完成之后,点击为角色授权:
- 在系统策略中,将 AliyunFCFullAccess 策略授权给该角色 CzUDFRole
- 在自定义策略中,将刚创建的策略(CzUdfOssAccess)授权给该角色
-
步骤5: 创建完成之后,点击为角色授权: 在自定义策略中,将刚创建的策略(CzUdfOssAccess)授权给该角色。在角色 CzUDFRole 详情页中,获取该角色的 RoleARN 信息:
'acs:ram::1222808864xxxxxxx:role/czudfrole'
-
步骤6:将上面的role_arn填入到语法参数重,创建阿里云函数计算连接
- 步骤7: desc connection 获取 external ID 信息:本实例中,external ID 为:
VW9UaGwYENBQ7cFp
- 在阿里云 RAM -> 角色-> 信任策略中,修改 CzUDFRole 的信任策略
"sts:ExternalId"
部分:
- 在阿里云 RAM -> 角色-> 信任策略中,修改 CzUDFRole 的信任策略
腾讯云创建 API CONNECTION
环境准备 EXTERNAL FUNCTION 依赖腾讯云的 "对象存储" 和 "云函数" 服务, 请确保相关服务已开通.
-
对象存储:需要在云器 Lakehouse 部署地域 (例如 ap-shanghai) 用于存放函数基础代码;
-
云函数:云函数 服务开通后, 建议使用模板创建功能手动创建一个函数, 推荐使用Flask 框架模板等带有WebFunc标签的模板; 在此过程中, 腾讯云控制台 会引导用户完成一些初始化配置, 例如开通日志服务 (CLS) 等依赖服务, 创建必要 访问控制 (CAM) 角色, 授予必要 访问控制 (CAM) 权限等.
-
步骤1: 用户开通腾讯云的云函数计算服务。云函数 region 保持和云器 Lakehouse开服区域一致
-
步骤2: 数据创建权限策略 (LakehouseAccess ):
- 登录腾讯云,进入访问管理产品控制台
- 在访问管理页面左侧导航栏进入策略,在权限控制界面选择 新建自定义策略 -> 按策略生成器创建 -> 可视化策略生成器。
- 在可视化策略生成器页签中服务(Service): 选择云函数;操作(Action):选择全部操作(可根据实际需要的操作,做更细粒度的选择);资源(Resource):根据需要选择全部资源或者特定资源。本次案例选择为特定资源,使用 namespace 授权如下图,点击编辑按钮,选择步骤1中的开通region,资源可以是*也可以指定namespace,本次案例为中的命名空间:default。如图二中云函数红色标记的位置点击创建完成该策略
-
步骤3:创建角色 CzUdfRole
- 新建角色
- 选择 腾讯云账户
- 选择 其他主账户 100029595716 (云器主账号),其它选项保持默认,点击下一步
- 在配置角色策略配置中,将刚才新建的 LakehouseAccess 自定义策略授权给当前角色。点击下一步,在角色命名中填写
LakehouseRole
完成创建。 - 创建成功后,在角色列表中,进入角色
LakehouseRole
的详情页,获取该角色的 RoleARN 信息:qcs::cam::uin/1000*******:roleName/LakehouseRole
- 记住角色 RoleArn, 例如:
qcs::cam::uin/1000*******:roleName/LakehouseRole
-
步骤4:开通 COS 新建 BUCKET
- 新建 bucket 用于存放函数代码 region 保持和云器 Lakehouse 开服区域一致。如下图新建的 bucket 为myfunction
- 授权给云器 Lakehouse 访问 bucket(myfunction)权限
- 进入访问管理产品控制台。找到刚刚新建的“LakehouseAccess”策略。选择编辑
- 选择可视化策略生成器。添加权限
- 服务(Service): 选择 对象存储(cos);操作(Action):选择全部操作(可根据实际需要的操作,做更细粒度的选择);资源(Resource):根据需要选择全部资源或者特定资源。本示例中选择特定资源,为上海的
myfunction-131xxxxx
。
- 新建 bucket 用于存放函数代码 region 保持和云器 Lakehouse 开服区域一致。如下图新建的 bucket 为myfunction
- 客户侧:进入腾讯云访问管理控制台中,角色 -> CzUDFRole -> 角色载体-> 管理载体,选择 添加账户 -> 选择当前主账号,并填写主账号ID:
100029595716
(云器的腾讯云主账号),并勾选开启校验,输入刚才 DESC 结果中的 EXTERNAL_ID,点击 确定-> 更新
AWS 创建 API CONNECTION
-
环境准备 EXTERNAL FUNCTION 依赖阿里云的 "对象存储" 和 "Lambda函数" 服务, 请确保相关服务已开通.
-
步骤1: 用户开通云上的Lambda和对象存储服务
-
步骤2: AWS侧创建权限策略 (LakehouseAccess ):
-
登录AWS 云平台,进入身份与访问管理(IAM) 产品控制台
-
在 IAM 页面左侧导航栏进入 账户设置,在 Security Token Service (STS) 中的 终端节点 列表中,找到当前实例对应云器 Lakehouse 的区域,如果 STS 状态 的状态为未开启请开启。
-
在 IAM 页面左侧导航栏进入 策略,在 策略 界面选择 创建策略,在策略编辑器中选择Json。
-
将要添加允许云器 Lakehouse 访问 S3 bucket 和目录的策略。下面是策略的样例,请用实际的bucket 和路径前缀名称替换
<bucket>
-
选择 下一步,输入策略名称如,(LakehouseAccess)和描述(选填)
-
点击创建策略完成策略创建
-
-
步骤3: AWS侧创建角色 (LakehouseVolumeRole):
-
登录AWS 云平台,进入身份与访问管理(IAM) 产品控制台
-
在 IAM 页面左侧导航栏进入角色 -> 创建角色 -> AWS账户,选择 另一个AWS账户,在 Account ID 输入
028022243208
- 选择下一步,在添加权限(Add permissions)页面,选择步骤2 中创建的策略
LakehouseAccess
后,选择下一步 - 填写 Role name (例:
LakehouseVolumeRole
) 和描述,点击 创建角色 完成角色创建 - 在角色详情页中,获取 Role ARN 的值,用来创建 STORAGE CONNECTION
步骤4: 云器 Lakehouse 侧创建 API CONNECTION :
- 在 Studio 或者云器 Lakehouse JDBC 客户端中执行以下命令:
- 在创建存储连接的过程中,云器 Lakehouse 会生成此EXTERNAL ID,可以将此EXTERNAL ID 配置到步骤3 创建的 AWS IAM 角色(
LakehouseVolumeRole
)的 Trust Policy 中,实现附加的访问控制:
- 在AWS IAM 的控制台,左侧导航栏中进入角色 Roles,找到步骤3 中创建的角色并进入角色详情页面,在 Trust relationships 中将
sts:ExternalId
的值000000
替换为 DESC 结果中的EXTERNAL_ID
。点击更新 完成角色策略更新。
后续:
在完成 API CONNECTION 的创建之后,就可以继续创建外部函数,支持用 Python、Java 脚本处理云器 Lakehouse 中的数据。请参考: 创建外部函数