快速入門: 從命令列在 Azure 中建立 Python 函式

在本文中,您會使用命令列工具建立可回應 HTTP 要求的 Python 函式。 在本機測試程式碼之後,您可以將其部署到 Azure Functions 的無伺服器環境。

本文說明 Azure Functions 支援的 Python 程式設計模型。 請使用頂端的選取器來選擇您的程式設計模型。

注意

適用於 Azure Functions 的 Python v2 程式設計模型會提供裝飾型方法來建立函式。 若要深入了解 Python v2 程式設計模型,請參閱開發人員參考指南

完成本快速入門後,您的 Azure 帳戶中會產生幾美分或更少的少許費用。

這也是本文的 Visual Studio Code 型版本

設定您的本機環境

開始之前,您必須符合下列需求:

  • Azurite 儲存體模擬器。 雖然您也可以使用實際的 Azure 儲存體帳戶,但本文假設您使用的是此模擬器。

安裝 Azure Functions Core Tools

建議您依據本機開發電腦的作業系統來安裝 Core Tools。

下列步驟使用 Windows 安裝程式 (MSI) 來安裝 Core Tools v4.x。 如需其他套件型安裝程式的詳細資訊,請參閱 Core Tools 讀我檔案

根據您的 Windows 版本,下載並執行 Core Tools 安裝程式:

如果您之前使用 Windows 安裝程式 (MSI) 在 Windows 上安裝 Core Tools,則應該先從 [新增移除程式] 解除安裝舊版本,再安裝最新版本。

建立並啟用虛擬環境

在適用的資料夾中執行下列命令,以建立並啟用名為 .venv 的虛擬環境。 請確定您在使用 受 Azure Functions 支援的 Python 版本

python -m venv .venv
source .venv/bin/activate

如果 Python 未在您的 Linux 發行版本上安裝 venv 套件,請執行下列命令:

sudo apt-get install python3-venv

您將在這個已啟用的虛擬環境中執行所有後續命令。

建立本機函式

在 Azure Functions 中,函式專案是包含一或多個個別函式的容器,而每個函式分別會回應特定的觸發程序。 專案中的所有函式會共用相同的本機和裝載設定。

在本節中,您將建立包含單一函式的函式專案。

  1. 執行 func init 命令,如下所示,在虛擬環境中建立 Python 函式專案。

    func init --python --model V1
    

    現在的環境會包含專案的各種檔案,包括名為 local.settings.jsonhost.json 的設定檔。 由於 local.settings.json 可能會包含從 Azure 下載的秘密,因此 .gitignore 檔案依預設會將該檔案排除在原始檔控制以外。

  2. 使用下列命令,將函式新增至您的專案,其中 --name 引數是函式的唯一名稱 (HttpExample),而 --template 引數可指定函式的觸發程序 (HTTP)。

    func new --name HttpExample --template "HTTP trigger" --authlevel "anonymous"
    

    func new 會建立符合函式名稱的子資料夾,其中包含適合專案所選語言的程式碼檔案,以及名為 function.json 的組態檔。

  3. 執行此命令以確定 Azure Functions 程式庫已安裝在環境中。

    .venv/bin/python -m pip install -r requirements.txt
    

在本章節中,您會建立函式專案,並新增 HTTP 觸發的函式。

  1. 執行 func init 命令,如下所示,在虛擬環境中建立 Python v2 函式專案。

    func init --python
    

    現在的環境會包含專案的各種檔案,包括名為 local.settings.jsonhost.json 的設定檔。 由於 local.settings.json 可能會包含從 Azure 下載的秘密,因此 .gitignore 檔案依預設會將該檔案排除在原始檔控制以外。

  2. 使用下列命令,將函式新增至您的專案,其中 --name 引數是函式的唯一名稱 (HttpExample),而 --template 引數可指定函式的觸發程序 (HTTP)。

    func new --name HttpExample --template "HTTP trigger" --authlevel "anonymous"
    

    如果出現提示,請選擇 [ANONYMOUS] 選項。 func new 會將名為 HttpExample 的 HTTP 觸發程序端點新增至 function_app.py 檔案,該檔案不需要驗證即可存取。

  1. 開啟 local.settings.json 專案檔,並且確認 AzureWebJobsFeatureFlags 設定具有 EnableWorkerIndexing 的值。 在本機執行時,此設定需要 Functions 正確地將您的專案解譯為 Python v2 模型。

  2. 在 local.settings.json 檔案中,更新 AzureWebJobsStorage 設定,如下列範例所示:

    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    

    這會告訴本機 Functions 主機,針對 Python v2 模型目前所需的儲存體連線使用儲存體模擬器。 當您將專案發佈至 Azure 時,您需要改為使用預設的儲存體帳戶。 如果您改為使用 Azure 儲存體帳戶,請在這裡設定儲存體帳戶連接字串。

  3. 執行此命令以確定 Azure Functions 程式庫已安裝在環境中。

    .venv/bin/python -m pip install -r requirements.txt
    

啟動儲存體模擬器

根據預設,本機開發會使用 Azurite 儲存體模擬器。 當 ocal.settings.json 專案檔中的 AzureWebJobsStorage 設定設為 UseDevelopmentStorage=true 時,會使用此模擬器。 使用模擬器時,您必須先啟動本機 Azurite 儲存體模擬器,才能執行函式。

如果 local.settings.json 檔案中的 AzureWebJobsStorage 設定已設定為 Azure 儲存體帳戶的連接字串而不是 UseDevelopmentStorage=true,您可以略過此步驟。

使用下列命令,在不同的流程中啟動 Azurite 儲存體模擬器:

