共用方式為


快速入門:使用 Azure Developer CLI 建立函式並將其部署至 Azure Functions

在本快速入門中,您會使用 Azure Developer 命令列工具來建立回應 HTTP 要求的函式。 在本機測試程式碼之後,您會將其部署到您在 Azure Functions 的彈性使用量方案中執行的新無伺服器函數應用程式。

專案來源會使用 Azure Developer CLI (AZD) 簡化將程式碼部署至 Azure 的作業。 此部署遵循目前安全且可調整的 Azure Functions 部署最佳做法。

根據預設,彈性使用量方案會遵循隨用隨付計費模型,這表示完成本快速入門會在 Azure 帳戶中產生幾美分或更少成本。

必要條件

初始化專案

您可以使用 azd init 命令,從範本建立本機 Azure Functions 程式碼專案。

  1. 在您的本機終端機或命令提示字元中,於空白資料夾中執行此 azd init 命令:

    azd init --template functions-quickstart-dotnet-azd -e flexquickstart-dotnet
    

    此命令會從範本存放庫提取專案檔,並初始化目前資料夾中的專案。 -e 旗標會設定目前環境的名稱。 在 azd 中,環境可用來維護應用程式的唯一部署內容,且您可以定義一個以上的部署內容。 它也用於您在 Azure 中建立的資源群組名稱。

  2. 執行此命令以瀏覽至 http 應用程式資料夾:

    cd http
    
  3. 在包含此 JSON 資料的 http 資料夾中,建立名為 local.settings.json 的檔案:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
        }
    }
    

    在本機執行時,需要此檔案。

  1. 在您的本機終端機或命令提示字元中,於空白資料夾中執行此 azd init 命令:

    azd init --template azure-functions-java-flex-consumption-azd -e flexquickstart-java 
    

    此命令會從範本存放庫提取專案檔,並初始化目前資料夾中的專案。 -e 旗標會設定目前環境的名稱。 在 azd 中,環境可用來維護應用程式的唯一部署內容,且您可以定義一個以上的部署內容。 它也用於您在 Azure 中建立的資源群組名稱。

  2. 執行此命令以瀏覽至 http 應用程式資料夾:

    cd http
    
  3. 在包含此 JSON 資料的 http 資料夾中,建立名為 local.settings.json 的檔案:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "java"
        }
    }
    

    在本機執行時,需要此檔案。

  1. 在您的本機終端機或命令提示字元中,於空白資料夾中執行此 azd init 命令:

    azd init --template functions-quickstart-javascript-azd -e flexquickstart-js
    

    此命令會從範本存放庫提取專案檔,並初始化根資料夾中的專案。 -e 旗標會設定目前環境的名稱。 在 azd 中,環境可用來維護應用程式的唯一部署內容,且您可以定義一個以上的部署內容。 它也用於您在 Azure 中建立的資源群組名稱。

  2. 在包含此 JSON 資料的根資料夾中,建立名為 local.settings.json 的檔案:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "node"
        }
    }
    

    在本機執行時,需要此檔案。

  1. 在您的本機終端機或命令提示字元中,於空白資料夾中執行此 azd init 命令:

    azd init --template functions-quickstart-powershell-azd -e flexquickstart-ps
    

    此命令會從範本存放庫提取專案檔,並初始化根資料夾中的專案。 -e 旗標會設定目前環境的名稱。 在 azd 中,環境可用來維護應用程式的唯一部署內容,且您可以定義一個以上的部署內容。 它也用於您在 Azure 中建立的資源群組名稱。

  2. 執行此命令以瀏覽至 src 應用程式資料夾:

    cd src
    
  3. 在包含此 JSON 資料的 src 資料夾中,建立名為 local.settings.json 的檔案:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "powershell",
            "FUNCTIONS_WORKER_RUNTIME_VERSION": "7.2"
        }
    }
    

    在本機執行時,需要此檔案。

  1. 在您的本機終端機或命令提示字元中,於空白資料夾中執行此 azd init 命令:

    azd init --template functions-quickstart-typescript-azd -e flexquickstart-ts
    

    此命令會從範本存放庫提取專案檔,並初始化根資料夾中的專案。 -e 旗標會設定目前環境的名稱。 在 azd 中,環境可用來維護應用程式的唯一部署內容,且您可以定義一個以上的部署內容。 它也用於您在 Azure 中建立的資源群組名稱。

  2. 在包含此 JSON 資料的根資料夾中,建立名為 local.settings.json 的檔案:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "node"
        }
    }
    

    在本機執行時,需要此檔案。

  1. 在您的本機終端機或命令提示字元中,於空白資料夾中執行此 azd init 命令:

    azd init --template functions-quickstart-python-http-azd -e flexquickstart-py
    

    此命令會從範本存放庫提取專案檔,並初始化根資料夾中的專案。 -e 旗標會設定目前環境的名稱。 在 azd 中,環境可用來維護應用程式的唯一部署內容,且您可以定義一個以上的部署內容。 它也用於您在 Azure 中建立的資源群組名稱。

  2. 在包含此 JSON 資料的根資料夾中,建立名為 local.settings.json 的檔案:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "python"
        }
    }
    

    在本機執行時,需要此檔案。

