共用方式為


在 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 儲存體中的容器:

  1. 使用您選擇的公用程式,為您的專案建立 .zip 套件。

  2. Azure 入口網站中,搜尋您的儲存體帳戶名稱,或在儲存體帳戶清單中瀏覽。

  3. 在儲存體帳戶中,選取 [資料儲存體] 底下的 [容器]

  4. 選取 [+ 容器] 以在您的帳戶中建立新的 Blob 儲存體容器。

  5. 在 [新增容器] 頁面中,提供名稱 (例如 deployments),確定 [匿名存取層級] 為 [私人],然後選取 [建立]

  6. 選取您建立的容器,選取 [上傳],瀏覽至您使用專案建立的 .zip 檔案的位置,然後選取 [上傳]

  7. 上傳完成後,選擇您上傳的 Blob 檔案,然後複製該 URL。 如果您未使用受控識別,您可能需要產生 SAS URL。

  8. 搜尋您的函式應用程式,或在 [函式應用程式] 頁面中瀏覽它。

  9. 在您的函數應用程式中,展開 [設定],然後選取 [環境變數]

  10. 在 [應用程式設定] 索引標籤中,選取 [+ 新增]

  11. 輸入 WEBSITE_RUN_FROM_PACKAGE 作為 [名稱] 的值,然後將套件的 URL 貼到 Blob 儲存體中作為 [值]

  12. 選取 [套用],然後選取 [套用] 和 [確認],以儲存設定並重新啟動函數應用程式。

現在,您可以在 Azure 中執行函式,以驗證使用部署套件 .zip 檔案的部署已成功。

使用受控識別從 Azure Blob 儲存體擷取套件

您可以將 Azure Blob 儲存體設定為使用 Microsoft Entra ID 授權要求 (部分機器翻譯)。 此設定表示您可以改為依賴應用程式的受控識別,而不是產生具有到期日的 SAS 金鑰。 預設會使用應用程式的系統指派身分識別。 如果您希望指定使用者指派的身分識別,可以將 WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID 應用程式設定設為該身分識別的資源識別碼。 此設定也可以接受 SystemAssigned 作為值,相當於略過該設定。

啟用使用身分識別來擷取套件:

  1. 確定已將 Blob 設定為可進行私人存取

  2. 為此身分識別授與具有套件 Blob 範圍的儲存體 Blob 資料讀者角色。 如需建立角色指派的詳細資訊,請參閱指派 Azure 角色以存取 Blob 資料

  3. WEBSITE_RUN_FROM_PACKAGE 應用程式設定設為套件的 Blob URL。 此 URL 的形式通常是或類似於 https://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package}