通过 Azure Functions 按需运行代码

已完成

创建了函数应用后,让我们了解如何生成、配置和执行函数。 我们将在下一个练习中执行函数,所以在本单元中无需完成任何任务。

触发器

函数是事件驱动的,也就是说函数的运行是对某个事件的响应。 启动函数的事件类型称为触发器。 每个函数都必须配置一个触发器。

可使用来自以下 Azure 服务的 HTTP 请求、计划的计时器和事件来触发函数执行:

Azure 服务 触发器说明
Blob 存储 检测到新的或更新的 Blob 时启动函数。
Azure Cosmos DB 在检测到插入内容或更新内容时启动函数。
事件网格 在事件网格收到新事件时启动函数。
事件中心 在事件中心收到新事件时启动函数。
队列存储 在队列收到新项时启动函数。 队列消息作为输入提供给该函数。
服务总线 启动函数以响应来自服务总线队列的消息。

绑定

绑定是将数据和服务连接到函数的声明性方式。 绑定与各种数据源交互,也就是说要连接到数据源并管理连接,无需在函数中编写代码。 该平台会通过绑定代码为你处理这些复杂性。 每个绑定都有一个方向:代码从“输入”绑定读取数据,并将数据写入“输出”绑定。 每个函数都有零个或多个绑定,以便管理由函数处理的输入和输出数据。

触发器是一种能够启动某些代码执行的输入绑定类型。

Azure 提供了大量绑定,以便连接到不同的存储和消息服务。

定义示例绑定

让我们来看一个配置函数的示例,其中有输入绑定(触发器)和输出绑定。 假设希望在 Azure 队列存储中显示一条新消息时就将一个新行写入 Azure 表存储。 使用 Azure 队列存储触发器和 Azure 表存储输出绑定即可实现此方案。

以下代码段是此方案的 function.json 文件。

{
  "bindings": [
    {
      "name": "order",
      "type": "queueTrigger",
      "direction": "in",
      "queueName": "myqueue-items",
      "connection": "MY_STORAGE_ACCT_APP_SETTING"
    },
    {
      "name": "$return",
      "type": "table",
      "direction": "out",
      "tableName": "outTable",
      "connection": "MY_TABLE_STORAGE_ACCT_APP_SETTING"
    }
  ]
}

我们的 JSON 配置指定在将消息添加到名为“myqueue-items”的队列时触发我们的函数。 然后,将函数的返回值写入 Azure 表存储中的“outTable”。

对于 PowerShell 函数,输出绑定是使用 Push-OutputBinding cmdlet 显式写入的。

此示例简单说明了我们如何为函数配置绑定。 可以使用 SendGrid 绑定将输出更改为电子邮件,或将事件置于服务总线上,以通知体系结构中的一些其他组件。 我们甚至可以有多个输出绑定将数据推送到各种服务。

提示

若要在 Azure 门户中查看和编辑 function.json 的内容,请在主页中选择自己的函数应用,然后在右侧窗格中选择“JSON 视图”。 “资源 JSON”视图显示资源 ID 和可编辑的 JSON 代码。 要关闭 JSON 视图,请选择窗格右上角的“X”。

并非 Functions 支持的所有语言都使用 function.json 文件来定义函数。

在 Azure 门户中创建函数

Azure Functions 具有预定义的函数模板,它们基于特定类型的触发器。 使用所选语言的这些模板可以轻松开始创建第一个函数。

Functions 支持的所有语言都不支持此模块,门户本身也不支持使用 Functions 支持的所有语言创建函数。

对于使用 function.json 文件定义函数的支持语言,可以直接在 Azure 门户中创建和编辑这些函数。 这些门户支持的语言包括:JavaScript、PowerShell、Python 和 C# 脚本 (.csx)。 直接在代码本身中定义函数的语言必须在门户之外开发并部署到 Azure。 这些非门户支持的语言包括:C#、Java、Python(v2 编程模型)和 JavaScript/TypeScript(Node.js v4 编程模型)。