建立並啟用虛擬環境

在根資料夾中,執行下列命令來建立並啟用名為 .venv 的虛擬環境:

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

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

sudo apt-get install python3-venv

在您的本機環境中執行

  1. 在終端機或命令提示字元中,從您的應用程式資料夾執行此命令:

    func start
    
    mvn clean package
    mvn azure-functions:run
    
    npm install
    func start  
    
    npm install
    npm start  
    

    當 Functions 主機在本機專案資料夾中啟動時,它會將 HTTP 觸發函式的 URL 端點寫入終端機輸出。

  2. 在瀏覽器中,瀏覽至 httpget 端點,其看起來應該像以下 URL:

    http://localhost:7071/api/httpget

  3. 從新的終端機或命令提示字元視窗中,執行此 curl 命令,將具有 JSON 承載的 POST 要求傳送至 httppost 端點:

    curl -i http://localhost:7071/api/httppost -H "Content-Type: text/json" -d @testdata.json
    
    curl -i http://localhost:7071/api/httppost -H "Content-Type: text/json" -d "@src/functions/testdata.json"
    

    此命令會從 testdata.json 專案檔讀取 JSON 承載資料。 您可以在 test.http 專案檔中找到這兩個 HTTP 要求的範例。

  4. 當您完成時,請在終端機視窗中按 Ctrl+C 以停止 func.exe 主機程序。

  1. 執行 deactivate 以關閉虛擬環境。

檢閱程式碼 (選用)

您可以檢閱定義兩個 HTTP 觸發程序函式端點的程式碼:

       [Function("httpget")]
       public IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get")]
         HttpRequest req,
         string name)
       {
           var returnValue = string.IsNullOrEmpty(name)
               ? "Hello, World."
               : $"Hello, {name}.";

           _logger.LogInformation($"C# HTTP trigger function processed a request for {returnValue}.");

           return new OkObjectResult(returnValue);
       }
@FunctionName("httpget")
public HttpResponseMessage run(
        @HttpTrigger(
            name = "req",
            methods = {HttpMethod.GET},
            authLevel = AuthorizationLevel.FUNCTION)
            HttpRequestMessage<Optional<String>> request,
        final ExecutionContext context) {
    context.getLogger().info("Java HTTP trigger processed a request.");

    // Parse query parameter
    String name = Optional.ofNullable(request.getQueryParameters().get("name")).orElse("World");

    return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
}
const { app } = require('@azure/functions');

