Yhdistä funktiot ulkoisiin resursseihin

Deployed Functions kutsuu ulkoisia Azure- ja Fabric-resursseja sovelluksen identiteetiksi sovelluksen tunnistautumisen avulla. Määritä yleisöt funktion tarvitsema ja käytä alustan tarjoamia, resurssipohjaisia tokeneita kautta ctx.Tokens.

Kehittäjän CLI-kirjautuminen ja authoring-time endpoint -tunnistus ovat erillisiä käyttöönotosta ajonaikaisesta käytöstä. Varmista käyttöön otetun sovelluksen identiteetin oikeudet, vaikka kehittäjä voisi käyttää resurssia.

Edellytykset

  • Fabric-sovellus, jossa Functions on alustettu. Asennusohjeet löydät kohdasta Use Functions in Fabric Apps.
  • services.functions.auth.typeasetettuna .applicationrayfin/rayfin.yml Konfiguraation yksityiskohdat löytyvät sovelluksen tunnistautumisesta.
  • Sovelluksen identiteetti antoi pääsyn jokaiseen ulkoiseen resurssiin, jota funktiokoodi kutsuu.

Ilmoita ulkoinen yhteys

Ilmoita yleisöt merkinnöissä RayfinContext ja lue sitten scoped-token :ctx.Tokens

import {
  UserDataFunctions,
  AudienceType,
  type RayfinContext,
} from '@microsoft/fabric-user-data-functions';

const udf = new UserDataFunctions();

udf.func(
  'accessStorage',
  async (
    ctx: RayfinContext<AppSchema, AudienceType.Storage>,
  ): Promise<string> => {
    const token: string = ctx.Tokens.Storage;
    // Use the token with the resource SDK or REST API.
    return 'ok';
  },
  [],
);

Merkintä on julistus. Yleisön listaaminen RayfinContext<Schema, Audiences> rekisteröi yhteyden sidonnan. Pidä kolmas argumentti udf.func() as [].

ctx.Tokens on rajattu niihin yleisöihin, jotka ilmoitat. Ilmoittamaton yleisö aiheuttaa käännösvirheen:

async (
  ctx: RayfinContext<AppSchema, AudienceType.Sql | AudienceType.Storage>,
) => {
  const sqlToken: string = ctx.Tokens.Sql;
  const storageToken: string = ctx.Tokens.Storage;
};

Token-arvoilla on tyyppi string . Yleisön julistaminen rekisteröi sen sitomisen, mutta ei takaa tokenien saatavuutta tai resurssien käyttöä. Jos isäntä ei toimita ilmoitettua tokenia, sen ctx.Tokens ominaisuuden lukeminen antaa virheen.

Määrittele skeema-argumentti

RayfinContext Ota ensin sovellusskeema. Käytä samaa skeemaa, johon syötät RayfinClient<AppSchema> , jotta dataasiakas pysyy tyypitettynä, kun lisäät yleisöjä:

async (ctx: RayfinContext<AppSchema, AudienceType.Sql>) => {
  const data = ctx.getDataClient();
  const token = ctx.Tokens.Sql;
};

Jos funktio tarvitsee yleisöjä mutta ei pääse Rayfin-tietokantaan, välitä oletusskeema eksplisiittisesti:

async (ctx: RayfinContext<Record<string, any>, AudienceType.Fabric>) => {
  const token = ctx.Tokens.Fabric;
};

Tuetut yleisöt

AudienceType on totuuden lähde tuetuille yleisöille:

Ulkoinen resurssi AudienceType
Fabric lakehouse, warehouse, SQL-tietokanta Fabric-muodossa, peilattu tietokanta tai Azure SQL Database Sql
Fabric OneLake files, Azure Blob Storage, Azure Table storage, or Azuren jonotallennustila Storage
Microsoft Fabric REST API Fabric
Azure AI Foundry AzureAI
Azure DevOps ADO

Power BI:n semanttista mallia ei ole saatavilla .ctx.Tokens Käytä liitintä fabric-semanticmodel sen sijaan. Liitinohjeita löytyy osoitteesta Connect to Fabric data.

Ymmärrä käyttöönoton metatiedot

