规划用于 AWS 的外部函数¶
借助本主题,您可以使用 Snowflake 提供的 AWS 管理控制台或 AWS CloudFormation 模板为创建用于 AWS (Amazon Web Services) 的外部函数做好准备。
本主题内容:
先决条件¶
这些说明假设您是经验丰富的 AWS 管理控制台用户。
您需要:
具有 AWS 账户,包括具有以下权限:
通过 IAM (身份和访问管理)创建 AWS 角色。
创建 AWS Lambda 函数。
创建 API 网关端点。
一个 Snowflake 账户,该账户具有 ACCOUNTADMIN 权限,或具有已获得 CREATE INTEGRATION 权限的角色。
如果您计划使用专用端点,则需要虚拟私有云 (VPC) ID。(必须使用 VPC ID,而不是 VPC 端点 ID。VPC 端点 IDs 可能会随时间而变化。)
如果还没有 VPC ID,可以通过在 Snowflake Web 界面中执行以下命令来查找它:
select system$get_snowflake_platform_info();
输出应类似于以下内容:
{"snowflake-vpc-id":["vpc-12345678"]}
记录 VPC ID。在决定是使用 AWS 管理控制台还是 AWS CloudFormation 模板创建外部函数后,将 VPC ID 复制到相应的跟踪工作表:
选择端点类型:区域端点与专用端点¶
可以通过通常称为 端点 的 URI 访问代理服务(如 Amazon API Gateway)。创建 Amazon API Gateway 的说明要求您选择以下端点类型之一:
区域端点。
专用端点。
以下信息可帮助您选择端点类型。
可以跨 AWS 区域访问区域端点,甚至可以跨云平台访问。Snowflake 实例、代理服务和远程服务都可以位于不同的区域,甚至位于不同的云平台上。例如,在 Azure 上运行的 Snowflake 实例可以向 Amazon API Gateway 区域端点发送请求,而该端点又可以将数据转发到在 GCP 上运行的远程服务。
可以配置专用端点,以仅允许在区域内进行访问。例如,可以配置一个专用端点,以仅允许从同一 AWS 区域的 Snowflake VPC (虚拟私有云)进行访问。Snowflake VPC 和专用端点之间使用 AWS PrivateLink 进行通信。
有关 AWS 上的端点类型的更多详细信息,请参阅:
Amazon API Gateway 概念 (https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-basic-concept.html)
Amazon API Gateway 端点类型 (https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-api-endpoint-types.html)
如果要使用专用端点,但不确定要使用哪个区域,可以通过执行以下任一操作来查找区域:
调用 SQL 函数 ``CURRENT_REGION()``(例如
SELECT CURRENT_REGION()
)。检查 Snowflake 账户主机名,它通常会指示云提供商和区域。有关账户主机名、区域和云提供商的更多信息,请参阅 支持的云区域。
要使用专用端点,账户必须符合以下要求:
Snowflake 的 Business Critical Edition(或更高版本)。
选择创建外部函数的方法¶
Snowflake 提供有关在 AWS 上创建外部函数的两种方法的说明:
AWS 管理控制台 Web 界面
Snowflake 提供的 AWS CloudFormation 模板
AWS 管理控制台¶
可以使用 AWS 管理控制台 (https://aws.amazon.com/console/) 创建 Lambda 函数(作为远程服务),以及 Amazon API Gateway 实例(作为代理服务)。如果选择此方法,则还需使用 AWS 管理控制台配置与安全相关的设置。
使用 AWS 管理控制台创建外部函数的说明包含了一个示例 Lambda 函数,以及创建基本 API Gateway 的详细信息:
新用户几乎无需修改即可使用这些说明。
有经验的用户可以使用这些说明和示例 Lambda 函数作为起点,以创建自定义 Lambda 函数和自定义配置的 API Gateway。
AWS CloudFormation 模板¶
创建外部函数时,CloudFormation 模板执行以下两个步骤:
创建远程服务(AWS Lambda 函数)。
创建和配置代理服务 (Amazon API Gateway)。
该模板还执行以下操作:
创建两个 IAM 角色(一个用于 Lambda 函数,另一个用于 API Gateway)。
为 API Gateway 配置资源策略。
准备使用 AWS 管理控制台¶
创建用于跟踪所需信息的工作表¶
创建外部函数时,应记录输入的特定信息(例如资源调用 URL),以便可以在后续步骤中使用该信息。下面的工作表可帮助您跟踪该信息。
===========================================================================
================ Tracking Worksheet: AWS Management Console ===============
===========================================================================
****** Step 1: Information about the Lambda Function (remote service) *****
Your AWS Account ID: ______________________________________________________
Lambda Function Name: _____________________________________________________
******** Step 2: Information about the API Gateway (proxy Service) ********
New IAM Role Name: ________________________________________________________
New IAM Role ARN: _________________________________________________________
Snowflake VPC ID (optional): ______________________________________________
New API Name: _____________________________________________________________
API Gateway Resource Name: ________________________________________________
Resource Invocation URL: __________________________________________________
Method Request ARN: _______________________________________________________
*** Step 3: Information about the API Integration and External Function ***
API Integration Name: _____________________________________________________
API_AWS_IAM_USER_ARN: _____________________________________________________
API_AWS_EXTERNAL_ID: ______________________________________________________
External Function Name: ___________________________________________________
准备使用 AWS CloudFormation 模板¶
下载模板¶
要下载该模板,请转到 GitHub 上的 Snowflake 存储库,然后从 部署模板目录 (https://github.com/Snowflake-Labs/sfguide-external-functions-examples/tree/main/DeploymentTemplates/aws/BasicSetup.yaml) 下载。
创建用于跟踪所需信息的工作表¶
创建外部函数时,应记录输入的特定信息(例如资源调用 URL),以便可以在后续步骤中使用该信息。下面的工作表可帮助您跟踪该信息。
===========================================================================
================== Tracking Worksheet: CloudFormation Template ============
===========================================================================
New IAM Role Name: ________________________________________________________
New IAM Role ARN: _________________________________________________________
Resource Invocation URL: __________________________________________________
API_AWS_IAM_USER_ARN: _____________________________________________________
API_AWS_EXTERNAL_ID: ______________________________________________________
用于构建 AWS 上的外部函数的其他资源¶
准备好为自己的外部函数创建自己的远程服务时,您可能需要查看 Snowflake Labs (https://github.com/Snowflake-Labs/sfguide-external-functions-examples) 提供的基于 Lambda 函数的远程服务示例。
下一步¶
- AWS 管理控制台:
- AWS CloudFormation 模板: