使用秘密來提供敏感的設定,例如個人存取權杖和 API 金鑰,來管理你的函式。 絕不要在原始碼裡硬編碼秘密值,也不要讓它們暴露給前端。 執行時可透過呼叫 ctx.getSecret()來讀取。
先決條件
- 一個功能已初始化的 Fabric 應用程式。 關於設定說明,請參見「在 Fabric 應用程式中使用函式」。
- 該應用程式至少曾使用
npx rayfin up部署過一次。rayfin secret set與rayfin secret list以目前使用中的已部署項目為目標,且在不存在遠端端點時會失敗。 - 你的函式所需的秘密值。
設定秘密
從應用程式根開始,啟用功能功能並設定秘密:
npx rayfin secret set API_KEY
指令會提示這個值,並遮蔽你的輸入。 要更新現有的秘密,請再次執行相同的指令。 新值取代了現有值。
重要
不要在指令中加入秘密值,也不要提交給原始碼控制。
列出機密
列出已設定的秘密名稱:
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();
},
[],
);
空的 connections 陣列表示該函式並未宣告外部資源受眾。 PAT 是一個秘密,而非平台提供的資源代幣。
依環境設定機密
在函式執行的環境中提供秘密值:
-
本機開發:在
Values的rayfin/functions/local.settings.json區段中加入密鑰值。 本地函式主機會從此檔案讀取函式環境值。 - Fabric:在 Fabric 入口網站中為已部署的項目設定機密。
在每個環境裡都使用相同的秘密名稱。 例如,在本地和 Fabric 中設定 GITHUB_PAT,然後在兩個環境中使用 ctx.getSecret('API_KEY') 讀取。
重要
不要將機密值提交到原始碼控制中的 rayfin/functions/local.settings.json 或任何其他檔案。 只在你提交的檔案中儲存非秘密範例或佔位符。