app.http('httpget', {
    methods: ['GET'],
    authLevel: 'function',
    handler: async (request, context) => {
        context.log(`Http function processed request for url "${request.url}"`);

        const name = request.query.get('name') || await request.text() || 'world';

        return { body: `Hello, ${name}!` };
    }
});
import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions";

export async function httpGetFunction(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    context.log(`Http function processed request for url "${request.url}"`);

    const name = request.query.get('name') || await request.text() || 'world';

    return { body: `Hello, ${name}!` };
};

app.http('httpget', {
    methods: ['GET'],
    authLevel: 'function',
    handler: httpGetFunction
});

function.json 檔案會定義 httpget 函式:

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "Request",
      "methods": [
        "get"
      ],
      "route": "httpget"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "Response"
    }
  ]
}

run.ps1 檔案會實作函式程式碼:

using namespace System.Net

# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)

# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."

# Interact with query parameters
$name = $Request.Query.name

$body = "This HTTP triggered function executed successfully. Pass a name in the query string for a personalized response."

if ($name) {
    $body = "Hello, $name. This HTTP triggered function executed successfully."
}

# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
    StatusCode = [HttpStatusCode]::OK
    Body = $body
})
@app.route(route="httpget", methods=["GET"])
def http_get(req: func.HttpRequest) -> func.HttpResponse:
    name = req.params.get("name", "World")

    logging.info(f"Processing GET request. Name: {name}")

    return func.HttpResponse(f"Hello, {name}!")

您可以在這裡檢閱完整的範本專案。

您可以在這裡檢閱完整的範本專案。

您可以在這裡檢閱完整的範本專案。

您可以在這裡檢閱完整的範本專案。

您可以在這裡檢閱完整的範本專案。

您可以在這裡檢閱完整的範本專案。

在本機驗證函式之後,是時候將它們發佈至 Azure 了。

建立 Azure 資源

此專案已設定為使用 azd provision 命令,在彈性使用量方案中建立函數應用程式,以及其他必要的 Azure 資源。

注意

此專案包含一組 Bicep 檔案,讓 azd 用來建立符合最佳做法之彈性使用量方案的安全部署。

JAVA 應用程式目前不支援 azd upazd deploy 命令。

  1. 在專案的根資料夾中,執行此命令以建立所需的 Azure 資源:

    azd provision
    

    根資料夾包含 azd 所需的 azure.yaml 定義檔。

    如果您尚未登入,系統會要求您向 Azure 帳戶進行驗證。

  2. 出現提示時,請提供這些必要的部署參數:

    參數 描述
    Azure 訂用帳戶 建立您資源所在位置的訂用帳戶。
    Azure 位置 要在其中建立包含新 Azure 資源之資源群組所在的 Azure 區域。 只會顯示目前支援彈性使用量方案的區域。

    azd provision 命令會透過 Bicep 組態檔使用您對這些提示的回應,以建立和設定這些必要的 Azure 資源:

    • 彈性使用量方案和函數應用程式
    • Azure 儲存體 (必要) 和 Application Insights (建議)
    • 存取帳戶的原則和角色
    • 使用受控識別的服務對服務連線 (而不是預存的連接字串)
    • 用來安全地執行函數應用程式和其他 Azure 資源的虛擬網路

    命令成功完成之後,您可以將專案程式碼部署至 Azure 中的這個新函數應用程式。

部署至 Azure

您可以使用 Core Tools 封裝程式碼,並從 target 輸出資料夾將其部署至 Azure。

  1. 瀏覽至 target 輸出資料夾中對等的應用程式資料夾:

    cd http/target/azure-functions/contoso-functions
    

    此資料夾應該有 host.json 檔案,指出它是已編譯 JAVA 函數應用程式的根目錄。

  2. 執行下列命令,使用 Core Tools 將編譯的 JAVA 程式碼專案部署到 Azure 中的新函數應用程式資源:

    APP_NAME=$(azd env get-value AZURE_FUNCTION_NAME)
    func azure functionapp publish $APP_NAME
    

    azd env get-value 命令會從本機環境取得函數應用程式名稱,這是使用 func azure functionapp publish 進行部署時的必要項目。 發行成功完成之後,您會看到 Azure 中 HTTP 觸發程序端點的連結。

