第 1 步:在管理控制台中创建远程服务(AWS Lambda 函数)¶
本主题详细说明如何创建 AWS Lambda 函数,以用作外部函数的远程服务。
本主题包含示例 Lambda 函数的代码,您可以按原样使用该代码创建第一个外部函数,也可以将其用作自定义 Lambda 函数的起点。
本主题内容:
上一步¶
简介¶
有多种方法可用于在 AWS 上创建远程服务。本主题介绍其中一种方法,即创建要用作远程服务的 Lambda 函数。
本教程介绍两个示例 Lambda 函数,每个函数都是用 Python 编写。
有关更多详细信息,请参阅 Snowflake 示例函数 (本主题内容)。
了解 Lambda 函数输入和输出¶
为使 Snowflake 能够向远程服务发送数据以及从远程服务接收数据,远程服务必须接受并返回 JSON 格式的数据。
有关远程服务输入和输出且与平台无关的信息,请参阅 远程服务输入和输出数据格式。
本部分提供特定于 AWS Lambda 函数的详细信息。
通过 JSON 且与语言无关的输入和输出¶
本部分中的信息适用于作为 Snowflake 外部函数的远程服务的所有 Lambda 函数。有关外部函数输入和输出的平台特定信息,请参阅下面的子部分。
在 AWS 上,HTTP 兼容服务的惯例是返回也包含 HTTP 状态代码的 JSON 对象内的主体。来自 AWS Lambda 函数的典型返回值的 JSON 如下所示:
{ "statusCode": <http_status_code>, "body": { "data": [ [ 0, <value> ], [ 1, <value> ] ... ] } }
JSON 输入的结构与前面的类似,但包含不太可能需要的其他键值对,statusCode
除外。
Python 特定的 Lambda 函数输入¶
以下资料适用于 Snowflake 兼容的 Python 语言 Lambda 函数,包括本教程中的示例 Lambda 函数。此信息是对 与语言无关的输入和输出规则 的 补充。
Snowflake 兼容的 Python 语言 Lambda 函数接收两个参数,即 event
和 context
。简单的外部函数通常只需要 event
参数。
event
参数包括许多子字段,其中一个子字段是 body
。主体是包含字典的 JSON 兼容字符串。
字典包括名为 data
的键;data
的对应值是一个数组。该数组包含 Snowflake 传递的行。
每行都由 data
数组内嵌套的数组表示。
(因为 AWS Lambda 方便处理 Snowflake 发送的 HTTP POST 请求、提取主体,并将主体传递到事件参数内,Snowflake 提供的示例函数不需要解析整个 HTTP POST 请求。)
示例同步 Lambda 函数 包含 event
代码,展示如何读取参数。
选择 Lambda 函数的代码¶
Snowflake 示例函数¶
Snowflake 提供两个示例函数:
较短的示例是 同步函数。如果您刚刚接触外部函数或 Lambda 函数,Snowflake 建议您使用此函数来创建第一个示例外部函数。
有经验的用户还可以复制和修改此函数,以用作自定义远程服务的起点。
代码在 示例同步 Lambda 函数 中提供。
另一个示例是 异步函数。
此示例主要用于生成自定义异步远程服务。
代码在 示例异步 Lambda 函数 中提供。
自定义 Lambda 函数¶
您可以从头开始编写自己的 Lambda 函数,也可以使用 Snowflake 示例函数 (本主题内容)中描述的其中一个函数作为起点。
如果您有要使用的现有远程服务,您可以跳过本教程中此步骤的大部分说明。请改为执行以下操作:
在跟踪工作表的
Your AWS Account ID
字段中记录您的 AWS 账户 ID。在跟踪工作表的
Lambda Function Name
字段中记录远程服务的 Lambda 函数名称。
创建 Lambda 函数¶
要创建 AWS Lambda 函数,请按照以下步骤操作。
备注
尽管这些步骤向您展示如何创建 Snowflake 提供的示例远程服务,但您可以按照这些步骤创建自己的自定义远程服务。如果您创建自定义 Lambda 函数,请根据需要修改以下步骤(例如,为远程服务的代码选择适当的编程语言)。
如果您尚未登录 AWS 管理控制台,请登录。
如果您尚未在名为
Your AWS Account ID
的工作表字段中记录自己 AWS 账户 ID,请立即记录。如果您需要查找自己的 AWS 账户 ID,请按照 AWS 说明 (https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html#FindingYourAWSId) 操作。
选择 Lambda。
选择 Create function。
输入函数名称。
在工作表的
Lambda Function Name
字段中记录此名称。选择要使用的编程语言。如果您使用的是 Snowflake 提供的示例 Python 函数,请选择 Python 3.8。
为此函数选择或创建执行角色。
选择适当的选项,通常为 Create a new role with basic Lambda permissions。
(此角色不同于云账户角色,也不同于 Snowflake 角色。)
点击 Create Function 按钮。
在 lambda_function 选项卡中,输入函数的代码。
如果您尚未编写自己的函数,则可以使用 Snowflake 提供的以下示例:
示例同步代码 或
小技巧
如果您无法粘贴到编辑窗口中,请尝试双击函数的文件名以进行编辑。
点击 Deploy 按钮以部署函数。
测试 Lambda 函数¶
点击 Test 按钮旁边的向下箭头,然后选择 Configure test event。在 Event name 字段中,输入 test。
对于 Snowflake 提供的示例同步 Python 函数,请使用以下测试数据(用以下数据替换任何默认数据):
{ "body": "{ \"data\": [ [ 0, 43, \"page\" ], [ 1, 42, \"life, the universe, and everything\" ] ] }" }
点击 Create,然后点击 Test。
执行结果应该类似于:
{ "statusCode": 200, "body": "{\"data\": [[0, [\"Echoing inputs:\", 43, \"page\"]], [1, [\"Echoing inputs:\", 42, \"life, the universe, and everything\"]]]}" }
您现在有一个 AWS Lambda 函数,可以将其用作外部函数的远程服务。