为 Azure 规划外部函数¶
本主题帮助您准备使用 Azure 门户或 Snowflake 提供的 ARM (Azure 资源管理器)模板为 Microsoft Azure 创建外部函数。
本主题内容:
先决条件¶
这些说明假设您是经验丰富的 Azure 门户用户。
要为 Azure 创建外部函数,必须具备以下条件:
一个 Azure AD (Active Directory) 租户。
该 Azure AD 租户中的一个账户。该账户必须具有以下权限:
创建 Azure 函数应用程序。
使用 Azure API 管理服务创建服务端点。
注册 Azure AD 应用程序。
一个 Snowflake 账户,您在其中拥有 ACCOUNTADMIN 角色或拥有 CREATE INTEGRATION 权限的角色
此外,您应该已经有一个 Azure AD 租户 ID。
Azure AD 租户 ID 是 UUID (link removed),其格式通常看起来类似于 12345678-abcd-1234-efab-123456789012
,其中每个非短划线字符都是十六进制数字。
如果您不知道自己的 Azure AD 租户 ID,可以通过以下步骤找到它:
登录 Azure 门户 (http://portal.azure.com (http://portal.azure.com))。
在页面顶部附近的 Azure services 图标中,点击 Azure Active Directory。
在左侧的菜单中,查找标题为的 Manage 的部分,然后点击其下方的 Properties。
Azure AD 租户 ID 就显示在 Tenant ID 字段中。
选择创建外部函数的方法¶
Snowflake 提供有关在 Azure 上创建外部函数的两种方法的说明:
Azure 门户网站界面
Snowflake 提供的 ARM (Azure 资源管理器)模板
Azure 门户¶
可以使用 Azure 门户 (https://azure.microsoft.com/en-us/features/azure-portal/) 创建 Azure 函数(作为远程服务)和 API 管理服务实例(作为代理服务)。如果选择此方法,还可使用 Azure 门户配置与安全性相关的设置。
使用 Azure 门户创建外部函数的说明包括示例 Azure 函数和创建基本 API 管理服务实例的详细信息:
新用户几乎无需修改即可使用说明和示例 Azure 函数。
有经验的用户可以使用说明和示例 Azure 函数作为创建自定义 Azure 函数和自定义配置 API 管理服务实例的起点。
ARM (Azure 资源管理器)模板¶
ARM 模板 (https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) 使用 JSON (https://www.json.org/) 来描述有关 Azure Function(作为远程服务)和 Azure API 管理服务实例(作为代理服务)的配置信息。
Snowflake 提供的 ARM 示例模板包括以下内容:
示例 Azure 函数。
示例 API 管理服务的大部分配置信息。如果要自定义示例 API 管理服务,则必须输入一些其他信息。
用于创建 Azure 函数服务所需的存储账户的代码。
用于将验证 JWT (JSON Web 令牌)策略添加到 API 管理实例以提高 Azure API 管理服务安全性的代码。但是,在使用验证 JWT 策略之前,必须手动更新该策略。
ARM 模板对新用户和有经验的用户都很有用:
新用户可能需要从 Snowflake 示例模板开始,因为它减少了创建 Azure 函数和 API 管理服务实例所需的步骤。
请注意,尽管基于模板的指令可以有助于快速创建第一个外部函数,但它们会跳过大多数用户在创建自定义外部函数时所需的步骤。
有经验的用户可能想要使用 ARM 模板,因为模板可用于自动部署。如果您在迭代开发 Azure 函数和 API 管理服务,这可能会很有用。
有关使用 ARM 模板配置 Azure 函数的更多信息,请参阅 Microsoft 文档:资源部署 (https://docs.microsoft.com/en-us/azure/azure-functions/functions-infrastructure-as-code)。
准备使用 Azure 门户¶
这些部分可帮助您准备使 用Azure 门户在 Microsoft Azure 上创建外部函数。
为 Azure 函数选择定价计划¶
在 Microsoft Azure 中,Azure 函数(远程服务)可以在 Linux 主机或 Windows 主机上运行。目前,Azure 为 Linux 和 Windows 主机提供不同的定价和身份验证选项组合。
如果您计划在 Linux 上运行 Azure 函数,则必须选择 Azure 定价计划和身份验证的有效组合:
如果您使用高级版或应用服务定价计划,请执行下操作:
从 Azure 门户中 Azure Functions 屏幕上 Authentication/Authorization 选项卡创建 Azure AD (Active Directory) 应用程序。
使用 Azure AD 通过 Azure 函数服务进行身份验证。
稍后在 创建远程服务的说明 中提供了其他详细信息和链接。
如果您使用消费定价计划:
在 Azure 门户中手动创建 Azure AD 应用程序。稍后在 创建远程服务的说明 中提供了其他详细信息。
为 API 管理实例设置验证 JWT 策略。有关详细信息,请参阅 第 6 步:在门户中创建代理服务的 Azure 安全策略。
使用 IP 地址限制将远程服务限制为仅接受来自 API 管理服务实例的连接。有关详细信息,请参阅 限制接受 Azure 函数调用的 IP 地址(可选)。
创建用于跟踪所需信息的工作表¶
在您完成在 Azure 门户中创建外部函数的任务时,需要在创建过程的每个步骤中输入特定的值(如 API 管理服务名称)。通常情况下,后续步骤中需要您输入的值。
为了便于记录/跟踪这些信息,我们提供了一份工作表,其中对每个必填值都设置了字段:
================================================================================
======================= Tracking Worksheet: Azure Portal =======================
================================================================================
****** Step 1: Azure Function (Remote Service) Info ****************************
Azure Function app name: _______________________________________________________
HTTP-Triggered Function name: __________________________________________________
Azure Function AD app registration name: _______________________________________
Azure Function App AD Application ID: __________________________________________
(The value for the Azure Function App AD Application ID above is the
"Application (client) ID" of the Azure AD app registration for the
Azure Function. The value is used to fill in the "azure_ad_application_id"
field in the CREATE API INTEGRATION command. This value is in the form of a
UUID (universally unique identifier), which contains hexadecimal digits and
dashes.)
****** Step 2: Azure API Management Service (Proxy Service) Info ***************
API Management service name: ___________________________________________________
API Management API URL suffix: _________________________________________________
****** Steps 3-5: API Integration & External Function Info *********************
API Integration Name: __________________________________________________________
AZURE_MULTI_TENANT_APP_NAME: ___________________________________________________
AZURE_CONSENT_URL: _____________________________________________________________
External Function Name: ________________________________________________________
准备使用 ARM 模板¶
这些部分可以帮助您准备好使用 Snowflake 提供的 ARM 模板在 Microsoft Azure 上创建外部函数。
下载模板¶
该模板可从 GitHub 中的 Snowflake 存储库 (https://github.com/Snowflake-Labs/sfguide-external-functions-examples/tree/main/DeploymentTemplates/azure/BasicSetup.json) 中下载。
必须先将该模板导入 Azure 门户,然后才能使用它。有关导入模板的详细信息将在描述使用模板的后续主题中说明。
为 Azure 函数选择定价计划¶
在 Microsoft Azure 中,Azure 函数(远程服务)可以在 Linux 主机或 Windows 主机上运行。目前,Azure 为 Linux 和 Windows 主机提供不同的定价和身份验证选项组合。
Snowflake 提供的 ARM 模板默认使用以下定价计划和身份验证信息:
默认为 Azure 函数使用 Windows 主机。
默认为“消费”定价等级。
创建 Azure 函数应用程序,并将该应用程序配置为需要 AD (Active Directory) 身份验证。
创建安全策略以验证授权 Snowflake 调用您的 Azure 函数的 JWT (JSON 网络令牌)。
请注意,此安全策略缺少一个字段,稍后提供的说明将告诉您如何填写此字段。
如果您计划使用不同的配置运行 Azure API 管理实例或 Azure 函数,则必须更新模板。有关更新模板的信息,请参阅 Microsoft 文档:
自动资源部署 (https://docs.microsoft.com/en-us/azure/azure-functions/functions-infrastructure-as-code) (适用于 Azure 函数中的函数应用程序)
创建用于跟踪所需信息的工作表¶
在您使用 Snowflake 提供的 ARM 模板完成创建外部函数任务的过程中,需要在该过程的每个步骤中输入特定的值(例如 API 管理服务名称)。通常情况下,后续步骤中需要您输入的值。
为了便于记录/跟踪这些信息,我们提供了一份工作表,其中对每个必填值都设置了字段:
备注
对于 ARM 模板中硬编码的信息,这些值已经填写完毕。
================================================================================
======================= Tracking Worksheet: ARM Template =======================
================================================================================
****** Step 1: Azure Function (Remote Service) Info ****************************
HTTP-Triggered Function name: __________________ echo __________________________
Azure Function AD Application ID: ______________________________________________
(The value for the Azure Function AD Application ID above is the
"Application (client) ID" of the Azure AD app registration for the
Azure Function. The value is used to fill in the "azure_ad_application_id"
field in the CREATE API INTEGRATION command. This value is in the form of a
UUID (universally unique identifier), which contains hexadecimal digits and
dashes.)
****** Step 2: Azure API Management Service (Proxy Service) Info ***************
API Management service name: ___________________________________________________
API Management URL: ____________________________________________________________
Azure Function HTTP Trigger URL: _______________________________________________
API Management API URL suffix: _________________________________________________
****** Steps 3-5: API Integration & External Function Info *********************
API Integration Name: __________________________________________________________
AZURE_MULTI_TENANT_APP_NAME: ___________________________________________________
AZURE_CONSENT_URL: _____________________________________________________________
External Function Name: ________________________________________________________
下一步¶
- Azure 门户:
- ARM 模板: