在 Fabric 应用中使用函数

函数是运行在 Fabric 应用内服务器上的 TypeScript 函数。 使用不能在浏览器中运行的逻辑函数,如处理秘密、访问特权数据以及调用应用身份的下游服务。

每个函数都会以一个名称进行注册,并公开为可调用的 HTTP 端点。 你的React前端通过类型化的Rayfin客户端调用函数,所以你不需要实现请求、路由或令牌处理。

注释

本文中的命令使用了 Rayfin CLI 的预览版本。

何时使用函数

使用Rayfin函数来:

  • 调用一个带有应用令牌的外部API。 例如Azure AI Foundry、Azure DevOps、Fabric、Azure 存储和Azure 密钥保管库。
  • 在服务器强制执行的行级安全下,读取或写入应用数据库。
  • 将API密钥、模型部署名称和其他秘密隐藏在客户端代码之外。
  • 在靠近数据的位置执行编排,例如扇出调用、聚合或 AI 提示词生成。

先决条件

在开始之前,安装或创建以下资源:

  • Node.js 20 或更高版本以及 npm。
  • 一个用 Rayfin CLI 创建的 Fabric 应用支架。
  • Azure Functions Core Tools,本地函数主机用它来调试。

Install Azure Functions Core Tools version 4:

npm install --global azure-functions-core-tools@4

创建一个带有功能的应用

支架应用并初始化其函数项目:

npm create @microsoft/rayfin@latest

cd my-app

npx rayfin functions init

该 rayfin functions init 命令会向现有应用添加函数项目、其 TypeScript 配置和起始函数文件。

用 GitHub Copilot 构建应用

该支架包含了GitHub Copilot的操作说明和操作项目所需的技能。 在 Visual Studio Code 中打开项目,并在 GitHub Copilot 对话助手 描述你想构建的应用。

例如,使用以下提示来构建一个AI拉取请求审核助手:

Build an app that helps business analysts track sales performance across
regions. Show key metrics, let analysts ask questions about trends, and
use Functions to securely retrieve data from our sales API with application
authentication.

GitHub Copilot 可以生成和更新所需的文件和组件。 你也可以让代理运行应用,本地调试功能,然后部署应用。

了解项目布局

函数初始化命令更新 rayfin/rayfin.yml 并创建 rayfin/functions。 一个包含函数的典型应用程序具有如下结构:

my-app/
├── rayfin/
│   ├── rayfin.yml
│   ├── data/
│   │   ├── TripPlan.ts
│   │   └── schema.ts
│   └── functions/
│       ├── package.json
│       ├── tsconfig.json
│       └── src/
│           ├── function_app.ts
│           └── types.ts
└── src/
    └── services/

这些文件具有以下目的:

路径 Purpose
rayfin/rayfin.yml 配置认证、数据、功能和静态托管服务。
rayfin/data/ 包含应用的数据模型和模式导出。
rayfin/functions/package.json 定义函数项目的依赖关系和构建脚本。
rayfin/functions/tsconfig.json 配置TypeScript构建以实现函数。
rayfin/functions/src/function_app.ts 包含你的函数实现。
rayfin/functions/src/types.ts 包含已生成的 AppFunctionsSchema 类型。 请勿手动编辑此文件。
src/ 包含 React 前端以及任何共享的域类型或封装器。

启用函数时, rayfin/rayfin.yml 包含函数服务:

services:
  functions:
    enabled: true
    auth:
      type: application
    buildCommand: npm run build

应用程序身份验证

已启用的功能要求在 rayfin/rayfin.yml 中对应用程序进行显式身份验证:

services:
  functions:
    enabled: true
    auth:
      type: application
    buildCommand: npm run build

新函数脚手架集合 auth.type: application。

禁用函数可以省略 auth。 但是,如果您提供 auth,则必须包含以下内容:

auth:
  type: application

完整的npx rayfin up和常规的npx rayfin dev流程会在将项目设置应用到 Fabric 或 Docker 后端之前验证此设置。

运行一个完整的 npx rayfin up 程序,将YAML认证模式应用到现有的远程应用上。

部署功能所使用的认证路径

部署功能使用两条独立的认证路径:

访问路径 凭证 标识和权限
通过 ctx.Tokens.* 的外部连接 平台提供的资源令牌 应用程序身份及其对外部资源的权限
通过 ctx.getDataClient() Rayfin 数据库 Invocation的Rayfin令牌 Rayfin数据库中的呼叫者身份和权限

对于当前的 Fabric 应用,应用身份是 BaaS 项目的所有者。

因此,外部连接使用的是物品所有者的权限,而不是调用该功能的应用用户的权限。 向应用标识授予 Functions 代码调用的每个外部资源和 API 所需的权限。

声明受众或部署 Functions 并不会赋予应用身份权限给外部资源。

应用登录和调用函数的授权与应用身份对外部资源的访问是分开的。

Rayfin 数据库访问始终使用 Rayfin 令牌,并保留调用者的身份和数据库权限。 设置 services.functions.auth.type: application 不会将对 Rayfin DB 的访问切换到应用程序身份。

关于受众声明、资源令牌、权限和本地开发行为,请参见 “连接函数”到外部资源。

在本地运行应用

从应用的根文件夹登录:

cd my-app
npx rayfin login

启动前端和本地函数主机:

npm run dev

在函数启用项目中, npm run dev 映射到 rayfin dev。 该命令应用模式,启动本地函数主机,并启动 Vite 开发服务器。 打开终端打印的本地URL,保持终端运行,同时开发和调试应用。

如果只启动 Functions 主机,例如,当你单独运行前端时,请改用以下命令:

cd my-app
npx rayfin dev 

部署到Fabric

部署应用的数据、静态网站和功能:


npx rayfin up --workspace <workspace-name>

请将 <WORKSPACE> 替换为目标 Fabric 工作区的名称。

为现有应用添加功能

从现有 Fabric 应用的根节点,启用该功能并初始化函数项目一次:


npx rayfin functions init

初始化后,将函数实现添加到 rayfin/functions/src/function_app.ts。

局限性

  • 函数所有权:只有用户数据功能项目的所有者可以修改和发布函数代码。
  • 发布冷却时间:发布后至少等待两分钟后再发布。 当通过 Functions 的浏览器内门户、用户数据函数的 Visual Studio Code 扩展、Git 导入操作或部署管道进行发布时,适用此冷却期。
  • 部署包大小:功能 ZIP 文件不能超过 30 MB。
  • 请求有效载荷大小:用户数据函数服务记录所有请求参数加起来最大4MB。 这个限制预计适用于雷鳍函数,但尚未被验证。
  • 执行超时:一个函数可运行最长240秒。
  • 调用日志保留:历史调用日志默认保留30天。
  • 应用身份:应用身份目前是BaaS项目的所有者。

有关区域可用性要求及用户数据功能限制的更多细节,请参见服务详情及 Fabric 用户数据功能的限制。