第 1 步:在门户中创建远程服务(Azure 函数)¶
本主题详细说明了如何创建 Azure 函数以用作外部函数的远程服务。
本主题内容:
上一步¶
创建 Azure Functions 应用程序¶
创建远程服务有多种可能的方法。本节介绍如何创建作为 JavaScript 函数实现的远程服务。
此外部函数是 同步 函数。有关创建 异步 外部函数的信息,请参阅 在 Azure 上创建异步函数。
创建一个 Azure Functions 应用程序,以用作稍后创建的函数的容器:
如果尚未导入,请登录 Azure 门户。
按照 Microsoft 文档“Azure Functions 应用程序 (https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-function-app-portal)”中的说明,创建 Azure Functions 应用程序。
按照说明操作时,请记住以下几点:
在 Function App Name 字段中输入名称时,还要在跟踪工作表的
Azure Function app name
字段中记录该名称。当需要选择如何 Publish 时,请选择 Code。
在同一资源组中创建多个应用程序时存在一些限制。有关详细信息,请参阅 Microsoft 文档:Azure 应用程序服务 (https://docs.microsoft.com/en-us/azure/app-service/containers/app-service-linux-intro#limitations)。
Snowflake在 Node.js 中提供了一个示例“echo”函数。要使用此示例函数开始入门,请执行以下操作:
当需要
Runtime stack
时,选择 Node.js。当需要 Node.js 的版本时,选择版本 12。
当需要在哪个 OS 上运行该函数时,选择“Windows”或“Linux”。
如果您只是创建演示函数,Snowflake 建议选择“Windows”。
无法在 Azure 门户中编辑 Linux 函数应用程序。用户必须通过 Visual Studio Code 界面发布代码。
如果要在 Linux(而不是 Microsoft Windows)上运行 Azure Functions,请参阅 Microsoft 文档:Azure Functions (https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-first-function-vs-code?pivots=programming-language-javascript)。
使用 Azure Functions 的“消费”定价方案时,Azure AD 身份验证在 Linux 上不可用。您必须使用“应用程序服务”定价方案或“高级”定价方案才能通过 Azure AD 进行身份验证。
有关更多详细信息,请参阅 Microsoft 文档:Azure AD (https://docs.microsoft.com/en-us/azure/app-service/configure-authentication-provider-aad)。
创建 HTTP 触发的 Azure 函数¶
创建 Azure Functions 应用程序(容器)后,需要在容器中创建 Azure Functions。此函数充当远程服务。
Microsoft 允许以不同方式调用(“触发”)Azure Functions。Snowflake 外部函数通过 HTTP POST 命令调用远程服务,因此您创建的 Azure 函数必须是“HTTP 触发的函数”。
小技巧
您可以使用 Microsoft 提供的说明来创建 HTTP 触发的函数:
创建应用程序门户 (https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-function-app-portal)
创建 Azure 函数 (https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-first-azure-function#create-function)
但是,Snowflake 提供自定义说明,其中包括其他详细信息和示例代码,并建议与 Microsoft 不同的授权级别。建议使用自定义说明来代替 Microsoft 的说明。
创建函数¶
要执行本节中描述的任务,您应进入 Azure 门户中的 Function App 屏幕。通常在屏幕左上角旁边,应显示 Azure Functions 应用程序的名称。
要创建 HTTP 触发的函数,请执行以下操作:
在左侧菜单树中,查找标题为 Functions 的部分。在该部分中,点击标记为 Functions 的项目来添加函数。
点击 + Add 按钮。
从右侧的潜在触发器列表中选择 HTTP trigger。
输入用于 HTTP 触发函数的名称。
将此名称记录在跟踪工作表的
HTTP-Triggered Function name
字段中。输入 Authorization level。
Snowflake 建议选择 Function 作为授权级别。
有关可能的授权级别的更多信息,请参阅 Microsoft 文档:HTTP 触发的函数 (https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-http-webhook-trigger?tabs=csharp#configuration)。
点击标题为 Add 的按钮。
您会进入一个屏幕,其中显示了函数名称及其下方的 Function 一词。
在左侧的树形菜单中,点击 Code + Test。
将默认代码替换为您自己的代码。
下面提供了 JavaScript“echo”函数的示例代码。
该函数读取每一行,然后将相应行复制到输出(结果)。行号也包含在输出中。输出作为多级字典的一部分返回。
此函数接受并返回的数据的格式与 Snowflake 发送和读取的格式 (JSON) 相同。有关数据格式的更多详细信息,请参阅 远程服务输入和输出数据格式。
通常,该函数返回 HTTP 代码 200。如果没有行传递给函数(即,如果请求正文为空),则该函数返回错误代码 400。
module.exports = async function(context, request) { context.log('JavaScript HTTP trigger function processed a request.'); if (request.body) { var rows = request.body.data; var results = []; rows.forEach(row => { results.push([row[0], row]); }); results = {data: results} context.res = { status: 200, body: JSON.stringify(results) }; } else { context.res = { status: 400, body: "Please pass data in the request body." }; } };
点击代码上方的 Save 按钮。
测试函数¶
要测试刚创建的 HTTP 触发的 Azure 函数,请将以下示例数据粘贴到 Body 字段中,然后点击 Test/Run 按钮:
{ "data": [ [ 0, 43, "page" ], [ 1, 42, "life, the universe, and everything" ] ] }
输出的内容应类似于以下内容:
{ "data": [ [ 0, [ 0, 43, "page" ] ], [ 1, [ 1, 42, "life, the universe, and everything" ] ] ] }
请注意,格式可能与上面显示的不同。