Gebruik functies in Fabric-apps

Functies zijn TypeScript-functies die op de server binnen je Fabric-app draaien. Gebruik functies voor logica die niet in de browser mogen draaien, zoals werken met geheimen, toegang krijgen tot bevoorrechte gegevens en het aanroepen van downstream-diensten met de app-identiteit.

Elke functie wordt geregistreerd met een naam en wordt blootgesteld als een aanroepbaar HTTP-eindpunt. Je React-frontend roept de functie aan via de getypeerde Rayfin-client, dus je hoeft geen verzoeken, routing of tokenbehandeling te implementeren.

Opmerking

De commando's in dit artikel gebruiken een previewversie van de Rayfin CLI.

Wanneer een functie te gebruiken

Gebruik een rayfin-functie om:

  • Roep een externe API aan met een applicatietoken. Voorbeelden zijn Azure AI Foundry, Azure DevOps, Fabric, Azure Storage en Azure Key Vault.
  • Lees of schrijf in de database van de app met door de server afgedwongen beveiliging op rijniveau.
  • Houd API-sleutels, model-implementatienamen en andere geheimen buiten de clientcode.
  • Voer orkestratie uit, zoals fan-out-aanroepen, aggregatie of AI-prompts, dicht bij de gegevens.

Prerequisites

Installeer of maak voordat je begint de volgende bronnen:

  • Node.js 20 of hoger en npm.
  • Een Fabric-app-skelet gegenereerd met de Rayfin CLI.
  • Azure Functions Core Tools, die de lokale Functions-host gebruikt voor debugging.

Install Azure Functions Core Tools versie 4:

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

Maak een app met functies

Maak een app-structuur en initialiseer het Functions-project:

npm create @microsoft/rayfin@latest

cd my-app

npx rayfin functions init

Het rayfin functions init commando voegt het functions-project, de TypeScript-configuratie en een starter-functiebestand toe aan de bestaande app.

Bouw de app met GitHub Copilot

De steiger bevat de instructies en vaardigheden van GitHub Copilot die nodig zijn om met het project te werken. Open het project in Visual Studio Code en beschrijf de app die je wilt bouwen in GitHub Copilot Chat.

Gebruik bijvoorbeeld de volgende prompt om een AI-pull request review-assistent te bouwen:

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 kan de benodigde bestanden en componenten genereren en bijwerken. Je kunt de agent ook vragen de app te draaien, lokale functies te debuggen en de app te deployen.

Begrijp de projectindeling

Met het initialisatiecommando voor functies werkt u rayfin/rayfin.yml bij en maakt u rayfin/functions. Een typische app met functies heeft de volgende structuur:

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

De bestanden dienen de volgende doelen:

Pad Purpose
rayfin/rayfin.yml Configuratie van authenticatie, data, functies en statische hostingservices.
rayfin/data/ Bevat de datamodellen en schema-exports van de app.
rayfin/functions/package.json Definieert afhankelijkheden en bouwt scripts voor het Functions-project.
rayfin/functions/tsconfig.json Configureert de TypeScript-build voor functies.
rayfin/functions/src/function_app.ts Bevat je functie-implementaties.
rayfin/functions/src/types.ts Bevat de gegenereerde AppFunctionsSchema types. Bewerk dit bestand niet handmatig.
src/ Bevat de React-frontend en alle gedeelde domeintypen of wrappers.

Wanneer je functies inschakelt, rayfin/rayfin.yml bevat de functies-service:

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

Applicatie-authenticatie

Geactiveerde functies vereisen expliciete applicatieauthenticatie in rayfin/rayfin.yml:

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

Nieuwe Functions steigers verzamelen auth.type: application.

Uitgeschakelde functies kunnen auth weglaten. Als je echter levert auth, moet dit het volgende bevatten:

auth:
  type: application

Een volledige npx rayfin up en de normale npx rayfin dev flow valideren deze instelling voordat projectinstellingen worden toegepast op de Fabric- of Docker-backend.

Voer een volledige npx rayfin up test uit om de YAML-authenticatiemodus toe te passen op een bestaande externe app.

