Funktionen in Fabric-Apps verwenden

Funktionen sind TypeScript-Funktionen, die auf dem Server innerhalb Ihrer Fabric-App laufen. Verwenden Sie Funktionen für Logik, die im Browser nicht ausgeführt werden dürfen, wie zum Beispiel das Arbeiten mit Geheimnissen, den Zugriff auf privilegierte Daten und das Aufrufen von nachgelagerten Diensten mit der App-Identität.

Jede Funktion wird mit einem Namen registriert und als aufrufbarer HTTP-Endpunkt bereitgestellt. Dein React-Frontend ruft die Funktion über den typisierten Rayfin-Client auf, sodass du keine Anfragen, Routing oder Token-Handling implementieren musst.

Hinweis

Die Befehle in diesem Artikel verwenden eine Vorschauversion der Rayfin-CLI.

Wann eine Funktion verwendet werden sollte

Verwenden Sie eine Rayfin-Funktion, um:

  • Rufen Sie eine externe API mit einem Anwendungstoken auf. Beispiele sind Azure AI Foundry , Azure DevOps, Fabric, Azure Storage und Azure Key Vault.
  • Lesen oder schreiben Sie die Datenbank der App mit serverbedingter Zeilensicherheit.
  • Halte API-Schlüssel, Modell-Deployment-Namen und andere Geheimnisse aus dem Client-Code heraus.
  • Führen Sie Orchestrierungen, z. B. Fan-out-Aufrufe, Aggregation oder KI-Prompting, nah an den Daten aus.

Voraussetzungen

Bevor Sie beginnen, installieren oder erstellen Sie die folgenden Ressourcen:

  • Node.js 20 oder später und npm.
  • Ein Fabric-App-Gerüst, das mit der Rayfin-CLI erstellt wurde.
  • Azure Functions Core Tools, die vom lokalen Funktionshost zum Debuggen verwendet werden.

Install Azure Functions Core Tools version 4:

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

Erstellen Sie eine App mit Funktionen

Das Grundgerüst einer App erstellen und das zugehörige Funktionsprojekt initialisieren:

npm create @microsoft/rayfin@latest

cd my-app

npx rayfin functions init

Der rayfin functions init Befehl fügt das Functions-Projekt, seine TypeScript-Konfiguration und eine Starter-Funktionsdatei zur bestehenden App hinzu.

Baue die App mit GitHub Copilot

Das Gerüst beinhaltet die Anweisungen und Fähigkeiten des GitHub Copilot, die für die Arbeit am Projekt erforderlich sind. Öffne das Projekt in Visual Studio Code und beschreibe die App, die du bauen möchtest, in GitHub Copilot Chat.

Verwenden Sie zum Beispiel den folgenden Prompt, um einen KI-Pull-Request-Review-Assistenten zu erstellen:

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 kann die erforderlichen Dateien und Komponenten generieren und aktualisieren. Du kannst den Agenten auch bitten, die App auszuführen, die Funktionen lokal zu debuggen und die App zu deployen.

Verstehen Sie den Projektaufbau

Der Initialisierungsbefehl der Funktion aktualisiert rayfin/rayfin.yml und erstellt rayfin/functions. Eine typische App mit Funktionen hat folgende Struktur:

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

Die Dateien erfüllen folgende Zwecke:

Pfad Purpose
rayfin/rayfin.yml Konfiguriert Authentifizierung, Daten, Funktionen und statische Hosting-Dienste.
rayfin/data/ Enthält die Datenmodelle der App und Schema-Exporte.
rayfin/functions/package.json Definiert Abhängigkeiten und baut Skripte für das Funktionsprojekt.
rayfin/functions/tsconfig.json Konfiguriert den TypeScript-Build für Funktionen.
rayfin/functions/src/function_app.ts Enthält deine Funktionsimplementierungen.
rayfin/functions/src/types.ts Enthält die generierten AppFunctionsSchema Typen. Bearbeiten Sie diese Datei nicht manuell.
src/ Enthält das React-Frontend und alle gemeinsamen Domaintypen oder Wrapper.

Wenn Sie Funktionen aktivieren, umfasst rayfin/rayfin.yml den Funktionsdienst:

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

Anwendungsauthentifizierung

Aktivierte Funktionen erfordern eine explizite Anwendungsauthentifizierung in rayfin/rayfin.yml:

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

Neue Gerüste für Functions festlegen auth.type: application.

Deaktivierte Funktionen können ohne auth auskommen. Wenn Sie jedoch liefern auth, muss es Folgendes enthalten:

auth:
  type: application

Ein vollständiger npx rayfin up Ablauf und der normale npx rayfin dev Ablauf überprüfen diese Einstellung, bevor die Projekteinstellungen entweder auf das Fabric- oder das Docker-Backend angewendet werden.

