Σύνδεση συναρτήσεων με εξωτερικούς πόρους

Οι αναπτυγμένες συναρτήσεις καλούν εξωτερικούς πόρους Azure και Fabric ως ταυτότητα εφαρμογής χρησιμοποιώντας έλεγχο ταυτότητας εφαρμογής. Δηλώστε ότι το κοινό χρειάζεται μια συνάρτηση και χρησιμοποιήστε διακριτικά που παρέχονται από την πλατφόρμα, σε εύρος πόρων μέσω ctx.Tokens.

Η είσοδος CLI προγραμματιστή και ο εντοπισμός τελικού σημείου χρόνου σύνταξης είναι ξεχωριστά από την πρόσβαση χρόνου εκτέλεσης που έχει αναπτυχθεί. Επαληθεύστε τα δικαιώματα της αναπτυγμένης ταυτότητας εφαρμογής ακόμα και όταν ένας προγραμματιστής μπορεί να αποκτήσει πρόσβαση στον πόρο.

Προαπαιτούμενα στοιχεία

Δήλωση εξωτερικής σύνδεσης

Δηλώστε ακροατήρια στον σχολιασμό και, στη συνέχεια, διαβάστε το διακριτικό εμβέλειας από ctx.Tokensτο RayfinContext :

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';
  },
  [],
);

Ο σχολιασμός είναι η δήλωση. Η καταχώριση ενός κοινού καταχωρεί RayfinContext<Schema, Audiences> τη σύνδεση δέσμευσης. Κρατήστε το τρίτο όρισμα του udf.func() ως [].

ctx.Tokens περιορίζεται στο κοινό που δηλώνετε. Ένα μη δηλωμένο κοινό προκαλεί ένα σφάλμα μεταγλώττισης:

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

Οι τιμές διακριτικών έχουν τον string τύπο. Η δήλωση κοινού καταχωρεί τη δέσμευσή του, αλλά δεν εγγυάται τη διαθεσιμότητα διακριτικών ή την πρόσβαση σε πόρους. Εάν ο κεντρικός υπολογιστής δεν παρέχει ένα δηλωμένο διακριτικό, η ανάγνωση της ιδιότητάς του ctx.Tokens δημιουργεί σφάλμα.

Καθορισμός του ορίσματος σχήματος

RayfinContext παίρνει πρώτα το σχήμα της εφαρμογής σας. Χρησιμοποιήστε το ίδιο σχήμα στο RayfinClient<AppSchema> οποίο μεταβιβάζετε, ώστε το πρόγραμμα-πελάτης δεδομένων να παραμένει πληκτρολογημένο όταν προσθέτετε είδη κοινού:

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

Εάν μια συνάρτηση χρειάζεται ακροατήρια αλλά δεν έχει πρόσβαση στο Rayfin DB, μεταβιβάστε ρητά το προεπιλεγμένο σχήμα:

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

Υποστηριζόμενα είδη κοινού

AudienceType είναι η πηγή της αλήθειας για το υποστηριζόμενο κοινό:

Εξωτερικός πόρος AudienceType
Fabric lakehouse, αποθήκη, βάση δεδομένων SQL στο Fabric, βάση δεδομένων κατοπτρισμού ή βάση δεδομένων Azure SQL Database Sql
Fabric OneLake, Azure Blob Storage, Azure Table Storage ή Χώρος αποθήκευσης ουράς του Azure Storage
Microsoft Fabric REST API Fabric
Azure AI Foundry AzureAI
Azure DevOps ADO

Ένα σημασιολογικό μοντέλο Power BI δεν είναι διαθέσιμο μέσω ctx.Tokensτου . Χρησιμοποιήστε τον fabric-semanticmodel σύνδεσμο. Για οδηγίες σύνδεσης, ανατρέξτε στο θέμα Σύνδεση σε δεδομένα Fabric.

Κατανόηση των μετα-δεδομένων ανάπτυξης

Τα ορίσματα κειμένου διαγράφονται πριν από την εκτέλεση μιας συνάρτησης. Κατά τη διάρκεια npx rayfin upτου , ο μεταγλωττιστής TypeScript επιλύει τα δηλωμένα ακροατήρια και εγγράφει την ένωση σε μετα-δεδομένα ανάπτυξης. Ο εργαζόμενος συναρτήσεων χρησιμοποιεί αυτά τα μετα-δεδομένα για να συνδέσει τις συνδέσεις.

Ένα ψευδώνυμο τύπου λειτουργεί όταν το έργο Functions έχει ένα tsconfig.json:

type SqlAccess = AudienceType.Sql;

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

