在 Azure 中從套件檔案執行函式
在 Azure 中,您可以直接從函式應用程式中的部署套件檔案執行函式。 另一個選項是將您的檔案部署在函式應用程式的 c:\home\site\wwwroot
(Windows) 或 /home/site/wwwroot
(Linux) 目錄中。
本文說明從套件執行函式的優點。 文中也會說明如何在函式應用程式中啟用這項功能。
從套件檔案執行的優點
從套件檔案執行函式有幾項優點:
- 減少檔案複製鎖定問題的風險。
- 可以部署到生產應用程式 (透過重新啟動)。
- 驗證應用程式中執行的檔案。
- 提升 Azure Resource Manager 部署的效能。
- 縮短冷啟動時間,特別是針對具有大型 npm 套件樹狀結構的 JavaScript 函式。
如需詳細資訊,請參閱此公告。
讓函式能夠從套件執行
若要讓函數應用程式能夠從套件執行,請將 WEBSITE_RUN_FROM_PACKAGE
應用程式設定新增至函數應用程式。 WEBSITE_RUN_FROM_PACKAGE
應用程式設定可具有下列其中一個值:
值 | Description |
---|---|
1 |
指出函式應用程式會從部署在函式應用程式的 c:\home\data\SitePackages (Windows) 或 /home/data/SitePackages (Linux) 資料夾中部署的本機套件檔案執行。 |
<URL> |
設定 URL,這是您要執行的特定套件檔案的遠端位置。 在使用量方案中,於 Linux 上執行的函式應用程式為必要。 |
下表指出部署至特定作業系統和主控方案建議的 WEBSITE_RUN_FROM_PACKAGE
值:
主控方案 | Windows | Linux |
---|---|---|
耗用 | 強烈建議使用 1 。 |
只支援 <URL> 。 |
高級 | 建議使用1 。 |
建議使用1 。 |
專用 | 建議使用1 。 |
建議使用1 。 |
一般考量
- 套件檔案必須為 .zip 格式。 不支援 TAR 和 GZIP 格式。
- 建議使用 Zip 部署。
- 將函式應用程式部署至 Windows 時,您應該將
WEBSITE_RUN_FROM_PACKAGE
設定為1
,並使用 zip 部署發佈。 - 從套件執行時,
wwwroot
資料夾會是唯讀狀態,而您會在將檔案寫入此目錄時收到錯誤。 檔案在 Azure 入口網站中也是唯讀的。 - 部署套件檔案的大小上限為 1 GB。
- 從部署套件執行時,您無法使用本機快取。
- 如果您的專案需要使用遠端建置,請勿使用
WEBSITE_RUN_FROM_PACKAGE
應用程式設定。 請改為新增SCM_DO_BUILD_DURING_DEPLOYMENT=true
部署自訂應用程式設定。 針對 Linux,也新增ENABLE_ORYX_BUILD=true
設定。 如需詳細資訊,請參閱遠端組建。
注意
WEBSITE_RUN_FROM_PACKAGE
應用程式設定不適用於 MSDeploy,如 MSDeploy 與ZipDeploy (英文) 中所述。 您會在部署期間收到錯誤,例如 ARM-MSDeploy Deploy Failed
。 若要解決此錯誤,請將 /MSDeploy
變更為 /ZipDeploy
。
新增 WEBSITE_RUN_FROM_PACKAGE 設定
有數種方式可供您新增、更新和刪除函式應用程式設定:
對函式應用程式設定的變更需要將函式應用程式重新啟動。
建立 zip 封存檔
您部署的 Zip 封存檔必須包含執行函數應用程式所需的所有檔案。 您可以使用內建的 .zip 壓縮功能或第三方工具,從 Functions 專案資料夾的內容手動建立 Zip 封存檔。
封存檔在解壓縮的資料夾根目錄中必須包含 host.json 檔案。 針對函數應用程式選取的語言堆疊會產生其他需求:
重要
針對為部署產生編譯輸出的語言,請確保壓縮您計劃發行的輸出資料夾內容,而不是整個專案資料夾。 當 Azure Functions 擷取 zip 封存的內容時,host.json
檔案必須存在於套件的根目錄中。
使用 WEBSITE_RUN_FROM_PACKAGE = 1
本節提供如何從本機套件檔案執行函式應用程式的相關資訊。
從現場套件部署的考量
- 使用現場套件是從部署套件執行建議的選項,但在託管於使用量方案的 Linux 上執行時除外。
- Zip 部署是將部署套件上傳至您的網站的建議方式。
- 不使用 zip 部署時,請確定
c:\home\data\SitePackages
(Windows) 或/home/data/SitePackages
(Linux) 資料夾有名為packagename.txt
的檔案。 此檔案只包含此資料夾中目前執行套件檔案的名稱,不含任何空白字元。
與 zip 部署的整合
Zip 部署是 Azure App Service 的一項功能,可讓您將函數應用程式專案部署至 wwwroot
目錄。 專案會封裝為 .zip 部署檔案。 您可以使用相同的 API 將套件部署至 c:\home\data\SitePackages
(Windows) 或 /home/data/SitePackages
(Linux) 資料夾。
當您將 WEBSITE_RUN_FROM_PACKAGE
應用程式設定值設為 1
時,zip 部署 API 就會將套件複製到 c:\home\data\SitePackages
(Windows) 或 /home/data/SitePackages
(Linux) 資料夾,而不會將檔案解壓縮到 c:\home\site\wwwroot
(Windows) 或 /home/site/wwwroot
(Linux)。 它也會建立 packagename.txt
檔案。 在函數應用程式自動重新啟動之後,套件會掛接至 wwwroot
,作為唯讀 filesystem。 如需 zip 部署的詳細資訊,請參閱 Azure Functions 的 zip 部署。
注意
部署發生時,會觸發函式應用程式的重新啟動。 部署期間目前執行中的函式執行將會終止。 如需如何寫入無狀態和防禦函式的相關資訊,請將寫入函式設定為無狀態。
使用 WEBSITE_RUN_FROM_PACKAGE = URL
本節提供如何從部署至 URL 端點的套件執行函式應用程式的相關資訊。 此選項是從搭配使用量方案並託管於 Linux 的套件中執行時,唯一支援的選項。
從 URL 部署的考量
- 當應用程式套件透過
WEBSITE_RUN_FROM_PACKAGE = <URL>
部署至 URL 端點時,在 Windows 上執行的函式應用程式會遇到冷啟動時間略有增加。 - 指定 URL 時,也必須在發佈更新的套件之後 手動同步觸發程序。
- Functions 執行階段必須具有存取套件 URL 的權限。
- 請勿將套件部署至 Azure Blob 儲存體作為公用 Blob。 請改用私人容器搭配共用存取簽章 (SAS) 或使用受控識別,以讓 Azure Functions 執行階段存取該套件。
- 您必須維護用於部署的任何 SAS URL。 SAS 到期時,就無法再部署該套件。 在此情況下,您必須產生新的 SAS,並在您的函式應用程式中更新設定。 您可以使用受控識別來排除此管理負擔。
- 在進階方案上執行時,請務必排除冷啟動。
- 當您在專用方案中執行時,請確定您已啟用 Always On。
- 您可以使用 Azure 儲存體總管 (部分機器翻譯) 將套件檔案上傳至您的 Blob 儲存體帳戶中的 Blob 容器。
手動將套件上傳至 Blob 儲存體
若要在使用 URL 選項時部署壓縮的套件,您必須建立 .zip 壓縮部署套件,並將它上傳至目的地。 下列程序會部署到 Blob 儲存體中的容器:
使用您選擇的公用程式,為您的專案建立 .zip 套件。
在 Azure 入口網站中,搜尋您的儲存體帳戶名稱,或在儲存體帳戶清單中瀏覽。
在儲存體帳戶中,選取 [資料儲存體] 底下的 [容器]。
選取 [+ 容器] 以在您的帳戶中建立新的 Blob 儲存體容器。
在 [新增容器] 頁面中,提供名稱 (例如 deployments),確定 [匿名存取層級] 為 [私人],然後選取 [建立]。
選取您建立的容器,選取 [上傳],瀏覽至您使用專案建立的 .zip 檔案的位置,然後選取 [上傳]。
上傳完成後,選擇您上傳的 Blob 檔案,然後複製該 URL。 如果您未使用受控識別,您可能需要產生 SAS URL。
搜尋您的函式應用程式,或在 [函式應用程式] 頁面中瀏覽它。
在您的函數應用程式中,展開 [設定],然後選取 [環境變數]。
在 [應用程式設定] 索引標籤中,選取 [+ 新增]。
輸入
WEBSITE_RUN_FROM_PACKAGE
作為 [名稱] 的值,然後將套件的 URL 貼到 Blob 儲存體中作為 [值]。選取 [套用],然後選取 [套用] 和 [確認],以儲存設定並重新啟動函數應用程式。
現在,您可以在 Azure 中執行函式,以驗證使用部署套件 .zip 檔案的部署已成功。
使用受控識別從 Azure Blob 儲存體擷取套件
您可以將 Azure Blob 儲存體設定為使用 Microsoft Entra ID 授權要求 (部分機器翻譯)。 此設定表示您可以改為依賴應用程式的受控識別,而不是產生具有到期日的 SAS 金鑰。 預設會使用應用程式的系統指派身分識別。 如果您希望指定使用者指派的身分識別,可以將 WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID
應用程式設定設為該身分識別的資源識別碼。 此設定也可以接受 SystemAssigned
作為值,相當於略過該設定。
啟用使用身分識別來擷取套件:
確定已將 Blob 設定為可進行私人存取。
為此身分識別授與具有套件 Blob 範圍的儲存體 Blob 資料讀者角色。 如需建立角色指派的詳細資訊,請參閱指派 Azure 角色以存取 Blob 資料。
將
WEBSITE_RUN_FROM_PACKAGE
應用程式設定設為套件的 Blob URL。 此 URL 的形式通常是或類似於https://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package}
。