Kelola rahasia fungsi

Gunakan rahasia untuk menyediakan konfigurasi sensitif, seperti token akses pribadi dan kunci API, ke fungsi Anda. Jangan pernah membuat nilai rahasia secara keras di kode sumber atau mengeksposernya ke frontend. Baca itu saat runtime dengan memanggil ctx.getSecret().

Prasyarat

  • Aplikasi Fabric dengan fungsi yang sudah diinisialisasi. Untuk petunjuk pengaturan, lihat Gunakan Fungsi di Fabric Apps.
  • Aplikasi ini di-deploy setidaknya sekali dengan npx rayfin up. rayfin secret set dan rayfin secret list menargetkan item aktif yang disebarkan dan gagal ketika tidak ada endpoint jarak jauh yang ada.
  • Nilai rahasia yang dibutuhkan oleh fungsimu.

Menetapkan rahasia

Dari root aplikasi, aktifkan fitur fungsi dan atur rahasia:

npx rayfin secret set API_KEY

Perintah akan meminta nilai dan menutupi input Anda. Untuk memperbarui rahasia yang sudah ada, jalankan perintah yang sama lagi. Nilai baru menggantikan nilai yang ada.

Important

Jangan sertakan nilai rahasia dalam perintah atau komitmennya ke kontrol sumber.

Cantumkan rahasia

Daftarkan nama rahasia yang dikonfigurasi:

npx rayfin secret list

Perintah ini menampilkan nama rahasia dan cap waktu, tetapi tidak pernah menampilkan nilai rahasia.

Akses rahasia dari sebuah fungsi

Panggil ctx.getSecret('NAME') untuk mengambil rahasia untuk invokasi saat ini. Metode ini mengembalikan undefined saat secret tidak dikonfigurasi, jadi tangani secret opsional secara eksplisit atau berikan nilai default yang sesuai dan bukan secret.

Fungsi berikut mengambil file dari repositori GitHub. Repositori publik tidak memerlukan personal access token (PAT). Untuk repositori privat, fungsi ini menambahkan GITHUB_PAT rahasia ke permintaan:

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

const udf = new UserDataFunctions();

udf.func(
  'getGitHubFile',
  async (
    owner: string,
    repo: string,
    path: string,
    ref: string,
    ctx: RayfinContext,
  ): Promise<string> => {
    const pat = ctx.getSecret('GITHUB_PAT');
    const headers: Record<string, string> = {
      Accept: 'application/vnd.github.raw+json',
      'User-Agent': 'rayfin-app',
    };

    if (pat) {
      headers.Authorization = `Bearer ${pat}`;
    }

    const encodedPath = path
      .split('/')
      .map(encodeURIComponent)
      .join('/');
    const url =
      `https://api.github.com/repos/${encodeURIComponent(owner)}/` +
      `${encodeURIComponent(repo)}/contents/${encodedPath}` +
      `?ref=${encodeURIComponent(ref || 'main')}`;

    const response = await fetch(url, { headers });
    if (!response.ok) {
      throw new Error(`GitHub ${response.status}: ${await response.text()}`);
    }

    return response.text();
  },
  [],
);

Array koneksi yang kosong menunjukkan bahwa fungsi tersebut tidak mendeklarasikan audiens resource eksternal. PAT adalah rahasia, bukan token sumber daya yang disediakan platform.

Konfigurasikan rahasia berdasarkan lingkungan

Berikan nilai rahasia di lingkungan tempat fungsi berjalan:

  • Pengembangan lokal: Tambahkan nilai rahasia ke Values bagian dari rayfin/functions/local.settings.json. Host Functions lokal membaca nilai lingkungan fungsi dari file ini.
  • Fabric: Konfigurasikan rahasia untuk item yang disebarkan di portal Fabric.

Gunakan nama rahasia yang sama di setiap lingkungan. Misalnya, konfigurasikan GITHUB_PAT secara lokal dan di Fabric, lalu bacalah dengan ctx.getSecret('API_KEY') di kedua lingkungan.

Important

Jangan melakukan commit nilai rahasia di rayfin/functions/local.settings.json atau file lainnya ke kontrol sumber. Simpan hanya contoh yang tidak rahasia atau teks pengganti dalam file yang Anda komit.