Προτιμήστε τις κυριολεκτικές AudienceType.X τιμές. Εάν το έργο Functions δεν tsconfig.jsonέχει , το CLI δεν μπορεί να χρησιμοποιήσει τον μεταγλωττιστή και αντ' αυτού διαβάζει τη σύνταξη σχολιασμού. Σε αυτήν τη λειτουργία, ένα ψευδώνυμο επιλύεται με το δικό του όνομα και όχι με το κοινό που αντιπροσωπεύει. Αντιμετωπίστε την προειδοποίηση CLI σχετικά με αυτήν την εναλλακτική λύση ως σφάλμα που πρέπει να διορθωθεί.

Η παράμετρος περιβάλλοντος πρέπει να έχει ρητό RayfinContext<...> σχόλιο. Η δημιουργία τύπου προσδιορίζει την παράμετρο περιβάλλοντος με αυτόν τον σχολιασμό. Χωρίς αυτήν, η παράμετρος αντιμετωπίζεται ως παράμετρος request-body.

Εκχώρηση δικαιωμάτων πόρων

Για τις τρέχουσες εφαρμογές Fabric, η ταυτότητα της εφαρμογής είναι ο κάτοχος του στοιχείου εφαρμογής Fabric. Οι εξωτερικές συνδέσεις χρησιμοποιούν αυτήν την ταυτότητα και τα δικαιώματά της, όχι την ταυτότητα ή τα δικαιώματα του χρήστη της εφαρμογής που καλεί τη συνάρτηση.

Εκχωρήστε στην ταυτότητα της εφαρμογής τα δικαιώματα που απαιτούνται από κάθε πόρο και API που καλεί ο κώδικας συναρτήσεων. Η δήλωση κοινού και η ανάπτυξη συναρτήσεων καταχωρούν μια σύνδεση διακριτικού, αλλά δεν εκχωρούν δικαιώματα στον πόρο προορισμού.

Διατηρήστε διακριτικά πόρων στο διακομιστή. Ποτέ μην τα επιστρέφετε ως αποτελέσματα λειτουργίας και μην τα στέλνετε στο frontend.

Η είσοδος στην εφαρμογή και η εξουσιοδότηση για την κλήση μιας συνάρτησης είναι ξεχωριστές από την πρόσβαση της ταυτότητας της εφαρμογής σε εξωτερικούς πόρους.

Ταυτότητα Rayfin DB

Το Rayfin DB χρησιμοποιεί μια ξεχωριστή διαδρομή ελέγχου ταυτότητας. ctx.getDataClient() χρησιμοποιεί το διακριτικό Rayfin της επίκλησης, επομένως η πρόσβαση στη βάση δεδομένων διατηρεί την ταυτότητα και τα δικαιώματα βάσης δεδομένων του καλούντος. Ο έλεγχος ταυτότητας εφαρμογής για τις Λειτουργίες δεν αλλάζει την πρόσβαση Rayfin DB στην ταυτότητα της εφαρμογής.

Χρήση διακριτικού με Azure SDK

Πολλά προγράμματα-πελάτες Azure SDK αναμένουν μια TokenCredential συμβολοσειρά διακριτικού αντί για μη επεξεργασμένη. Ορίστε έναν προσαρμογέα που επιστρέφει το διακριτικό από το περιβάλλον:

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,
    };
  }
}

Μεταβιβάστε new ContextTokenCredential(ctx.Tokens.Storage) ή το κατάλληλο δηλωμένο διακριτικό σε ένα πρόγραμμα-πελάτη SDK που απαιτεί διαπιστευτήριο. Εγκαταστήστε πακέτα SDK πόρων στο , όχι στη rayfin/functions/package.jsonρίζα του έργου.

Ανάπτυξη σε τοπικό επίπεδο

npx rayfin devκαι npx rayfin dev functions apply ξεκινήστε έναν τοπικό κεντρικό υπολογιστή Azure Functions Core Tools. Στον τοπικό κεντρικό υπολογιστή Functions, τα διακριτικά εξωτερικού πόρου χρησιμοποιούν την ταυτότητα και τα δικαιώματα του λογαριασμού που χρησιμοποιεί το εργαλείο δημιουργίας εφαρμογών για να εισέλθει.

Οι αναπτυγμένες λειτουργίες χρησιμοποιούν την ταυτότητα της εφαρμογής. Επομένως, μια επιτυχημένη τοπική κλήση δεν αποδεικνύει ότι η ταυτότητα της αναπτυγμένης εφαρμογής έχει άδεια πρόσβασης στον πόρο. Δοκιμάστε την αναπτυγμένη λειτουργία αφού εκχωρήσετε στην ταυτότητα της εφαρμογής τα απαιτούμενα δικαιώματα.