Authenticatiepaden die door geïmplementeerde Functions worden gebruikt

Uitgerolde functies gebruiken twee aparte authenticatiepaden:

Toegangspad Credential Identiteit en machtigingen
Externe verbindingen via ctx.Tokens.* Door het platform verstrekte resourcetoken Applicatie-identiteit en de bijbehorende rechten op de externe bron
Rayfin DB via ctx.getDataClient() Rayfin-token van Invocation De identiteit en rechten van de beller in de Rayfin-database

Voor huidige Fabric-apps is de applicatieidentiteit de eigenaar van het BaaS-item.

Externe verbindingen gebruiken daarom de rechten van de item-eigenaar, niet die van de app-gebruiker die de functie aanroept. Verleen de app-identiteit de machtigingen die vereist zijn door elke externe resource en API die door de Functions-code wordt aangeroepen.

Het declareren van een audience of het deployen van Functions geeft de app-identiteit geen rechten aan een externe bron.

App-aanmelden en autorisatie om een functie aan te roepen staan los van de toegang van de app-identiteit tot externe bronnen.

Rayfin DB-toegang gebruikt altijd het Rayfin-token en behoudt de identiteit en databaserechten van de aanroeper. Met de instelling services.functions.auth.type: application wordt de toegang tot de Rayfin-database niet overgeschakeld naar de applicatieidentiteit.

Voor audience-declaraties, resource tokens, permissies en lokaal ontwikkelingsgedrag, zie Connect Functions to external resources.

De app lokaal uitvoeren

Log in vanuit de rootmap van de app:

cd my-app
npx rayfin login

Start de frontend en de lokale functiehost:

npm run dev

In een project met functies ingeschakeld, wordt npm run dev toegewezen aan rayfin dev. Dit commando past het schema toe, start de host van lokale functies en start de Vite-ontwikkelserver. Open de lokale URL die in de terminal is afgedrukt en houd de terminal draaiende terwijl je de app ontwikkelt en debuggt.

Om alleen de functions host te starten, bijvoorbeeld wanneer je de frontend apart uitvoert, gebruik dan in plaats daarvan het volgende commando:

cd my-app
npx rayfin dev 

Implementeren in Fabric

Rol de data, statische site en functies van de app uit:


npx rayfin up --workspace <workspace-name>

Vervang <WORKSPACE> door de naam van de doel-Fabric-werkruimte.

Voeg functies toe aan een bestaande app

Vanaf de wortel van een bestaande Fabric-app, schakel de functie in en initialiseer het functieproject één keer:


npx rayfin functions init

Voeg na initialisatie functie-implementaties toe aan rayfin/functions/src/function_app.ts.

Limitations

  • Functie-eigendom: Alleen de eigenaar van het gebruikersgegevensfunctie-item kan de Functions-code wijzigen en publiceren.
  • Publicatie-cooldown: Wacht minstens twee minuten na publicatie voordat je opnieuw publiceert. Deze afkoelperiode geldt wanneer je publiceert vanuit de browserportal van Functions, de Visual Studio Code-extensie voor gebruikersgegevensfuncties, de Git-importactie of implementatiepijplijnen.
  • Grootte van het deploymentpakket: Het Functions ZIP-bestand mag niet groter zijn dan 30 MB.
  • Grootte van de aanvraagpayload: De service voor gebruikersgegevensfuncties vermeldt een maximum van 4 MB voor alle aanvraagparameters samen. Deze limiet wordt verwacht van toepassing op Rayfin-functies, maar is nog niet geverifieerd.
  • Uitvoeringstimeout: Een functie kan tot 240 seconden draaien.
  • Invocation log retentie: Historische invocationlogs worden standaard 30 dagen bewaard.
  • Applicatie-identiteit: De applicatie-identiteit is momenteel de eigenaar van het BaaS-item.

Voor regionale beschikbaarheidsvereisten en meer details over de beperkingen van gebruikersgegevensfuncties, zie Servicedetails en beperkingen van Fabric-gebruikersgegevensfuncties.