Fonksiyonları dış kaynaklara bağla

Deployed Functions, uygulama kimlik doğrulaması kullanarak harici Azure ve Fabric kaynaklarını çağrır. Bir işlevin ihtiyaç duyduğu hedef kitleleri belirtin ve platform tarafından sağlanan kaynak kapsamlı belirteçleri ctx.Tokens aracılığıyla kullanın.

Geliştirici CLI'sında oturum açma ve geliştirme sırasında uç nokta keşfi, dağıtılmış çalışma zamanına erişimden ayrıdır. Bir geliştirici kaynağa erişebilse bile dağıtılan uygulama kimliğinin izinlerini doğrulayın.

Prerequisites

  • Fonksiyonları başlatılmış bir Fabric uygulaması. Kurulum talimatları için bkz. Use Functions in Fabric Apps.
  • services.functions.auth.type, rayfin/rayfin.yml içinde application olarak ayarlandı. Yapılandırma detayları için bkz. Uygulama doğrulaması.
  • Uygulama kimliği, Fonksiyon kodunun çağırdığı her harici kaynağa erişim izni verirdi.

Dış bağlantı ilan edin

Açıklamada izleyicileri RayfinContext belirtin ve ardından kapsamlı tokenı şu adresten ctx.Tokensokuyun:

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

Açıklama, beyandır. RayfinContext<Schema, Audiences> içinde bir hedef kitlenin listelenmesi, bağlantı bağlamasını kaydeder. udf.func() öğesinin üçüncü argümanını [] olarak tutun.

ctx.Tokens sizin belirttiğiniz izleyici kitlesine daralmıştır. Bildirilmemiş bir hedef kitlesi derleme hatasına yol açar:

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

Token değerlerinin tipi string vardır. Bir kitleyi bildirmek onun bağlanmasını kaydeder, ancak token kullanılabilirliğini veya kaynak erişimini garanti etmez. Ana bilgisayar bildirilmiş bir belirteç sağlamazsa, onun ctx.Tokens özelliğini okumak hataya neden olur.

Şema argümanını belirtin

RayfinContext önce uygulama şemanızı alır. Hedef kitleler eklediğinizde veri istemcisinin tür bilgisini koruması için RayfinClient<AppSchema> öğesine geçirdiğiniz aynı şemayı kullanın:

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

Bir fonksiyon hedef kitlesine ihtiyaç duyuyorsa ancak Rayfin veritabanına erişmiyorsa, varsayılan şemayı açıkça iletin:

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

Destekli izleyiciler

AudienceType desteklenen izleyiciler için gerçeğin kaynağıdır:

Dış kaynak AudienceType
Fabric göl evi, depo, Fabric'te SQL veritabanı, aynalı veritabanı veya Azure SQL Veritabanı Sql
Fabric OneLake dosyaları, Azure Blob Depolama, Azure Table Storage veya Azure Kuyruk Depolama Storage
Microsoft Fabric REST API Fabric
Azure Yapay Zeka Atölyesi AzureAI
Azure DevOps ADO

Bir Power BI anlamsal modeli ctx.Tokens aracılığıyla kullanılamaz. Bunun yerine konnektör fabric-semanticmodel kullanın. Konnektör rehberliği için Connect to Fabric data'ya bakınız.

Dağıtım meta verilerini anlamak

Tip argümanları, bir fonksiyon çalışmadan önce silinir. npx rayfin up sırasında, TypeScript derleyicisi tanımlanan hedef kitleleri çözümler ve birleşimi dağıtım meta verisine yazar. Fonksiyon çalışanı, bağlantıları bağlamak için bu metaveriyi kullanır.

Bir tür takma adı, Functions projesinde tsconfig.json olduğunda çalışır:

type SqlAccess = AudienceType.Sql;

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

Birebir AudienceType.X değerleri tercih edin. Functions projesinde tsconfig.json yoksa, CLI derleyiciyi kullanamaz ve bunun yerine ek açıklama sözdizimini okur. Bu modda, bir takma ad, temsil ettiği hedef kitle yerine kendi adına çözümlenir. Bu fallback ile ilgili CLI uyarısını düzeltilmesi gereken bir hata olarak ele alın.

Bağlam parametresinin açık RayfinContext<...> bir açıklaması olmalıdır. Tip oluşturma, bağlam parametresini bu açıklamayla tanımlar. Bu olmadan, parametre istek-gövde parametresi olarak ele alınır.

Kaynak izinleri ver

Mevcut Fabric uygulamaları için, uygulama kimliği Fabric uygulama öğesinin sahibidir. Harici bağlantılar bu kimliği ve izinlerini kullanır, işlevi çağıran uygulama kullanıcısının kimliği veya izinlerini değil.

Uygulama kimliğine, Fonksiyon kodunun çağırdığı her kaynak ve API için gereken izinleri verin. Hedef kitle tanımlamak ve Functions’ı dağıtmak, bir belirteç bağlaması kaydeder, ancak hedef kaynak üzerinde yetki vermez.

Kaynak tokenlarını sunucuda tutun. Onları asla fonksiyon sonucu olarak geri göndermeyin veya ön tarafa göndermeyin.

Uygulama girişi ve bir fonksiyonu çağırmak için yetkilendirme, uygulama kimliğinin harici kaynaklara erişiminden ayrıdır.

Rayfin DB kimliği

Rayfin DB ayrı bir kimlik doğrulama yolu kullanır. ctx.getDataClient() çağrının Rayfin token'ını kullanır, böylece veritabanına erişim, arayanın kimliğini ve veritabanı izinlerini korur. Fonksiyonlar için uygulama doğrulaması, Rayfin veritabanı erişimini uygulama kimliğine geçirmez.

Azure SDK ile token kullanın

Birçok Azure SDK istemcisi, ham token dizisi yerine bir TokenCredential şey bekler. Bağlamdan tokenı döndüren bir adaptör tanımlayın:

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

Kimlik bilgisi gerektiren bir SDK istemcisine new ContextTokenCredential(ctx.Tokens.Storage) veya uygun şekilde bildirilmiş tokenı iletin. Kaynak SDK paketlerini proje köküne değil, rayfin/functions/package.json konumuna kurun.

Yerel olarak geliştirme

npx rayfin devve npx rayfin dev functions apply yerel bir Azure İşlevleri Core Tools barındırma platformu başlatın. Yerel Functions barındırma sisteminde, harici kaynak token'ları, uygulama oluşturucunun giriş yapmak için kullandığı hesabın kimliğini ve izinlerini kullanır.

Dağıtılan Fonksiyonlar bunun yerine uygulama kimliğini kullanır. Başarılı bir yerel çağrı, dağıtılan uygulama kimliğinin kaynağa erişim iznine sahip olduğunu kanıtlamaz. Uygulama kimliğine gerekli izinleri verdikten sonra dağıtılan fonksiyonu test edin.