Führe eine vollständige npx rayfin up Authentifizierung durch, um den YAML-Authentifizierungsmodus auf eine bestehende Remote-App anzuwenden.

Authentifizierungspfade, die von bereitgestellten Funktionen verwendet werden

Bereitgestellte Funktionen verwenden zwei separate Authentifizierungspfade:

Zugriffspfad Credential Identität und Berechtigungen
Externe Verbindungen über ctx.Tokens.* Plattformbereitgestellter Ressourcentoken Anwendungsidentität und ihre Berechtigungen auf der externen Ressource
Rayfin DB über ctx.getDataClient() Invocations Rayfin-Token Anrufer-Identität und Berechtigungen in der Rayfin-Datenbank

Für aktuelle Fabric-Apps ist die Anwendungsidentität die Eigentümerin des BaaS-Elements.

Externe Verbindungen nutzen daher die Berechtigungen des Item-Eigentümers, nicht die des App-Benutzers, der die Funktion aufruft. Gewähren Sie der App-Identität die Berechtigungen, die von jeder externen Ressource und jeder API, die vom Functions-Code aufgerufen wird, erforderlich sind.

Das Deklarieren einer Zielgruppe oder das Bereitstellen von Functions gewährt der App keine Identitätsberechtigungen für eine externe Ressource.

Die App-Anmeldung und die Autorisierung zum Aufrufen einer Funktion sind getrennt vom Zugriff der App-Identität auf externe Ressourcen.

Der Zugriff auf die Rayfin-Datenbank verwendet stets das Rayfin-Token und bewahrt die Identität sowie die Datenbankberechtigungen des Aufrufers. Die Einstellung services.functions.auth.type: application schaltet den Zugriff auf die Rayfin DB nicht auf die Anwendungsidentität um.

Für Audience-Deklarationen, Ressourcentokens, Berechtigungen und lokales Entwicklungsverhalten siehe Funktionen mit externen Ressourcen verbinden.

Lokales Ausführen der App

Melden Sie sich im Root-Ordner der App an:

cd my-app
npx rayfin login

Starte das Frontend und den lokalen Funktionshost:

npm run dev

In einem Projekt mit aktivierten Funktionen wird npm run devrayfin dev zugeordnet. Dieser Befehl wendet das Schema an, startet den lokalen Funktionshost und startet den Vite-Entwicklungsserver. Öffne die lokale URL, die im Terminal ausgedruckt ist, und lass das Terminal laufen, während du die App entwickelst und debuggst.

Um nur den Funktionshost zu starten, zum Beispiel wenn Sie das Frontend separat ausführen, verwenden Sie stattdessen folgenden Befehl:

cd my-app
npx rayfin dev 

In Fabric bereitstellen

Bereite die Daten, den statischen Standort und die Funktionen der App ein:


npx rayfin up --workspace <workspace-name>

Ersetzen Sie <WORKSPACE> durch den Namen des Ziel-Fabric-Arbeitsbereichs.

Funktionen zu einer bestehenden App hinzufügen

Von der Wurzel einer bestehenden Fabric-App aktivieren Sie die Funktion und initialisieren Sie das Funktionsprojekt einmal:


npx rayfin functions init

Fügen Sie nach der Initialisierung Funktionsimplementierungen in rayfin/functions/src/function_app.ts ein.

Einschränkungen

  • Funktionseigentum: Nur der Besitzer des Benutzerdaten-Funktionselements kann den Funktionscode ändern und veröffentlichen.
  • Veröffentlichungsabklingzeit: Warte mindestens zwei Minuten nach der Veröffentlichung, bevor du wieder veröffentlichst. Diese Wartezeit gilt beim Veröffentlichen über das In-Browser-Portal von Functions, die Visual Studio Code-Erweiterung für Benutzerdatenfunktionen, die Git-Importaktion oder Deployment-Pipelines.
  • Bereitstellungspaketgröße: Die Functions-ZIP-Datei darf 30 MB nicht überschreiten.
  • Nutzlastgröße der Anfrage: Der User Data Functions Service dokumentiert maximal 4 MB für alle Anforderungsparameter zusammen. Diese Grenze soll für Rayfin-Funktionen gelten, wurde aber noch nicht verifiziert.
  • Ausführungszeit: Eine Funktion kann bis zu 240 Sekunden laufen.
  • Aufbewahrung von Aufrufprotokollen: Historische Aufrufprotokolle werden standardmäßig für 30 Tage aufbewahrt.
  • Anwendungsidentität: Die Anwendungsidentität ist derzeit der Eigentümer des BaaS-Elements.

Für regionale Verfügbarkeitsanforderungen und weitere Details zu den Einschränkungen von Benutzerdatenfunktionen siehe Servicedetails und Einschränkungen der Fabric-Benutzerdatenfunktionen.