Använd funktioner i Fabric Apps

Funktioner är TypeScript-funktioner som körs på servern i din Fabric-app. Använd funktioner för logik som inte får köras i webbläsaren, såsom att arbeta med hemligheter, komma åt privilegierad data och anropa nedströmstjänster med appens identitet.

Varje funktion registreras med ett namn och exponeras som en anropbar HTTP-endpoint. Ditt React-frontend anropar funktionen via den typade Rayfin-klienten, så du behöver inte implementera förfrågningar, routing eller tokenhantering.

Anmärkning

Kommandona i denna artikel använder en förhandsversion av Rayfin CLI.

När man ska använda en funktion

Använd en rayfin-funktion för att:

  • Anropa ett externt API med en applikationstoken. Exempel inkluderar Azure AI Foundry, Azure DevOps, Fabric, Azure Storage och Azure Key Vault.
  • Läs eller skriv appens databas med serverförstärkt radsäkerhetsnivå.
  • Håll API-nycklar, modelldistributionsnamn och andra hemligheter borta från klientkoden.
  • Utför orkestrering, som parallella anrop, aggregering eller AI-uppmaningar, nära data.

Förutsättningar

Innan du börjar, installera eller skapa följande resurser:

  • Node.js 20 eller senare och NPM.
  • En Fabric-app-stomma skapad med Rayfin CLI.
  • Azure Functions Core Tools, som de lokala funktionerna använder för felsökning.

Install Azure Functions Core Tools version 4:

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

Skapa en app med funktioner

Skapa en app och initiera dess Functions-projekt:

npm create @microsoft/rayfin@latest

cd my-app

npx rayfin functions init

Kommandot rayfin functions init lägger till funktionsprojektet, dess TypeScript-konfiguration och en startfunktion till den befintliga appen.

Bygg appen med GitHub Copilot

Projektmallen innehåller de GitHub Copilot-instruktioner och funktioner som behövs för att arbeta med projektet. Öppna projektet i Visual Studio Code och beskriv appen du vill bygga i GitHub Copilot Chat.

Använd till exempel följande prompt för att bygga en AI-pull request-granskningsassistent:

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 generera och uppdatera de nödvändiga filerna och komponenterna. Du kan också be agenten att köra appen, felsöka funktioner lokalt och distribuera appen.

Förstå projektets layout

Funktionsinitieringskommandot uppdaterar rayfin/rayfin.yml och skapar rayfin/functions. En typisk app med funktioner har följande struktur:

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

Filerna fyller följande syften:

Sökväg Purpose
rayfin/rayfin.yml Konfigurerar autentisering, data, funktioner och statiska hostingtjänster.
rayfin/data/ Innehåller appens datamodeller och schema-exporter.
rayfin/functions/package.json Definierar beroenden och bygger skript för funktionsprojektet.
rayfin/functions/tsconfig.json Konfigurerar TypeScript-bygget för funktioner.
rayfin/functions/src/function_app.ts Innehåller dina funktionsimplementationer.
rayfin/functions/src/types.ts Innehåller de genererade AppFunctionsSchema typerna. Redigera inte den här filen manuellt.
src/ Innehåller React-frontend och eventuella delade domäntyper eller wrappers.

När du aktiverar funktioner, rayfin/rayfin.yml ingår funktionstjänsten:

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

Programautentisering

Aktiverade funktioner kräver explicit applikationsautentisering i rayfin/rayfin.yml:

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

Nya Functions skapar en struktur auth.type: application.

Inaktiverade funktioner kan utelämna auth. Men om du tillhandahåller auth, måste det inkludera:

auth:
  type: application

Ett fullständigt npx rayfin up och det normala npx rayfin dev flödet validerar den här inställningen innan projektinställningar tillämpas på antingen Fabric- eller Docker-backend.

Kör en fullständig npx rayfin up för att tillämpa YAML-autentiseringsläget på ett befintligt fjärrprogram.

Autentiseringsvägar som används av distribuerade funktioner

Distribuerade funktioner använder två separata autentiseringsvägar:

Åtkomstsökväg Credential Identitet och behörigheter
Externa förbindelser genom ctx.Tokens.* Plattformstillhandahållen resurstoken Applikationsidentitet och dess behörigheter på den externa resursen
Rayfin DB genom ctx.getDataClient() Invocations Rayfin-token Anroparens identitet och behörigheter i Rayfin-databasen

För nuvarande Fabric-appar är applikationsidentiteten ägaren till BaaS-objektet.

Externa anslutningar använder därför objektägarens behörigheter, inte behörigheterna från appanvändaren som anropar funktionen. Ge appens identitet de behörigheter som krävs av varje extern resurs och API som anropas av Functions-koden.

Att deklarera en publik eller distribuera Functions ger inte appens identitetsrättigheter till en extern resurs.

Appinloggning och auktorisation för att anropa en funktion är separata från appens identitets åtkomst till externa resurser.

Rayfin databasåtkomst använder alltid Rayfin-token och bevarar anroparens identitet och databasbehörigheter. Inställningen services.functions.auth.type: application byter inte Rayfin DB-åtkomst till applikationsidentiteten.

För publikdeklarationer, resurstokens, behörigheter och lokalt utvecklingsbeteende, se Koppla funktioner till externa resurser.

Köra appen lokalt

Från appens rotmapp, logga in:

cd my-app
npx rayfin login

Starta gränssnittet och den lokala Functions-värden:

npm run dev

I ett projekt med aktiverade funktioner avbildas npm run dev till rayfin dev. Detta kommando tillämpar schemat, startar den lokala Functions-värden och startar Vites utvecklingsserver. Öppna den lokala URL:en som är utskriven i terminalen och låt terminalen vara igång medan du utvecklar och felsöker appen.

Om du bara vill starta Functions-värden, till exempel när du kör frontend-delen separat, använder du följande kommando i stället:

cd my-app
npx rayfin dev 

Distribuera till Fabric

Distribuera appens data, den statiska webbplatsen och funktionerna:


npx rayfin up --workspace <workspace-name>

Byt ut <WORKSPACE> med namnet på det målinriktade Fabric-arbetsområdet.

Lägg till funktioner i en befintlig app

Från roten av en befintlig Fabric-app, aktivera funktionen och initiera funktionsprojektet en gång:


npx rayfin functions init

Efter initialiseringen, lägg till funktionsimplementationer i rayfin/functions/src/function_app.ts.

Limitations

  • Funktionsägande: Endast ägaren av användardatafunktionen kan ändra och publicera Functions-koden.
  • Publiceringsnedkylning: Vänta minst två minuter efter publicering innan du publicerar igen. Denna karenstid gäller vid publicering från Functions-portalen i webbläsaren, Visual Studio Code-tillägget för användardatafunktioner, Git-importåtgärden eller distributionspipelines.
  • Distributionspaketstorlek: Functions ZIP-filen får inte överstiga 30 MB.
  • Storlek på begärandenyttolast: Tjänsten User Data Functions dokumenterar en maximal storlek på 4 MB för alla parametrar i begäran tillsammans. Denna gräns förväntas gälla för Rayfin-funktioner, men har inte verifierats.
  • Exekveringstimeout: En funktion kan köras i upp till 240 sekunder.
  • Behållning av anropsloggar: Historiska anropsloggar behålls som standard i 30 dagar.
  • Applikationsidentitet: Applikationsidentiteten är för närvarande ägare till BaaS-objektet.

För regionala tillgänglighetskrav och mer information om användardatafunktioners begränsningar, se Service details and limitations of Fabric user data functions.