函数模板

在门户中创建第一个函数时,可为函数选择预定义的触发器。 根据你的选择,Azure 生成默认的代码和配置信息,例如在收到输入数据时创建事件日志条目。

从“添加函数”窗格中选择模板可以轻松访问最常用的开发环境、触发器、依赖项。 在 Azure 门户中创建函数时,可从 20 多个模板中进行选择。 创建后,可进一步自定义代码。

从模板创建函数时,系统会创建多个文件,包括配置文件 function.json 和源代码文件 index.js。

从“函数应用”菜单中选择“函数”类别下的“函数”,可为你的函数应用创建或编辑函数。

选择在你的函数应用中创建的一个函数时,将打开“函数”窗格。 通过从“函数”菜单中选择“代码 + 测试”,可访问命令栏中的操作来测试和运行代码、保存或放弃所做的更改或获取发布的 URL。 通过从命令栏中选择“测试/运行”,可对包含查询字符串和值的请求运行用例。 代码框上方的函数路径显示了打开的文件的名称。 可从下拉列表中选择特定的文件(例如 function.json)来测试或编辑。

显示扩展的“测试/运行”视图的函数代码和测试编辑器的屏幕截图,其中突出显示了菜单选项。

在上图中,右侧窗格有“输入”和“输出”选项卡。 选择“输入”选项卡,可通过添加查询参数并为查询字符串提供值来生成和测试函数。 “输出”选项卡显示请求的结果。

测试 Azure 函数

在门户中创建函数后,需要对其进行测试。 有两种方法:

  • 在门户中进行测试
  • 手动运行

在 Azure 门户中测试

该门户还提供测试函数的便捷方法。 如上面的屏幕截图所述。 在此窗格中选择“运行”时,结果会自动显示在“输出”标签中,并且“日志”窗格会打开以显示状态。

手动运行函数

可以通过手动触发已配置触发器来启动函数。 例如,如果你使用 HTTP 触发器,则可以使用这些 HTTP 测试工具之一向函数终结点 URL 发起 HTTP 请求:

注意

对于具有敏感数据(例如凭据、机密、访问令牌、API 密钥和其他类似信息)的情况,请务必使用具有必要安全功能可保护数据的工具,该工具可脱机或本地工作,不会将数据同步到云,并且不需要登录联机帐户。 这样可以降低向公众公开敏感数据的风险。

可以从门户中的函数定义页面选择“获取函数 URL”来获取 HTTP 触发器的 URL 终结点

监视和 Application Insights 仪表板

在开发和生产过程中,监视函数的能力至关重要。 Azure 门户提供了监控仪表板,可通过启用 Application Insights 集成来打开它。 在“函数应用”菜单中的“设置”下,依次选择“Application Insights”、“启用 Application Insights”和“应用”。 在对话框中,选择“是”。 使用 Application Insights 仪表板,可显示由 Application Insights 填充的时间戳、结果代码、持续时间和操作 ID,从而快速查看函数操作的历史记录。

显示 HTTP 函数 Application Insights 仪表板的屏幕截图,其中突出显示了函数结果、相应的 HTTP 状态代码和“监视”菜单项。

“流式传输日志”窗格

在 Azure 门户中启用 Application Insights 后,可将日志记录语句添加到函数以进行调试。 为每种语言调用的方法都将被传递一个“logging”对象,该对象可用于在运行测试时将日志信息添加至“代码 + 测试”窗格中的“日志”窗格。

使用 context 对象上的 log 方法从代码中写入日志,该方法将传递给处理程序。 以下示例写入默认日志级别(信息):

context.log('Enter your logging statement here');

使用 Write-Host cmdlet 从代码写入日志,如以下示例所示:

Write-Host "Enter your logging statement here"

错误、失败、警告和异常

可使用指标或“函数”菜单中“调查”类别的选项来监视性能、诊断故障,或者配置几十个预定义的工作簿来管理函数应用。 从代码中的编译错误和警告到按角色分类的使用情况统计信息。