本文說明如何使用 Azure Functions Core 工具,在本機電腦上的 Linux 容器中建立您的第一個函式,在本機驗證該函式,然後將容器化函式發佈至容器登錄。 從容器登錄,您可以輕鬆地將容器化函式部署至 Azure。
如需將容器化函式部署至 Azure 的完整範例 (其中包含本文所述的步驟),請參閱下列其中一篇文章:
您也可以從容器登錄使用現有的容器化函數應用程式,在 Azure 入口網站中建立函數應用程式。 如需詳細資訊,請參閱使用容器在 Azure 入口網站中建立。
選擇您的開發語言
首先,使用 Azure Functions 工具,在使用特定語言 Linux 基礎映像的 Docker 容器中建立專案程式碼作為函式應用程式。 務必在文章頂端選取您所選擇的語言。
Core Tools 會自動為您的專案產生 Dockerfile,其會針對您的函式語言使用最新版的正確基礎映像。 您應該定期從最新的基礎映像更新容器,並從容器的更新版本重新部署。 如需詳細資訊,請參閱建立容器化函式應用程式。
必要條件
開始之前,您必須符合下列需求:
安裝 .NET 8.0 SDK。
安裝 Azure Functions Core Tools 4.0.5198 版或更新版本。
- 安裝 Azure Functions Core Tools 4.x 版。
- 安裝 Azure Functions 支援的 Node.js 版本。
- 安裝 Azure Functions 支援的 Python 版本。
- 安裝 .NET 6 SDK。
安裝 Azure Functions 支援的 Java Developer Kit 版本。
安裝 Apache Maven 3.0 版或更新版本。
- Azure CLI 2.4 版或更新版本。
如果您沒有 Azure 訂用帳戶,請在開始之前先建立 Azure 免費帳戶。
若要將您所建立的容器化函式應用程式映像發佈至容器登錄,您需要 Docker 識別碼,並在本機電腦上執行 Docker。 如果您沒有 Docker 識別碼,則可以建立 Docker 帳戶。
- Azure 容器註冊表
- Docker Hub (英文)
您也需要完成 Azure Container Registry 快速入門的建立容器登錄一節,以建立登錄執行個體。 記下完整的登入伺服器名稱。
建立並啟用虛擬環境
在適用的資料夾中執行下列命令,以建立並啟用名為 .venv 的虛擬環境。 務必使用 Azure Functions 支援的其中一個 Python 版本。
python -m venv .venv
source .venv/bin/activate
如果 Python 未在您的 Linux 發行版本上安裝 venv 套件,請執行下列命令:
sudo apt-get install python3-venv
您將在這個已啟用的虛擬環境中執行所有後續命令。
建立和測試本機 Functions 專案
在終端機或命令提示字元中,針對您選擇的語言執行下列命令,以在目前的資料夾中建立函式應用程式專案:
func init --worker-runtime dotnet-isolated --docker
func init --worker-runtime node --language javascript --docker
func init --worker-runtime powershell --docker
func init --worker-runtime python --docker
func init --worker-runtime node --language typescript --docker
在空的資料夾中,執行下列命令以從 Maven 原型產生 Functions 專案:
mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=8 -Ddocker
-DjavaVersion 參數會告知函式執行階段要使用哪個 JAVA 版本。 若您想讓函式在 Java 11 上執行,請使用 -DjavaVersion=11。 若未指定 -DjavaVersion,Maven 預設為 JAVA 8。 如需詳細資訊,請參閱 JAVA 版本。
重要
JAVA_HOME 環境變數必須設定為正確 JDK 版本的安裝位置,才能完成本文。
Maven 會要求您提供在部署時完成產生專案所需的值。 依照提示操作並提供下列資訊:
| 提示 | 值 | 說明 |
|---|---|---|
| groupId | com.fabrikam |
此值可在所有專案中唯一識別您的專案,並遵循適用於 Java 的套件命名規則。 |
| artifactId | fabrikam-functions |
此值是 jar 的名稱 (不含版本號碼)。 |
| 版本 | 1.0-SNAPSHOT |
選取預設值。 |
| 套件 | com.fabrikam.functions |
此值是所產生函式程式碼的 Java 套件。 使用預設值。 |
輸入 Y 或按 Enter 進行確認。
Maven 會在名為 artifactId 的新資料夾中建立專案檔,在此範例中為 fabrikam-functions。
--docker 選項會產生專案的 Dockerfile,這會定義適合用於 Azure Functions 和所選執行階段的容器。
瀏覽至專案資料夾:
cd fabrikam-functions
使用下列命令將函式新增至您的專案,其中,--name 引數是函式的唯一名稱,而 --template 引數會指定函式的觸發程序。
func new 會在您的專案中建立 C# 程式碼檔案。
func new --name HttpExample --template "HTTP trigger"
使用下列命令將函式新增至您的專案,其中,--name 引數是函式的唯一名稱,而 --template 引數會指定函式的觸發程序。
func new 會建立符合函式名稱的子資料夾,其中包含名為 function.json 的組態檔。
func new --name HttpExample --template "HTTP trigger"
若要在本機測試函式,請啟動專案根資料夾中的本機 Azure Functions 執行階段主機。
func start
func start
npm install
npm start
mvn clean package
mvn azure-functions:run
看到 HttpExample 端點寫入輸出之後,瀏覽至該端點。 您應該會在回應輸出中看到歡迎訊息。
看到 HttpExample 端點寫入輸出之後,請瀏覽至 http://localhost:7071/api/HttpExample?name=Functions。 瀏覽器必須顯示 "hello" 訊息,回應 Functions,這是提供給 name 查詢參數的值。
按 Ctrl+C (在 macOS 上為 Command+C) 以停止主機。
建立容器映像並在本機驗證
(選用) 檢查專案根資料夾中的 Dockerfile。 Dockerfile 說明在 Linux 上執行函式應用程式所需的環境。 在 Azure Functions 基底映像頁面中可找到針對 Azure Functions 支援的完整基底映像清單。
在根專案資料夾中執行 docker build 命令,提供名稱 azurefunctionsimage 和標籤 v1.0.0。 將 <DOCKER_ID> 取代為 Docker Hub 帳戶識別碼。 此命令會建置容器的 Docker 映像。
docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .
當命令完成時,您就能在本機執行新容器。
若要驗證組建,請使用 docker run 命令在本機容器中執行映像 (同樣將 <DOCKER_ID> 取代為您的 Docker Hub 帳戶識別碼),並新增連接埠引數 -p 8080:80:
docker run -p 8080:80 -it <DOCKER_ID>/azurefunctionsimage:v1.0.0
映像在本機容器中啟動後,請瀏覽至 http://localhost:8080/api/HttpExample,該處必須顯示與過去相同的問候訊息。 由於您建立的 HTTP 觸發函式使用匿名授權,因此您可以直接呼叫在容器中執行的函式,而無須取得存取金鑰。 如需詳細資訊,請參閱授權金鑰。
映像在本機容器中啟動後,請瀏覽至 http://localhost:8080/api/HttpExample?name=Functions,該處必須顯示與過去相同的 "hello" 訊息。 由於您建立的 HTTP 觸發函式使用匿名授權,因此您可以直接呼叫在容器中執行的函式,而無須取得存取金鑰。 如需詳細資訊,請參閱授權金鑰。
驗證容器中的函式應用程式之後,請按 Ctrl+C (在 macOS 上為 Command+C) 以停止執行。
將容器映像發佈至登錄
若要讓您的容器映像可供部署至主控環境,您必須將其推送至容器登錄。 作為安全性最佳做法,您應該使用 Azure Container Registry 實例,並強制執行受控識別型連線。 Docker Hub 會要求您使用共用秘密進行驗證,讓您的部署更容易受到攻擊。
- Azure 容器註冊表
- Docker Hub (英文)
Azure Container Registry 是私人登錄服務,用於建置、儲存和管理容器映像和相關成品。 您應該使用私人登錄服務,將容器發佈至 Azure 服務。
使用此指令,以使用您目前的 Azure 認證登入您的登錄執行個體:
az acr login --name <REGISTRY_NAME>在上一個命令中,以 Azure Container Registry 執行個體的名稱取代
<REGISTRY_NAME>。使用此命令以登錄登入伺服器的完整名稱標記映像:
docker tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 <LOGIN_SERVER>/azurefunctionsimage:v1.0.0以登錄登入伺服器的完整名稱取代
<LOGIN_SERVER>,並以 Docker 識別碼取代<DOCKER_ID>。使用此命令將容器推送至您的登錄執行個體:
docker push <LOGIN_SERVER>/azurefunctionsimage:v1.0.0