Azure Developer CLI (azd) 支援 code and container deployments to Azure Functions. 兩種模式都使用專用 function 主機 azure.yaml :
- Code deployment 會把你建置的函式程式碼打包成壓縮檔,然後上傳到 Function App。
- 容器部署會建置或解析容器映像,必要時將其發佈到 Azure Container Registry(ACR),並更新函式應用程式以執行映像。
Azure Functions 和 Azure App 服務 都使用Microsoft.Web/sites資源提供者,且它們的容器部署流程共享一些內部機制。 不過,他們不是同 azd 一位主機。 Functions 使用 host: function,具有 Functions 專屬的封裝與遠端建置行為,且不使用 App Service 部署槽的工作流程。
選擇部署模式
azd 從服務配置中選擇部署模式:
| 配置 | 部署模式 |
|---|---|
一個支援非 Docker language 且沒有的原始碼projectdocker.path |
程式碼部署 |
language: docker |
容器部署 |
docker.path帶有源語言的值 |
容器部署 |
預製車 image |
容器部署 |
已配置的功能應用程式必須使用與服務設定相同的模式。 如果函式應用程式設定為容器,但 azure.yaml 選擇了程式碼部署,或相反, azd deploy 則會在上傳前停止並回報不匹配。
部署功能程式碼
配置一個基於程式碼的函式服務,包含原始專案、支援的語言,以及 host: function:
services:
api:
project: ./src/api
language: ts
host: function
在 azd deploy期間azd,建置專案、套用.funcignore排除、建立壓縮壓縮檔,並透過 Azure Functions 部署 API 上傳套件。
你的 Bicep 或 Terraform 必須配置一個基於程式碼的功能應用程式,並azd-service-name以服務名稱為標籤,除非你使用 resourceName 。azure.yaml 透過基礎設施即程式碼配置主機計畫、執行環境、儲存、身份、網路及應用程式設定。
配置遠端建置以部署程式碼
頂層服務 remoteBuild 特性僅適用於 Flex Consumption 計畫中基於程式碼的功能應用程式。 它控制 Azure Functions 是否使用 Oryx 來建立上傳的套件:
services:
api:
project: ./src/api
language: python
host: function
remoteBuild: true
當你省略 remoteBuild Flex Consumption 時, azd 會根據語言和套件內容選擇預設值:
| 語言 | 預設行為 |
|---|---|
| JavaScript 或 TypeScript | 當 .funcignore 排除 node_modules或沒有 .funcignore 檔案存在時,會使用遠端建置。 否則,就使用本地組裝的套件。 |
| Python | 使用遠端組裝。 |
| Go | 本地建置。 Go 功能應用程式不支援遠端組裝。 |
| 其他支援語言 | 使用本地自製的套件。 |
對於 JavaScript 和 TypeScript,必須有一個明確設定 remoteBuild 的值與 .funcignore 該檔案存在的時間一致。 當.funcignore排除 node_modules時設定 remoteBuild: true 。 設定remoteBuild: false包含於套裝中。.funcignorenode_modules
不要為非彈性方案設定頂層 remoteBuild 屬性。 要啟用 Oryx 建置於其他支援方案上,請在你的基礎架構中設定 ENABLE_ORYX_BUILD=true 和 SCM_DO_BUILD_DURING_DEPLOYMENT=true Function App 的設定。
部署容器化函式
對於帶有 Dockerfile 的原始碼專案,請設定 language: docker,或保留原始碼語言並指定 docker.path。
以下範例使用帶有 Docker 檔案的 TypeScript 專案:
services:
api:
project: ./src/api
language: ts
host: function
docker:
path: ./Dockerfile
你也可以部署一個預設映像檔,而不需要本地專案:
services:
api:
host: function
image: myregistry.azurecr.io/functions/api:1.0
對於預建映像檔,可以省略 language 或設為 docker。 不要將 project 與 image 合併。
在容器部署期間, azd
- 本地或遠端建置映像檔,或解析已設定好的預設映像檔。
- 當需要發佈時,會將映像發佈到專案中已設定的 ACR 實例。
- 更新函式應用程式的
linuxFxVersionDOCKER|<image>。 - 部署到主功能應用程式網站。
頂層服務 remoteBuild 屬性不適用於容器。 要建立包含 ACR 任務的容器映像檔,請使用 docker.remoteBuild:
services:
api:
project: ./src/api
language: docker
host: function
docker:
path: ./Dockerfile
remoteBuild: true
配置容器支援的功能應用程式
azd deploy 更新圖片參考,但不會將基於程式碼的函式應用程式轉換成基於容器的功能應用。 您的基礎架構必須在部署前先配置相容的站點。
| 需求 | 詳細資訊 |
|---|---|
| Linux 功能應用程式 | 在 Azure Functions Premium 或 Dedicated (App Service) 計劃中配置一個 Linux Function 應用程式。 Flex Consumption 不支援自訂容器。 This host: function workflow targets Microsoft.Web/sitesnot hosted on Azure 容器應用程式 on Azure Functions. |
| 容器站點配置 | 將網站類型設為包含 functionapp、 linux、 container。 用一個DOCKER\|<image>值初始化linuxFxVersion。 佔位影像就足夠了,因為 azd deploy 會取代它。 |
| 容器註冊表 | 對於原始碼建置,可以配置一個 ACR 實例,並透過 AZURE_CONTAINER_REGISTRY_ENDPOINT 基礎設施輸出暴露其登入伺服器,或為服務進行設定 docker.registry 。 完全合格的預建 image 版本可直接使用,無需另行出版註冊。 |
| 登錄檔存取 | 授權發佈影像的身份在需要發佈時推送至目的地登錄檔。 另外,設定 Function App 來拉取已部署的映像檔。 對於私有 ACR 映像,請授權 Function App 的管理身份拉取權限,並設定網站使用受管理身份憑證。 對於另一個私有登錄檔,請在你的基礎設施中設定適當的拉取憑證。 |
| 功能設定 | 設定必要的設定,例如FUNCTIONS_EXTENSION_VERSION、FUNCTIONS_WORKER_RUNTIME、,並AzureWebJobsStorage透過 Bicep 或 Terraform。 |
| 資源探索 | 套用 azd-service-name 一個與服務 azure.yaml名稱相符的標籤,或明確設定 resourceName 。 |
主機不支援function服務層級env設定。 改在你的基礎設施中定義功能應用程式的設定。
了解部署時段
azd 總是將 function 服務部署到主要的功能應用網站。 它不會發現、提示或部署到 Function App 的插槽。 像是 App Service 欄位的設定 AZD_DEPLOY_{SERVICE}_SLOT_NAME 不會影響 Function App 部署。
如果你需要基於時段的函式發佈流程,請在 host: function 內建工作流程之外管理時段與部署。
比較函式與應用服務主機
函式與 App Service 共享 Microsoft.Web/sites 資源類型,但選擇與工作負載相符的主機:
| Behavior |
function 主機 |
appservice 主機 |
|---|---|---|
| [工作負載] | Event-driven Azure Functions | 網頁應用程式與 API |
| 程式碼部署 | 使用 Azure Functions zip 部署流程 | 使用 App Service 部署流程 |
| 容器部署 | 在驗證網站為容器式後,更新 Function App 映像檔 | 在驗證網站已準備好容器後,更新網頁應用程式映像檔 |
| 遠端程式碼編譯 | 支援彈性消費功能應用程式的服務層級 remoteBuild 選項 |
沒有使用功能 remoteBuild 選項 |
| 部署位置 | 總是部署到主站 | 支援 azd App Service 時段工作流程 |
服務層級 env |
不支援;在基礎架構中使用功能應用程式設定 | 在基礎架構中設定應用程式設定 |