创建 API CONNECTION

API CONNECTION 主要用于存储和保护第三方应用服务的身份认证信息。借助 API CONNECTION,云器 Lakehouse 的 EXTERNAL FUNCTION(外部函数)能够以安全的方式通过 API 调用与这些服务进行交互。目前,API CONNECTION 支持的外部服务包括 阿里云函数计算(Function Compute)、腾讯云云函数(Cloud Functions),以及 AWS Lambda

语法

CREATE API CONNECTION [ IF NOT EXISTS ] <connection_name>
  TYPE = CLOUD_FUNCTION
  PROVIDER = '<provider>'
  REGION = '<region>'
  ROLE_ARN = '<role_arn>'
  NAMESPACE = '<namespace>'
  CODE_BUCKET = '<code_bucket>'

参数说明

参数说明
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"**部分
      {
          "Version": "1",
          "Statement": [
              {
                  "Action": "fc:*",
                  "Resource": "*",
                  "Effect": "Allow"
              },
              {
                  "Action": "ram:PassRole",
                  "Resource": "*",
                  "Effect": "Allow",
                  "Condition": {
                      "StringEquals": {
                          "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/*"同时存在才能达到授权效果:
    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "oss:GetObject",
                    "oss:ListObjects",
                    "oss:PutObject",
                    "oss:DeleteObject"
                ],
                "Resource": [
                    "acs:oss:*:*:bucket_name_1",
                    "acs:oss:*:*:bucket_name_1/*",
                    "acs:oss:*:*:bucket_name_2",
                    "acs:oss:*:*:bucket_name_2/*",
                    "acs:oss:*:*:bucket_name_3",
                    "acs:oss:*:*:bucket_name_3/*"
                ]
            }
        ]
    }
  • 步骤4: 阿里云控制台:在阿里云 RAM 中创建角色(如:CzUDFRole):

    • 在RAM 控制台左侧导航栏 身份管理 -> 角色,点击创建角色
    • 创建角色 页面中,选择类型为 阿里云账号, 配置角色中填写自定义角色名称 如 (CzUDFRole),在选择信任的云账号 中选择 其他云账号,并写入:1384322691904283(云器 Lakehouse 上海的云主账号),点击完成
    • 创建完成之后,点击为角色授权:
    • 系统策略中,将 AliyunFCFullAccess 策略授权给该角色 CzUDFRole
    • 自定义策略中,将刚创建的策略(CzUdfOssAccess)授权给该角色
  • 步骤5: 创建完成之后,点击为角色授权: 在自定义策略中,将刚创建的策略(CzUdfOssAccess)授权给该角色。在角色 CzUDFRole 详情页中,获取该角色的 RoleARN 信息:'acs:ram::1222808864xxxxxxx:role/czudfrole'

  • 步骤6:将上面的role_arn填入到语法参数重,创建阿里云函数计算连接

CREATE API CONNECTION my_funciton_connection
TYPE CLOUD_FUNCTION
PROVIDER='aliyun'
REGION='cn-hangzhou'
ROLE_ARN='acs:ram::1757168149572678:role/czudfrole'
CODE_BUCKET='function-compute-my1';
  • 步骤7: desc connection 获取 external ID 信息:本实例中,external ID 为:VW9UaGwYENBQ7cFp
    DESC CONNECTION my_funciton_connection;
    • 在阿里云 RAM -> 角色->  信任策略中,修改 CzUDFRole 的信任策略 "sts:ExternalId" 部分:
    {
      "Statement": [
        {
          "Action": "sts:AssumeRole",
          "Condition": {
            "StringEquals": {
              "sts:ExternalId": "O0lQUogDJajHqnAQ"
            }
          },
          "Effect": "Allow",
          "Principal": {
            "RAM": [
              "acs:ram::1384322691904283:root"
            ]
          }
        }
      ],
      "Version": "1"
    }

腾讯云创建 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

-- 在 Studio 或者云器 Lakehouse JDBC 客户端中执行以下命令:

CREATE API CONNECTION my_funciton_connection
    TYPE CLOUD_FUNCTION
    PROVIDER='tencent'
    REGION='ap-shanghai'
    ROLE_ARN='qcs::cam::uin/xxxx:roleName/CzUDFRole'
    NAMESPACE='default'
    CODE_BUCKET='myfunction-131xxxx';

  • 客户侧:进入腾讯云访问管理控制台中,角色 -> 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>

      {
      	"Version": "2012-10-17",
      	"Statement": [
      		{
      			"Sid": "VisualEditor0",
      			"Effect": "Allow",
      			"Action": [
      				"lambda:CreateFunction",
      				"lambda:DeleteProvisionedConcurrencyConfig",
      				"lambda:GetFunctionConfiguration",
      				"lambda:ListProvisionedConcurrencyConfigs",
      				"lambda:GetProvisionedConcurrencyConfig",
      				"lambda:ListLayers",
      				"lambda:ListLayerVersions",
      				"lambda:DeleteFunction",
      				"lambda:GetAlias",
      				"lambda:ListCodeSigningConfigs",
      				"lambda:UpdateFunctionEventInvokeConfig",
      				"lambda:DeleteFunctionCodeSigningConfig",
      				"lambda:ListFunctions",
      				"lambda:GetEventSourceMapping",
      				"lambda:InvokeFunction",
      				"lambda:ListAliases",
      				"lambda:GetFunctionCodeSigningConfig",
      				"lambda:UpdateAlias",
      				"lambda:UpdateFunctionCode",
      				"lambda:ListFunctionEventInvokeConfigs",
      				"lambda:ListFunctionsByCodeSigningConfig",
      				"lambda:GetFunctionConcurrency",
      				"lambda:PutProvisionedConcurrencyConfig",
      				"lambda:ListEventSourceMappings",
      				"lambda:PublishVersion",
      				"lambda:DeleteEventSourceMapping",
      				"lambda:CreateAlias",
      				"lambda:ListVersionsByFunction",
      				"lambda:GetLayerVersion",
      				"lambda:PublishLayerVersion",
      				"lambda:InvokeAsync",
      				"lambda:GetAccountSettings",
      				"lambda:CreateEventSourceMapping",
      				"lambda:GetLayerVersionPolicy",
      				"lambda:PutFunctionConcurrency",
      				"lambda:DeleteCodeSigningConfig",
      				"lambda:ListTags",
      				"lambda:DeleteLayerVersion",
      				"lambda:PutFunctionEventInvokeConfig",
      				"lambda:DeleteFunctionEventInvokeConfig",
      				"lambda:CreateCodeSigningConfig",
      				"lambda:PutFunctionCodeSigningConfig",
      				"lambda:UpdateEventSourceMapping",
      				"lambda:UpdateFunctionCodeSigningConfig",
      				"lambda:GetFunction",
      				"lambda:UpdateFunctionConfiguration",
      				"lambda:UpdateCodeSigningConfig",
      				"lambda:GetFunctionEventInvokeConfig",
      				"lambda:DeleteAlias",
      				"lambda:DeleteFunctionConcurrency",
      				"lambda:GetCodeSigningConfig",
      				"lambda:GetPolicy"
      			],
      			"Resource": "*"
      		},
      		{
      			"Sid": "VisualEditor1",
      			"Effect": "Allow",
      			"Action": [
      				"s3:PutObject",
      				"s3:GetObject",
      				"s3:DeleteObjectVersion",
      				"s3:ListBucket",
      				"s3:DeleteObject",
      				"s3:GetBucketLocation",
      				"s3:GetObjectVersion"
      			],
      			"Resource": "arn:aws-cn:s3:::cz-udf-code"
      		}
      	]
      }
    • 选择 下一步,输入策略名称如,(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 客户端中执行以下命令:
CREATE API CONNECTION udf_noah 
    TYPE cloud_function
    PROVIDER = 'aws'
    REGION = 'cn-north-1'
    ROLE_ARN = 'arn:aws-cn:iam::028022243208:role/CzUdfRole'
    CODE_BUCKET = 'cz-udf-code'
    NAMESPACE = 'default';
  • 在创建存储连接的过程中,云器 Lakehouse 会生成此EXTERNAL ID,可以将此EXTERNAL ID 配置到步骤3 创建的 AWS IAM 角色(LakehouseVolumeRole)的 Trust Policy 中,实现附加的访问控制:
-- 查看 EXTERNAL ID 
DESC CONNECTION udf_noah ;

  • 在AWS IAM 的控制台,左侧导航栏中进入角色 Roles,找到步骤3 中创建的角色并进入角色详情页面,在 Trust relationships 中将 sts:ExternalId 的值 000000 替换为 DESC 结果中的 EXTERNAL_ID。点击更新 完成角色策略更新。

后续:

在完成 API CONNECTION 的创建之后,就可以继续创建外部函数,支持用 Python、Java 脚本处理云器 Lakehouse 中的数据。请参考: 创建外部函数

联系我们
预约咨询
微信咨询
电话咨询