快速入门:在 Azure 中使用 Visual Studio Code 创建 Go 或 Rust 函数

在本文中,你将使用 Visual Studio Code 来创建一个响应 HTTP 请求的自定义处理程序函数。 在本地测试代码后,将代码部署到 Azure Functions 的无服务器环境。

可以使用自定义处理程序,通过运行 HTTP 服务器进程以任意语言或运行时创建函数。 本文支持 GoRust

完成本快速入门会从你的 Azure 帐户中扣取最多几美分的费用。

配置环境

在开始之前,请确保已满足下列要求:

安装或更新 Core Tools

Visual Studio Code 的 Azure Functions 扩展与 Azure Functions Core Tools 集成,使你可以使用 Azure Functions 运行时在 Visual Studio Code 本地运行和调试函数。 在开始之前,最好在本地安装 Core Tools 或更新现有安装以使用最新版本。

在 Visual Studio Code 中,选择 F1 打开命令面板,然后搜索并运行命令“Azure Functions:安装或更新 Core Tools”。

此命令会启动最新版 Core Tools 的基于包的安装。

创建本地项目

在本部分,你将使用 Visual Studio Code 创建一个本地 Azure Functions 自定义处理程序项目。 稍后在本文中,你要将函数代码发布到 Azure。

  1. 在活动栏中选择 Azure 图标。 然后在“工作区(本地)”区域中,选择 + 按钮,在下拉列表中选择“创建函数”。 在出现提示时,选择“创建新项目”。

    Screenshot of create a new project window.

  2. 为项目工作区选择目录位置,然后选择“选择”。 你应当为项目工作区创建一个新文件夹或选择一个空文件夹。 不要选择已是某个工作区的一部分的项目文件夹。

  3. 根据提示提供以下信息:

    Prompt 选择
    选择函数项目的语言 选择 Custom Handler
    为项目的第一个函数选择模板 选择 HTTP trigger
    提供函数名称 键入 HttpExample
    授权级别 选择 Anonymous,这使任何人都可以调用你的函数终结点。 若要了解授权级别,请参阅授权密钥
    选择打开项目的方式 选择 Open in current window

    Visual Studio Code 将使用此信息生成一个包含 HTTP 触发器的 Azure Functions 项目。 可以在资源管理器中查看本地项目文件。

创建和生成函数