Tyyppiargumentit pyyhitään pois ennen kuin funktio käynnistyy. Aikana npx rayfin up, TypeScript-kääntäjä ratkaisee ilmoitetut yleisöt ja kirjoittaa unionin käyttöönoton metatietoihin. Funktioiden työntekijä käyttää tätä metatietoa yhteyksien sitomiseen.

Tyyppialias toimii, kun Functions-projektissa on tsconfig.json:

type SqlAccess = AudienceType.Sql;

async (ctx: RayfinContext<AppSchema, SqlAccess>) => {
  const token = ctx.Tokens.Sql;
};

Suosi kirjaimellisia AudienceType.X arvoja. Jos Functions-projektissa ei tsconfig.jsonole , CLI ei voi käyttää kääntäjää ja lukee sen sijaan annotaatiosyntaksin. Tässä tilassa alias ratkeaa omaan nimeensä eikä edustamaansa yleisöön. Pidä komentokeskuksen varoitus tästä varasuunnitelmasta korjattavana virheenä.

Kontekstiparametrilla täytyy olla eksplisiittinen RayfinContext<...> merkintä. Tyypin generointi tunnistaa kontekstiparametrin tämän merkinnän avulla. Ilman sitä parametri käsitellään request-body -parametrina.

Myönnä resurssiluvat

Nykyisissä Fabric-sovelluksissa sovelluksen identiteetti on Fabric-sovelluksen kohteen omistaja. Ulkoiset yhteydet käyttävät tätä identiteettiä ja sen oikeuksia, eivät sovelluksen käyttäjän identiteettiä tai käyttöoikeuksia, joka kutsuu funktion.

Myönnä sovelluksen identiteetti kaikki resurssit ja rajapinnat, joita funktiokoodi kutsuu. Yleisön määrittäminen ja funktioiden käyttöönotto rekisteröivät token-sidonnan, mutta eivät myönnä oikeuksia kohderesurssille.

Pidä resurssitokenit palvelimella. Älä koskaan palauta niitä funktion tuloksina tai lähetä niitä frontendiin.

Sovelluksen kirjautuminen ja valtuutus toiminnon käynnistämiseen ovat erillisiä, jos sovellus-identiteetti käyttää ulkoisia resursseja.

Rayfin DB -identiteetti

Rayfin DB käyttää erillistä todennuspolkua. ctx.getDataClient() käyttää kutsun Rayfin-tokenia, joten tietokanta säilyttää kutsujan identiteetin ja tietokantaoikeudet. Sovelluksen todennus funktioille ei vaihda Rayfin DB:n pääsyä sovelluksen identiteettiin.

Käytä tokenia, jossa on Azure SDK

Monet Azure SDK:n asiakkaat odottavat TokenCredential raakan token-merkkijonon sijaan. Määritellään sovitin, joka palauttaa tokenin kontekstista:

import type { TokenCredential, AccessToken } from '@azure/identity';

class ContextTokenCredential implements TokenCredential {
  constructor(private readonly token: string) {}

  async getToken(): Promise<AccessToken> {
    return {
      token: this.token,
      expiresOnTimestamp: Date.now() + 3600_000,
    };
  }
}

Pass new ContextTokenCredential(ctx.Tokens.Storage) tai sopiva ilmoitettu token SDK-asiakkaalle, joka vaatii tunnuksen. Asenna resurssi-SDK-paketit , rayfin/functions/package.jsonälä projektin juureen.

Kehitä paikallisesti

npx rayfin devja npx rayfin dev functions apply käynnistää paikallinen Azure-funktiot Core Tools -isäntäpalvelu. Paikallisessa Functions-isännässä ulkoiset resurssitunnukset käyttävät tilin identiteettiä ja käyttöoikeuksia, joita sovelluskehittäjä käyttää kirjautumiseen.

Deployed-funktiot käyttävät sen sijaan sovelluksen identiteettiä. Onnistunut paikallinen puhelu ei siis todista, että käytössä oleva sovellus-identiteetti saa oikeuden käyttää resurssia. Testaa käyttöön otettu funktio sen jälkeen, kun sovellushenkilöllisyydelle on myönnetty tarvittavat oikeudet.