จัดการความลับของฟังก์ชัน

ใช้ความลับเพื่อกําหนดค่าที่ละเอียดอ่อน เช่น โทเค็นการเข้าถึงส่วนบุคคลและคีย์ API สําหรับฟังก์ชันของคุณ อย่าเขียนค่าลับในซอร์สโค้ดหรือเปิดเผยให้ส่วนหน้าใช้งาน อ่านไฟล์เหล่านั้นขณะรันไทม์โดยโทรหาctx.getSecret()

ข้อกําหนดเบื้องต้น

  • แอป Fabric ที่ฟังก์ชันถูกเริ่มต้นแล้ว สําหรับคําแนะนําการตั้งค่า ดูที่ การใช้ฟังก์ชันในแอป Fabric
  • แอปนี้เคยถูกติดตั้งอย่างน้อยหนึ่งครั้งกับ npx rayfin up. rayfin secret set และ rayfin secret list กําหนดเป้าหมายไปยังรายการที่ติดตั้งอยู่และล้มเหลวเมื่อไม่มีจุดปลายทางระยะไกล
  • ค่าความลับที่จําเป็นสําหรับฟังก์ชันของคุณ

ตั้งค่าความลับ

จากรูทของแอป เปิดใช้งานฟีเจอร์ฟังก์ชันและตั้งค่าความลับ:

npx rayfin secret set API_KEY

คําสั่งจะบอกค่าและปกปิดข้อมูลที่คุณป้อน หากต้องการอัปเดตความลับที่มีอยู่ ให้รันคําสั่งเดิมอีกครั้ง ค่าใหม่จะมาแทนที่ค่าที่มีอยู่

Important

อย่าใส่ค่าความลับในคําสั่งหรือคอมมิตมันไปยังซอร์สโค้ดคอนโทรล

รายการความลับ

แสดงชื่อลับที่กําหนดค่าไว้:

npx rayfin secret list

คําสั่งจะแสดงชื่อลับและเวลาประทับ แต่จะไม่แสดงค่าลับ

เข้าถึงความลับจากฟังก์ชัน

โทร ctx.getSecret('NAME') เพื่อดึงความลับสําหรับการเรียกใช้งานปัจจุบัน เมธอดจะคืนค่า undefined เมื่อความลับไม่ได้ถูกกําหนดค่า ดังนั้นควรจัดการความลับเสริมอย่างชัดเจนหรือกําหนดค่าเริ่มต้นที่ไม่ใช่ความลับที่เหมาะสม

ฟังก์ชันต่อไปนี้ดึงไฟล์จากคลัง GitHub ที่เก็บข้อมูลสาธารณะไม่จําเป็นต้องใช้โทเค็นการเข้าถึงส่วนบุคคล (PAT) สําหรับที่เก็บข้อมูลส่วนตัว ฟังก์ชันจะ GITHUB_PAT เพิ่มความลับให้กับคําขอ:

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

อาร์เรย์การเชื่อมต่อว่างเปล่าบ่งชี้ว่าฟังก์ชันไม่ได้ประกาศกลุ่มเป้าหมายทรัพยากรภายนอก PAT เป็นความลับ ไม่ใช่โทเค็นทรัพยากรที่แพลตฟอร์มให้มา

กําหนดค่าความลับตามสภาพแวดล้อม

ระบุค่าลับในสภาพแวดล้อมที่ฟังก์ชันทํางาน:

  • การพัฒนาท้องถิ่น: เพิ่มค่าลับในส่วน Values ของ rayfin/functions/local.settings.json. โฮสต์ฟังก์ชันท้องถิ่นจะอ่านค่าสภาพแวดล้อมฟังก์ชันจากไฟล์นี้
  • Fabric: กําหนดค่าความลับสําหรับไอเท็มที่ปล่อยในพอร์ทัล Fabric

ใช้ชื่อรหัสลับเดียวกันในแต่ละสภาพแวดล้อม ตัวอย่างเช่น กําหนดค่าGITHUB_PATทั้งในเครื่องและใน Fabric แล้วอ่านข้อมูลในctx.getSecret('API_KEY')ทั้งสองสภาพแวดล้อม

Important

อย่า commit ค่าความลับใน rayfin/functions/local.settings.json ไฟล์อื่นใดไปยัง source control เก็บเฉพาะตัวอย่างที่ไม่ใช่ความลับหรือตัวอย่างชั่วคราวในไฟล์ที่คุณคอมมิต