start azurite

如需詳細資訊,請參閱執行 Azurite

在本機執行函式

  1. LocalFunctionProj 資料夾啟動本機 Azure Functions 執行階段主機以執行您的函式。

    func start
    

    在輸出的結尾處,必須出現下列幾行:

    Screenshot of terminal window output when running function locally.

    注意

    如果 HttpExample 未如上顯示,表示您可能不是從專案的根資料夾啟動主機。 在此情況下,請使用 Ctrl+C 來停止主機並前往專案的根資料夾,然後再次執行先前的命令。

  2. 從此輸出中,將 HTTP 函數的 URL 複製到瀏覽器,並附加查詢字串 ?name=<YOUR_NAME>,以製作完整的 URL,如 http://localhost:7071/api/HttpExample?name=Functions。 瀏覽器應該會顯示回應訊息,以回應您的查詢字串值。 您在其中啟動專案的終端機,也會在您提出要求時顯示記錄輸出。

  3. 當您完成時,請按 Ctrl+C,然後輸入 y 以停止函數主機。

為您的函式建立支援的 Azure 資源

若要將函式程式碼部署至 Azure,您必須先建立三個資源:

  • 資源群組,其為相關資源的邏輯容器。
  • 儲存體帳戶,可維護專案的狀態和其他資訊。
  • 函數應用程式,其提供執行函式程式碼的環境。 函式應用程式可對應至您的本機函式專案,並可讓您將函式分組為邏輯單位,以便管理、部署和共用資源。

請使用下列命令來建立這些項目。 Azure CLI 和 PowerShell 均受支援。

  1. 如果需要,請登入 Azure。

    az login
    

    az login 命令會將您登入 Azure 帳戶。

  2. 在您選擇的區域中,建立名為 AzureFunctionsQuickstart-rg 的資源群組。

    az group create --name AzureFunctionsQuickstart-rg --location <REGION>
    

    az group create 命令會建立資源群組。 在上述命令中,使用 az account list-locations 命令所傳回的可用區域代碼,將 <REGION> 取代為您附近的區域。

    注意

    您無法在相同的資源群組中裝載 Linux 和 Windows 應用程式。 如果您有名為 AzureFunctionsQuickstart-rg 的現有資源群組,且其中包含 Windows 函式應用程式或 Web 應用程式,則必須使用不同的資源群組。

  3. 在您的資源群組和區域中建立一般用途的儲存體帳戶。

    az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group AzureFunctionsQuickstart-rg --sku Standard_LRS
    

    az storage account create 命令會建立儲存體帳戶。

    在上述範例中,將 <STORAGE_NAME> 取代為適合您且在 Azure 儲存體中是唯一的名稱。 名稱只能包含 3 到 24 個字元的數字和小寫字母。 Standard_LRS 會指定 受 Functions 支援的一般用途帳戶。

    在本快速入門中,儲存體帳戶只會產生幾美分的費用。

  4. 在 Azure 中建立函數應用程式。

    az functionapp create --resource-group AzureFunctionsQuickstart-rg --consumption-plan-location westeurope --runtime python --runtime-version <PYTHON_VERSION> --functions-version 4 --name <APP_NAME> --os-type linux --storage-account <STORAGE_NAME>
    

    az functionapp create 命令會在 Azure 中建立函式應用程式。 您必須提供 --os-type linux,因為 Python 函式只會在 Linux 上執行。

    在先前的範例中,將 <APP_NAME> 取代為適合您的全域唯一名稱。 <APP_NAME> 也是函式應用程式的預設子網域。 請確定您為 <PYTHON_VERSION> 設定的值是 Functions 支援的版本,而且與您在本機開發期間所使用的版本相同。

    此命令會依據 Azure Functions 使用方案,建立在您指定的語言執行階段中執行的函式應用程式,而此應用程式在此處產生的使用量是免費的。 此命令也會在相同的資源群組中建立建立關聯的 Azure Application Insights 執行個體,您可將其用於監視函數應用程式和檢視記錄。 如需詳細資訊,請參閱監視 Azure Functions。 在您啟用此執行個體之前,並不會產生任何成本。

將函式專案部署至 Azure

在 Azure 中成功建立函式應用程式之後,您就可以開始使用 func Azure functionapp publish 命令部署本機函式專案。

在下列範例中,請將 <APP_NAME> 取代為您的應用程式名稱。

func azure functionapp publish <APP_NAME>

發佈命令會顯示類似於下列輸出的結果 (為了簡單起見已將其截斷):

...

Getting site publishing info...
Creating archive for current directory...
Performing remote build for functions project.

...

Deployment successful.
Remote build succeeded!
Syncing triggers...
Functions in msdocs-azurefunctions-qs:
    HttpExample - [httpTrigger]
        Invoke url: https://msdocs-azurefunctions-qs.azurewebsites.net/api/httpexample

在 Azure 中驗證

執行下列命令,以在 Azure 入口網站的 Application Insights 中檢視近乎即時的串流記錄。

func azure functionapp logstream <APP_NAME> --browser

在個別終端機視窗或瀏覽器中,再次呼叫遠端函式。 Azure 中的函式執行會有詳細資訊記錄顯示在終端機中。

清除資源

如果您要繼續進行下一個步驟並新增 Azure 儲存體佇列輸出繫結,請保留您所有的資源,因為在後續的工作還會用到。

否則,請使用下列命令刪除資源群組及其包含的所有資源,以避免產生額外的成本。

az group delete --name AzureFunctionsQuickstart-rg

下一步

對本文有任何疑問嗎?