部署至 Azure

此專案已設定為使用 azd up 命令,將此專案部署至 Azure 之彈性使用量方案中的新函數應用程式。

提示

此專案包含一組 Bicep 檔案,讓 azd 用來建立符合最佳做法之彈性使用量方案的安全部署。

  1. 執行此命令,讓 azd 在 Azure 中建立必要的 Azure 資源,並將程式碼專案部署至新的函數應用程式:

    azd up
    

    根資料夾包含 azd 所需的 azure.yaml 定義檔。

    如果您尚未登入,系統會要求您向 Azure 帳戶進行驗證。

  2. 出現提示時,請提供這些必要的部署參數:

    參數 描述
    Azure 訂用帳戶 建立您資源所在位置的訂用帳戶。
    Azure 位置 要在其中建立包含新 Azure 資源之資源群組所在的 Azure 區域。 只會顯示目前支援彈性使用量方案的區域。

    azd up 命令會透過 Bicep 組態檔使用您對這些提示的回應,以完成這些部署工作:

    • 建立和設定這些必要的 Azure 資源 (相當於 azd provision):

      • 彈性使用量方案和函數應用程式
      • Azure 儲存體 (必要) 和 Application Insights (建議)
      • 存取帳戶的原則和角色
      • 使用受控識別的服務對服務連線 (而不是預存的連接字串)
      • 用來安全地執行函數應用程式和其他 Azure 資源的虛擬網路
    • 將程式碼封裝並部署至部署容器 (相當於 azd deploy)。 然後,應用程式會啟動並在已部署的套件中執行。

    命令成功完成之後,您會看到所建立資源的連結。

在 Azure 上叫用函式

您現在可以使用 HTTP 測試工具,或從瀏覽器 (針對 GET 要求) 向其 URL 提出 HTTP 要求,以在 Azure 中叫用函式端點。 當您的函式在 Azure 中執行時,系統會強制執行存取金鑰授權,且您必須提供函式存取金鑰與您的要求。

您可以使用 Core Tools 來取得您在 Azure 中所執行函式的 URL 端點。

  1. 在您的本機終端機或命令提示字元中,執行下列命令以取得 URL 端點值:

    SET APP_NAME=(azd env get-value AZURE_FUNCTION_NAME)
    func azure functionapp list-functions $APP_NAME --show-keys
    
    $APP_NAME = azd env get-value AZURE_FUNCTION_NAME
    func azure functionapp list-functions $APP_NAME --show-keys
    

    azd env get-value 命令會從本機環境取得函數應用程式名稱。 使用 --show-keys 選項搭配 func azure functionapp list-functions 表示針對每個端點的傳回的 Invoke URL: 值都包含函式層級存取金鑰。

  2. 如同先前,使用 HTTP 測試工具來驗證在 Azure 中執行之函數應用程式中的這些 URL。

重新部署程式碼

您可以視需要多次執行 azd up 命令以佈建 Azure 資源,並將程式碼更新部署至函數應用程式。

注意

最新的部署套件一律會覆寫已部署的程式碼檔案。

您對 azd 提示的初始回應,以及 azd 所產生的任何環境變數都會儲存在本機的具名環境中。 使用 azd env get-values 命令來檢閱您環境中建立 Azure 資源時所使用的所有變數。

清除資源

當您使用函數應用程式和相關資源時,您可以使用此命令從 Azure 刪除函數應用程式及其相關資源,並避免產生任何進一步的成本:

azd down --no-prompt

注意

--no-prompt 選項會指示 azd 刪除您的資源群組,而不需要您確認。

此命令不會影響您的本機程式碼專案。