HttpExample 文件夹中的 function.json 文件声明 HTTP 触发器函数 。 可以通过添加处理程序并将其编译为可执行文件来完成该函数。

  1. Ctrl + N(对于 macOS,则为 Cmd + N)新建文件。 在函数应用根文件夹(host.json 所在的文件夹)中将其另存为 handler.go 。

  2. 在 handler.go 中,添加以下代码并保存文件。 这就是 Go 自定义处理程序。

    package main
    
    import (
        "fmt"
        "log"
        "net/http"
        "os"
    )
    
    func helloHandler(w http.ResponseWriter, r *http.Request) {
        message := "This HTTP triggered function executed successfully. Pass a name in the query string for a personalized response.\n"
        name := r.URL.Query().Get("name")
        if name != "" {
            message = fmt.Sprintf("Hello, %s. This HTTP triggered function executed successfully.\n", name)
        }
        fmt.Fprint(w, message)
    }
    
    func main() {
        listenAddr := ":8080"
        if val, ok := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT"); ok {
            listenAddr = ":" + val
        }
        http.HandleFunc("/api/HttpExample", helloHandler)
        log.Printf("About to listen on %s. Go to https://127.0.0.1%s/", listenAddr, listenAddr)
        log.Fatal(http.ListenAndServe(listenAddr, nil))
    }
    
  3. Ctrl + Shift +` 或在“终端”菜单中选择“新建终端”,在 VS Code 中打开新的集成终端 。

  4. 使用以下命令编译自定义处理程序。 函数应用的根文件夹中会输出名为 handler(对于 Windows,则为 handler.exe)的可执行文件。

    go build handler.go
    

    VS Code - Build Go custom handler

配置函数应用

函数主机需配置为在启动时运行自定义处理程序二进制文件。

  1. 打开 host.json。

  2. customHandler.description 部分中,将 defaultExecutablePath 的值设置为 handler(对于 Windows,则将其设置为 handler.exe)。

  3. customHandler 部分中,添加名为 enableForwardingHttpRequest 的属性并将其值设置为 true。 对于仅包含 HTTP 触发器的函数,通过此设置可处理典型的 HTTP 请求(而不是自定义处理程序请求有效负载),从而简化编程。

  4. 确认 customHandler 部分是否如以下示例所示。 保存文件。

    "customHandler": {
      "description": {
        "defaultExecutablePath": "handler",
        "workingDirectory": "",
        "arguments": []
      },
      "enableForwardingHttpRequest": true
    }
    

将函数应用配置为启动自定义处理程序可执行文件。

在本地运行函数

可以先在本地开发计算机上运行此项目,然后再将其发布到 Azure。

  1. 在集成终端中,使用 Azure Functions Core Tools 启动函数应用。

    func start
    
  2. 在 Core Tools 运行时,导航至以下 URL 以执行 GET 请求(其中包括 ?name=Functions 查询字符串)。

    http://localhost:7071/api/HttpExample?name=Functions

  3. 系统会返回响应,在浏览器中如下所示:

    Browser - localhost example output

  4. 有关请求的信息将显示在“终端” 面板中。

    Task host start - VS Code terminal output

  5. Ctrl + C 停止 Core Tools。

确认该函数可以在本地计算机上正确运行以后,可以使用 Visual Studio Code 将项目直接发布到 Azure。

登录 Azure

在发布应用之前,必须先登录到 Azure。

  1. 如果你尚未登录,请在活动栏中选择 Azure 图标。 然后,在“资源”区域中,选择“登录到 Azure...”。

    Screenshot of the sign-in to Azure window within VS Code.

    如果你已登录并可以看到你的现有订阅,请转到下一部分。 如果还没有 Azure 帐户,请选择“创建 Azure 帐户...”。学生可以选择“创建面向学生的 Azure 帐户...”。

  2. 在浏览器中出现提示时,请选择你的 Azure 帐户,并使用你的 Azure 帐户凭据登录。 如果创建新帐户,你可以在创建帐户后登录。

  3. 成功登录后,可以关闭新浏览器窗口。 属于你的 Azure 帐户的订阅将显示在边栏中。

编译 Azure 的自定义处理程序

在本部分,你将在运行 Linux 的函数应用中将项目发布到 Azure。 在大多数情况下,必须先重新编译二进制文件并将配置调整为与目标平台匹配,然后才可将其发布到 Azure。

  1. 在集成终端中,将处理程序编译为 Linux/x64。 函数应用根文件夹中会创建名为 handler 的二进制文件。

    GOOS=linux GOARCH=amd64 go build handler.go
    

在 Azure 中创建函数应用

在本部分中,你将在 Azure 订阅中创建函数应用和相关的资源。

  1. 在活动栏中选择 Azure 图标。 然后在“资源”区域中,选择 + 图标,然后选择“在 Azure 中创建函数应用”选项。

    Create a resource in your Azure subscription

  2. 根据提示提供以下信息:

    Prompt 选择
    选择订阅 选择要使用的订阅。 如果在“资源”下只有一个订阅可见,则不会看到此项。
    输入函数应用的全局唯一名称 键入在 URL 路径中有效的名称。 将对你键入的名称进行验证,以确保其在 Azure Functions 中是唯一的。
    选择一个运行时堆栈 选择“自定义处理程序”。
    选择新资源的位置 为了获得更好的性能,请选择你附近的区域

    在 Azure 中创建各个资源时,该扩展会在“Azure: 活动日志”面板中显示这些资源的状态。

    Log of Azure resource creation

  3. 创建完成时,会在你的订阅中创建以下 Azure 资源。 资源基于你的函数应用名称进行命名:

    • 一个资源组:相关资源的逻辑容器。
    • 一个标准 Azure 存储帐户:用于维护项目的状态和其他信息。
    • 一个函数应用:提供用于执行函数代码的环境。 可以通过函数应用将函数分组为逻辑单元,以便在同一托管计划中更轻松地管理、部署和共享资源。
    • 一个应用服务计划:用于你的函数应用的基础主机。
    • 一个连接到函数应用的 Application Insights 实例,用于跟踪你的函数在应用中的使用情况。

    创建函数应用并应用了部署包之后,会显示一个通知。

    提示

    默认情况下,会根据你提供的函数应用名称创建函数应用所需的 Azure 资源。 默认情况下,还会在函数应用所在的新资源组中创建这些资源。 如果要自定义这些资源的名称或重复使用现有资源,则需要使用高级创建选项来发布项目

将项目部署到 Azure

重要

部署到现有函数应用将始终覆盖该应用在 Azure 中的内容。

  1. 在活动栏中选择 Azure 图标,然后在“工作区”区域中选择你的项目文件夹,并选择“部署...”按钮。

    Deploy project from the Visual Studio Code workspace

  2. 选择“部署到函数应用...”,然后选择刚刚创建的函数应用,选择“部署”。

  3. 在部署完成后,选择“查看输出”以查看创建和部署结果,其中包括你创建的 Azure 资源。 如果错过了通知,请选择右下角的响铃图标以再次查看。

    Screenshot of the View Output window.

在 Azure 中运行函数

  1. 返回侧栏中的“资源”区域,然后展开你的订阅、新的函数应用和“函数”。 右键单击 (Windows) 或按 Ctrl - 单击 (macOS) HttpExample 函数,然后选择“立即执行函数...”。

    Screenshot of executing function in Azure from Visual Studio Code.

  2. 在“输入请求正文”中,你将看到请求消息正文值 。 按 Enter 将此请求消息发送给函数。

  3. 当函数在 Azure 中执行并返回响应时,Visual Studio Code 中将引发通知。

清理资源

若要继续执行下一步骤将 Azure 存储队列绑定添加到函数,需要保留到目前为止构建的所有资源。

否则,可以使用以下步骤删除函数应用及其相关资源,以免产生任何额外的费用。

  1. 在 Visual Studio Code 中,按 F1 打开命令面板。 在命令面板中,搜索并选择 Azure: Open in portal

  2. 选择你的函数应用,然后按 Enter。 随即将在 Azure 门户中打开函数应用页面。

  3. 在“概览”选项卡中,选择“资源组”旁边的命名链接。

    Screenshot of select the resource group to delete from the function app page.

  4. 在“资源组”页上查看所包括的资源的列表,然后验证这些资源是否是要删除的。

  5. 选择“删除资源组”,然后按说明操作。

    可能需要数分钟才能删除完毕。 完成后会显示一个通知,持续数秒。 也可以选择页面顶部的钟形图标来查看通知。

有关 Functions 成本的详细信息,请参阅估算消耗计划成本

后续步骤