使用 Visual Studio 开发 Azure Functions

使用 适用于 Visual Studio Code 的 Azure Functions 扩展可在本地开发函数并将其部署到 Azure。 如果这是你第一次体验 Azure Functions,可以在 Azure Functions 简介中了解详细信息。

Azure Functions 扩展提供以下优势:

  • 在本地开发计算机上编辑、生成和运行函数。
  • 将 Azure Functions 项目直接发布到 Azure。
  • 以各种语言编写函数,同时利用 Visual Studio Code 的优势。

你正在查看本文的 C# 版本。 请务必在文章顶部选择你偏好的 Functions 编程语言。

要立即开始,请完成 Visual Studio Code 快速入门文章

你正在查看本文的 Java 版本。 请务必在文章顶部选择你偏好的 Functions 编程语言。

要立即开始,请完成 Visual Studio Code 快速入门文章

你正在查看本文的 JavaScript 版本。 请务必在文章顶部选择你偏好的 Functions 编程语言。

要立即开始,请完成 Visual Studio Code 快速入门文章

你正在查看本文的 PowerShell 版本。 请务必在文章顶部选择你偏好的 Functions 编程语言。

要立即开始,请完成 Visual Studio Code 快速入门文章

你正在查看本文的 Python 版本。 请务必在文章顶部选择你偏好的 Functions 编程语言。

要立即开始,请完成 Visual Studio Code 快速入门文章

你正在查看本文的 TypeScript 版本。 请务必在文章顶部选择你偏好的 Functions 编程语言。

要立即开始,请完成 Visual Studio Code 快速入门文章

重要

不要对单个函数应用混合使用本地开发和门户开发。 从本地项目发布到函数应用时,部署过程会覆盖在门户中开发的任何函数。

先决条件

运行本地要求

仅在本地运行和调试函数时需要这些先决条件。 不需要它们创建项目或将项目发布到 Azure Functions。

  • Azure Functions Core Tools 可实现集成的本地调试体验。 安装 Azure Functions 扩展后,安装或更新 Core Tools 的最简单方法是从命令托盘运行 Azure Functions: Install or Update Azure Functions Core Tools 命令。

创建 Azure Functions 项目

使用 Functions 扩展可以创建函数应用项目以及第一个函数。 以下步骤说明如何在新的 Functions 项目中创建 HTTP 触发的函数。 HTTP 触发器是用于演示的最简单函数触发器模板。

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

    Screenshot of create a new project window.

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

  3. 出现提示时,请为项目选择语言,并根据需要选择特定的语言版本。

  4. 选择“HTTP 触发器”函数模板,或者可以选择“暂时跳过”以创建不带函数的项目。 以后始终可以将函数添加到项目

    Screenshot for selecting H T T P trigger.

    提示

    可以通过选择 Change template filter 选项并将其设置为“核心”或“全部”来查看其他模板。

  5. 键入“HttpExample”作为函数名称,按 Enter,然后选择“函数”授权。 调用函数终结点时,此授权级别需要提供函数密钥

    Screenshot for creating function authorization.

  6. 从下拉列表中选择“添加到工作区”。

     Screenshot for selectIng Add to workplace.

  7. 在“是否信任此文件夹中的文件的作者?”窗口中,选择“是”。

    Screenshot to confirm trust in authors of the files.

  8. 此时将使用 HTTP 触发的函数的模板,以所选语言创建函数。

生成的项目文件

项目模板将以所选语言创建一个项目,并安装所需的依赖项。 对于任何语言,新项目包含以下文件:

  • host.json:用于配置 Functions 主机。 在本地和 Azure 中运行函数时,将应用这些设置。 有关详细信息,请参阅 host.json 参考

  • local.settings.json:维护本地运行函数时使用的设置。 仅当在本地运行函数时,才使用这些设置。 有关详细信息,请参阅本地设置文件

    重要

    由于 local.settings.json 文件可能包含机密,因此需要将其从项目源代码管理中排除。

根据你的语言,将创建以下其他文件:

HttpExample.cs 类库文件,其内容因项目是在独立工作进程运行还是与 Functions 主机一起在进程中运行而异。

  • 根文件夹中定义项目和部署参数的 pom.xml 文件,包括项目依赖项和 Java 版本。 pom.xml 还包含有关在部署期间创建的 Azure 资源的信息。

  • src 路径中实现函数的 Functions.java 文件。

生成的文件取决于适用于 Functions 的所选 Node.js 编程模型:

HttpExample 文件夹,其中包含:

生成的文件取决于适用于 Functions 的所选 Python 编程模型:

  • 项目级别 requirements.txt 文件,其中列出了 Functions 所需的包。

  • 同时包含函数定义和代码的 function_app.py 文件。

此时,可以执行以下任务之一:

将函数添加到项目

可以根据某个预定义的函数触发器模板将新函数添加到现有项目。 若要添加新的函数触发器,请按 F1 打开命令面板,然后搜索并运行命令“Azure Functions:创建函数”。 遵照提示选择触发器类型,并定义触发器的所需属性。 如果触发器需要访问密钥或连接字符串才能连接到服务,请在创建函数触发器之前做好准备。

此操作的结果是将新的 C# 类库 (.cs) 文件添加到项目中。

此操作的结果是将新的 Java (.java) 文件添加到项目中。

此操作的结果取决于 Node.js 模型版本。

此时会在项目中创建一个新文件夹。 该文件夹包含新的 function.json 文件和新的 JavaScript 代码文件。

此操作的结果是在项目中创建新文件夹。 该文件夹包含新的 function.json 文件和新的 PowerShell 代码文件。

此操作的结果取决于 Python 模型版本。

新函数代码将添加到 function_app.py 文件(默认行为)或所选的另一个 Python 文件中。

连接到服务

可以添加输入和输出绑定将函数连接到其他 Azure 服务。 绑定将函数连接到其他服务,而无需编写连接代码。

例如,定义将数据写入存储队列的输出绑定的方式取决于进程模型:

更新函数方法以添加通过使用 QueueOutput 特性定义的绑定参数。 可以使用对象 MultiResponse 来返回多个消息或多个输出流。

例如,要添加将数据写入存储队列的输出绑定,请更新函数方法以添加通过使用 QueueOutput 批注定义的绑定参数。 该 OutputBinding<T> 对象表示在函数完成时写入到输出绑定的消息。

例如,定义将数据写入存储队列的输出绑定的方式取决于 Node.js 模型版本:

Visual Studio Code 可让你遵照一组方便的提示将绑定添加到 function.json 文件。

若要添加绑定,请打开命令托盘 (F1) 并键入“Azure Functions: add binding...”,选择新绑定的函数,然后按照提示操作,这些提示因添加到函数的绑定类型而异。

下面是有关定义新的存储输出绑定的示例提示:

提示 说明
选择绑定方向 out 该绑定是输出绑定。
选择具有方向的绑定 Azure Queue Storage 该绑定是 Azure 存储队列绑定。
用于在代码中标识此绑定的名称 msg 用于标识代码中引用的绑定参数的名称。
要将消息发送到的队列 outqueue 绑定要写入到的队列的名称。 如果 queueName 不存在,首次使用绑定时,它会创建该属性。
从“local.settings.json”中选择设置 MyStorageConnection 包含存储帐户连接字符串的应用程序设置的名称。 AzureWebJobsStorage 设置包含连同函数应用一起创建的存储帐户的连接字符串。

还可以直接右键单击(在 macOS 上,请按住 Ctrl 并单击)function 文件夹中的 function.json 文件,选择“添加绑定”,然后按照相同的提示进行操作 。

在此示例中,以下绑定已添加到 function.json 文件中的 bindings 数组:

{
    "type": "queue",
    "direction": "out",
    "name": "msg",
    "queueName": "outqueue",
    "connection": "MyStorageConnection"
}

Visual Studio Code 可让你遵照一组方便的提示将绑定添加到 function.json 文件。

若要添加绑定,请打开命令托盘 (F1) 并键入“Azure Functions: add binding...”,选择新绑定的函数,然后按照提示操作,这些提示因添加到函数的绑定类型而异。

下面是有关定义新的存储输出绑定的示例提示:

提示 说明
选择绑定方向 out 该绑定是输出绑定。
选择具有方向的绑定 Azure Queue Storage 该绑定是 Azure 存储队列绑定。
用于在代码中标识此绑定的名称 msg 用于标识代码中引用的绑定参数的名称。
要将消息发送到的队列 outqueue 绑定要写入到的队列的名称。 如果 queueName 不存在,首次使用绑定时,它会创建该属性。
从“local.settings.json”中选择设置 MyStorageConnection 包含存储帐户连接字符串的应用程序设置的名称。 AzureWebJobsStorage 设置包含连同函数应用一起创建的存储帐户的连接字符串。

还可以直接右键单击(在 macOS 上,请按住 Ctrl 并单击)function 文件夹中的 function.json 文件,选择“添加绑定”,然后按照相同的提示进行操作 。

在此示例中,以下绑定已添加到 function.json 文件中的 bindings 数组:

{
    "type": "queue",
    "direction": "out",
    "name": "msg",
    "queueName": "outqueue",
    "connection": "MyStorageConnection"
}

例如,定义将数据写入存储队列的输出绑定的方式取决于 Python 模型版本:

函数 @queue_output 上的修饰器用于为存储队列的输出定义命名绑定参数,其中 func.Out 定义了写入的输出内容。

以下示例展示了将队列存储输出绑定添加到 HTTP 触发的函数之后的函数定义:

[FunctionName("HttpExample")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, 
    [Queue("outqueue"),StorageAccount("AzureWebJobsStorage")] ICollector<string> msg, 
    ILogger log)

定义输出绑定的方式取决于你的流程模型。 有关详细信息,包括你可以参考的示例绑定代码的链接,请参阅向函数添加绑定

@FunctionName("HttpExample")
public HttpResponseMessage run(
        @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) 
        HttpRequestMessage<Optional<String>> request, 
        @QueueOutput(name = "msg", queueName = "outqueue", 
        connection = "AzureWebJobsStorage") OutputBinding<String> msg, 
        final ExecutionContext context) {

有关详细信息,包括你可以参考的示例绑定代码的链接,请参阅向函数添加绑定

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    },
    {
      "type": "queue",
      "direction": "out",
      "name": "msg",
      "queueName": "outqueue",
      "connection": "AzureWebJobsStorage"
    }
  ]
}

定义输出绑定的方式取决于 Node.js 模型的版本。 有关详细信息,包括你可以参考的示例绑定代码的链接,请参阅向函数添加绑定

$outputMsg = $name
Push-OutputBinding -name msg -Value $outputMsg

有关详细信息,包括你可以参考的示例绑定代码的链接,请参阅向函数添加绑定

@app.route(route="HttpExample")
@app.queue_output(arg_name="msg", queue_name="outqueue", connection="AzureWebJobsStorage")
def HttpExample(req: func.HttpRequest, msg: func.Out [func.QueueMessage]) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

定义输出绑定的方式取决于 Python 模型的版本。 有关详细信息,包括你可以参考的示例绑定代码的链接,请参阅向函数添加绑定

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    },
    {
      "type": "queue",
      "direction": "out",
      "name": "msg",
      "queueName": "outqueue",
      "connection": "AzureWebJobsStorage"
    }
  ]
}

定义输出绑定的方式取决于 Node.js 模型的版本。 有关详细信息,包括你可以参考的示例绑定代码的链接,请参阅向函数添加绑定

登录 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 资源

在将 Functions 项目发布到 Azure 之前,Azure 订阅中必须有一个函数应用和相关资源才能运行代码。 函数应用为函数提供了执行上下文。 从 Visual Studio Code 发布到 Azure 中的函数应用时,项目将打包并部署到 Azure 订阅中选定的函数应用。

在 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 中的新函数应用

以下步骤使用高级创建选项将项目发布到创建的新函数应用:

  1. 在命令面板中,输入“Azure Functions: 在 Azure 中创建函数应用...(高级)”。

  2. 如果你未登录,系统会提示“登录到 Azure”。 也可以创建一个 Azure 帐户。 从浏览器登录后,返回到 Visual Studio Code。

  3. 按提示操作并提供以下信息:

    Prompt 选择
    输入新的函数应用的全局唯一名称。 键入用于标识新函数应用的全局唯一名称,然后按 Enter。 函数应用名称的有效字符包括 a-z0-9-
    选择运行时堆栈。 选择你一直在本地运行的语言版本。
    选择 OS。 选择“Linux”或“Windows”。 Python 应用必须在 Linux 上运行。
    选择新资源的资源组。 选择“+ 创建新资源组”,键入资源组名称(例如 myResourceGroup),然后按 Enter。 也可以选择现有的资源组。
    选择新资源的位置。 在与你靠近或者与函数要访问的其他服务靠近的区域中选择一个位置。
    选择托管计划。 为无服务器消耗计划托管选择“消耗”,这样,仅当函数运行时你才需要付费。
    选择一个存储帐户。 选择“创建新存储帐户”,根据提示键入函数应用使用的新存储帐户的全局唯一名称,然后按 Enter。 存储帐户名称长度必须为 3 到 24 个字符,只能包含数字和小写字母。 也可以选择现有的帐户。
    为你的应用选择 Application Insights 资源。 选择“创建新的 Application Insights 资源”,然后根据提示键入用于存储函数运行时数据的实例的名称。

    创建函数应用并应用了部署包之后,会显示一个通知。 在此通知中选择“查看输出”以查看创建和部署结果,其中包括你创建的 Azure 资源。

在 Azure 中获取 HTTP 触发的函数的 URL

若要从客户端调用 HTTP 触发的函数,需要部署到函数应用的函数的 URL。 此 URL 包含全部所需的函数密钥。 可以使用扩展获取已部署的函数的这些 URL。 如果只是想在 Azure 中运行远程函数,可使用立即执行函数扩展功能。

  1. 按 F1 打开命令面板,然后搜索并运行命令“Azure Functions:Copy Function URL

  2. 按提示选择 Azure 中的函数应用,然后选择要调用的特定 HTTP 触发器。

函数 URL 将复制到剪贴板,同时,将使用 code 查询参数传递全部所需的密钥。 使用 HTTP 工具提交 POST 请求,或使用浏览器对远程函数发出 GET 请求。

在 Azure 中扩展获取函数的 URL 时,扩展使用 Azure 帐户自动检索启动该函数所需的密钥。 详细了解函数访问密钥。 启动非 HTTP 触发的函数需要使用管理密钥。

部署项目文件

从 Visual Studio Code 发布时,可以利用 Zip 部署技术。

重要

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

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

    Deploy project from the Visual Studio Code workspace

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

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

    Screenshot of the View Output window.

运行函数

Azure Functions 扩展允许你运行单个函数。 可以在本地开发计算机上的项目或 Azure 订阅中运行函数。

对于 HTTP 触发器函数,该扩展会调用 HTTP 终结点。 对于其他类型的触发器,它会调用管理员 API 来启动函数。 发送到函数的请求的消息正文取决于触发器的类型。 当触发器需要测试数据时,系统会提示你以特定的 JSON 格式输入数据。

在 Azure 中运行函数

在 Azure 中从 Visual Studio Code 执行函数。

  1. 在命令面板中,输入“Azure Functions: 立即执行函数”,然后选择 Azure 订阅。

  2. 在 Azure 中从列表选择函数应用。 如果看不到函数应用,请确保你已登录到正确的订阅。

  3. 选择要从列表中运行的函数,并在“输入请求正文”中键入请求的消息正文。 按 Enter 将此请求消息发送给函数。 “输入请求正文”中的默认文本应指示正文的格式。 如果你的函数应用没有函数,则会显示包含此错误的通知错误。

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

你也可以通过右键单击(在 Mac 上为按住 Ctrl 单击)想要从 Azure 订阅的函数应用中运行的函数,并选择“立即执行函数...”来运行函数 。

通过 Visual Studio Code 在 Azure 中运行函数时,扩展使用 Azure 帐户自动检索启动该函数所需的密钥。 详细了解函数访问密钥。 启动非 HTTP 触发的函数需要使用管理密钥。

在本地运行函数

本地运行时是在 Azure 中托管函数应用的同一个运行时。 将从 local.settings.json 文件读取本地设置。 若要在本地运行 Functions 项目,必须满足以下附加要求

将项目配置为在本地运行

对于除 HTTP 和 Webhook 以外的所有触发器类型,Functions 运行时在内部使用 Azure 存储帐户。 因此,需要将 Values.AzureWebJobsStorage 键设置为有效的 Azure 存储帐户连接字符串。

本部分结合使用 Visual Studio Code 的 Azure 存储扩展Azure 存储资源管理器进行连接并检索存储连接字符串。

若要设置存储帐户连接字符串,请执行以下操作:

  1. 在 Visual Studio 中,打开“Cloud Explorer”,展开“存储帐户”>“你的存储帐户”,然后选择“属性面板”并复制“主连接字符串”值。

  2. 在项目内,打开 local.settings.json 项目文件,并将“AzureWebJobsStorage”键的值设置为复制的连接字符串。

  3. 重复上述步骤,将唯一键添加到函数所需的其他任何连接的 Values 数组。

有关详细信息,请参阅本地设置文件

在本地调试函数

若要调试函数,请按 F5。 如果 Core Tools 不可用,系统会提示你安装它。 安装后运行 Core Tools 时,输出将显示在终端中。 此步骤与从终端运行 func start Core Tools 命令的结果相同,不过,此处使用了其他生成任务和附加的调试器。

当项目正在运行时,你可以使用“立即执行函数...”扩展功能,以触发函数,就像将项目部署到 Azure 时一样。 在调试模式下运行项目时,将按预期命中 Visual Studio Code 中的断点。

  1. 在命令面板中,输入“Azure Functions: 立即执行函数”,然后选择“本地项目” 。

  2. 选择要在项目中运行的函数,并在“输入请求正文”中键入请求的消息正文。 按 Enter 将此请求消息发送给函数。 “输入请求正文”中的默认文本应指示正文的格式。 如果你的函数应用没有函数,则会显示包含此错误的通知错误。

  3. 当函数在本地运行并在收到响应后,Visual Studio Code 中将引发通知。 函数执行的相关信息将显示在“终端”面板中。

在本地运行时不需要密钥,这同时适用于函数密钥和管理员级密钥。

本地设置

在 Azure 中的函数应用中运行时,函数所需的设置安全地存储在应用设置中。 在本地开发期间,这些设置则改为添加到 local.settings.json 文件中的 Values 对象。 local.settings.json 文件还会存储本地开发工具使用的设置。

因为 local.settings.json 可能包含机密(如连接字符串),因此你绝不应将其存储在远程存储库中。 若要了解有关本地设置的详细信息,请参阅本地设置文件

默认情况下,将项目发布到 Azure 时,这些设置不会自动迁移。 发布完成后,系统会提供将 local.settings.json 中的设置发布到 Azure 中的函数应用的选项。 有关详细信息,请参阅发布应用程序设置

ConnectionStrings 中的值永远不会发布。

还可以在代码中读取环境变量形式的函数应用程序设置值。 有关详细信息,请参阅环境变量

  • 还可以在代码中将函数应用设置值读取为环境变量。 有关详细信息,请参阅环境变量
  • 还可以在代码中将函数应用设置值读取为环境变量。 有关详细信息,请参阅环境变量
  • 还可以在代码中将函数应用设置值读取为环境变量。 有关详细信息,请参阅环境变量
  • 还可以在代码中将函数应用设置值读取为环境变量。 有关详细信息,请参阅环境变量

Azure 中的应用程序设置

项目中 local.settings.json 文件内的设置应与 Azure 中函数应用内的应用程序设置相同。 还必须将添加到 local.settings.json 的任何设置添加到 Azure 函数应用中。 发布项目时,不会自动上传这些设置。 同样,通过门户在函数应用中创建的任何设置必须下载到本地项目。

发布应用程序设置

将所需设置发布到 Azure 中的函数应用的最简单方法是使用成功发布项目之后显示的“上传设置”链接。

Screenshot to upload application settings.

也可以使用命令面板中的“Azure Functions:上传本地设置”命令来发布设置。 可以使用“Azure Functions:添加新设置”命令将各个设置添加到 Azure 中的应用程序设置。

提示

在发布 local.settings.json 文件之前,请务必保存它。

如果本地文件已加密,则会将其解密、发布,然后再次加密。 如果两个位置中的设置使用了有冲突的值,系统会提示你选择如何继续。

在“Azure: Functions”区域中,依次展开你的订阅、函数应用和“应用程序设置”,查看现有的应用设置。

 Screenshot for viewing function app settings in Visual Studio Code.

从 Azure 下载设置

如果已在 Azure 中创建应用程序设置,可以使用“Azure Functions:下载远程设置”命令将其下载到 local.settings.json 文件中。

与上传时一样,如果本地文件已加密,则会将其解密、更新,然后再次加密。 如果两个位置中的设置使用了有冲突的值,系统会提示你选择如何继续。

安装绑定扩展

绑定将在扩展包中实现,但 HTTP 和计时器触发器除外。

对于需要扩展包的触发器和绑定,必须显式安装这些包。 所安装的特定包取决于项目的进程模型。

在终端窗口中运行 dotnet add package 命令,在项目中安装所需的扩展包。 此模板演示了如何为独立进程类库添加绑定:

dotnet add package Microsoft.Azure.Functions.Worker.Extensions.<BINDING_TYPE_NAME> --version <TARGET_VERSION>

<BINDING_TYPE_NAME> 替换为包含所需绑定的包的名称。 可以在支持的绑定列表中找到所需的绑定参考文章。

将示例中的 <TARGET_VERSION> 替换为特定包版本,例如 3.0.0-beta5。 在 NuGet.org 上的单个包页上列出了有效版本。面向该绑定的参考文章中指定了与当前 Functions 运行时对应的主版本。

C# 脚本使用扩展捆绑包

安装绑定扩展的最简单方法是启用扩展捆绑包。 启用捆绑包时,会自动安装一组预定义的扩展包。

若要启用扩展捆绑包,请打开 host.json 文件并更新其内容以匹配以下代码:

{
    "version": "2.0",
    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[2.*, 3.0.0)"
    }
}

如果出于某种原因无法使用扩展捆绑包来安装项目的绑定扩展,请参阅显式安装扩展

监视函数

本地运行函数时,日志数据将流式传输到终端控制台。 当 Functions 项目在 Azure 中的函数应用内运行时,也可以获取日志数据。 可以连接到 Azure 中的流日志,以查看准实时的日志数据。 应启用 Application Insights 以更全面地了解函数应用的行为方式。

流式处理日志

开发应用程序时,以近乎实时的方式查看日志记录信息通常很有用。 可以查看函数正在生成的日志文件流。 以下输出是对 HTTP 触发的函数发出请求后生成的流日志示例:

Screenshot for streaming logs output for H T T P trigger.

有关详细信息,请参阅流日志

Application Insights

应通过将函数应用与 Application Insights 集成来监视函数的执行。 在 Azure 门户中创建函数应用时,默认情况下会完成此集成。 在 Visual Studio 发布期间创建函数应用时,需要自己集成 Application Insights。 若要了解如何操作,请参阅启用 Application Insights 集成

若要详细了解如何使用 Application Insights 进行监视,请参阅监视 Azure Functions

在 Visual Studio 代码中启用仿真

为终端配置了 Rosetta 以运行 x86 仿真进行 Python 开发后,可以使用以下步骤将此终端仿真与 Visual Studio Code 集成:

  1. 按 Cmd+Shift+P 打开命令面板,选择“首选项:打开设置 (JSON)”,并将以下 JSON 添加到配置:

    "terminal.integrated.profiles.osx": {
           "rosetta": {
             "path": "arch",
             "args": ["-x86_64", "zsh", "-l"],
             "overrideName": true
           }
         }
    
  2. 打开新终端并选择 rosetta。

    Screenshot of starting a new Rosetta terminal in Visual Studio Code.

C# 脚本项目

默认情况下,所有 C# 项目创建为 C# 编译的类库项目。 如果你偏好使用 C# 脚本项目,则必须在 Azure Functions 扩展设置中选择 C# 脚本作为默认语言。

  1. 选择“文件”>“首选项”>“设置”。

  2. 转到“用户设置”>“扩展”>“Azure Functions”。

  3. 选择“C#Script”:“Azure Functions: 选择“C# 脚本”。

完成这些步骤后,对底层 Core Tools 发出的调用包含 --csx 选项,该选项会生成并发布 C# 脚本 (.csx) 项目文件。 如果指定了此默认语言,创建的所有项目将默认为 C# 脚本项目。 如果设置了默认值,则系统不会提示你选择项目语言。 若要以其他语言创建项目,必须更改此设置,或者将其从用户的 settings.json 文件中删除。 删除此设置后,在创建项目时,系统会再次提示你选择语言。

命令面板参考

Azure Functions 扩展在区域提供一个有用的图形界面,用于与 Azure 中的函数应用交互。 命令面板 (F1) 中的命令也具有相同的功能。 以下 Azure Functions 命令可用:

Azure Functions 命令 说明
添加新设置 在 Azure 中创建新的应用程序设置。 有关详细信息,请参阅发布应用程序设置。 可能还需要将此设置下载到本地设置
配置部署源 将 Azure 中的函数应用连接到本地 Git 存储库。
连接到 GitHub 存储库 将函数应用连接到 GitHub 存储库。
复制函数 URL 获取 Azure 中运行的 HTTP 触发函数的远程 URL。 有关详细信息,请参阅获取已部署的函数的 URL
在 Azure 中创建函数应用 在 Azure 中的订阅内创建新的函数应用。 有关详细信息,请参阅有关如何发布到 Azure 中的新函数应用的部分。
解密设置 解密已由以下命令加密的本地设置:“Azure Functions:加密设置”。
删除函数应用 从 Azure 中的订阅内删除函数应用。 如果应用服务计划中没有其他应用,则系统也会提供用于删除其他应用的选项。 不会删除其他资源,例如存储帐户和资源组。 若要删除所有资源,应删除资源组。 本地项目不受影响。
删除函数 从 Azure 中的函数应用内删除现有的函数。 由于此删除操作不会影响本地项目,因此请考虑在本地删除函数,然后重新发布项目
删除代理 从 Azure 中的函数应用内删除 Azure Functions 代理。 有关代理的详细信息,请参阅使用 Azure Functions 代理
删除设置 删除 Azure 中的函数应用设置。 此操作不影响 local.settings.json 文件中的设置。
从存储库断开连接 删除 Azure 中的函数应用与源代码管理存储库之间的连续部署连接。
下载远程设置 将 Azure 中所选函数应用的设置下载到 local.settings.json 文件中。 如果本地文件已加密,则会将其解密、更新,然后再次加密。 如果两个位置中的设置使用了有冲突的值,系统会提示你选择如何继续。 在运行此命令之前,请确保已保存对 local.settings.json 文件所做的更改。
编辑设置 更改 Azure 中现有函数应用设置的值。 此命令不影响 local.settings.json 文件中的设置。
加密设置 加密本地设置Values 数组内的单个项。 在此文件中,IsEncrypted 也会设置为 true,这指定本地运行时先将设置解密,然后再使用设置。 加密本地设置可以减少泄露重要信息的风险。 在 Azure 中,应用程序设置始终以加密的形式进行存储。
立即执行函数 使用管理员 API 手动启动函数。 此命令用于在调试过程中和针对 Azure 中运行的函数的本地测试。 当 Azure 中的某个函数启动时,扩展首先会自动获得管理密钥,此密钥用于调用在 Azure 中启动函数的远程管理员 API。 发送到 API 的消息正文取决于触发器的类型。 计时器触发器不需要传递任何数据。
初始化项目以便与 VS Code 配合使用 将所需的 Visual Studio Code 项目文件添加到现有的 Functions 项目。 运行此命令可以使用 Core Tools 处理创建的项目。
安装或更新 Azure Functions Core Tools 安装或更新用于在本地运行函数的 Azure Functions Core Tools
重新部署 用于将项目文件从连接的 Git 存储库重新部署到 Azure 中的特定部署。 若要从 Visual Studio Code 重新发布本地更新,请重新发布项目
重命名设置 更改 Azure 中现有函数应用设置的键名。 此命令不影响 local.settings.json 文件中的设置。 重命名 Azure 中的设置后,应将这些更改下载到本地项目
重启 重启 Azure 中的函数应用。 部署更新也会重启函数应用。
设置 AzureWebJobsStorage 设置 AzureWebJobsStorage 应用程序设置的值。 Azure Functions 需要此设置。 此设置是在 Azure 中创建函数应用时指定的。
启动 启动 Azure 中已停止的函数应用。
启动流日志 启动 Azure 中函数应用的流日志。 在 Azure 中进行远程故障排除期间,如果需要近实时查看日志信息,可以使用流日志。 有关详细信息,请参阅流日志
停止 停止 Azure 中运行的函数应用。
停止流日志 停止 Azure 中函数应用的流日志。
切换为槽设置 启用后,请确保保留给定部署槽的应用程序设置。
卸载 Azure Functions Core Tools 删除扩展所需的 Azure Functions Core Tools。
上传本地设置 将 local.settings.json 文件中的设置上传到 Azure 中所选的函数应用。 如果本地文件已加密,则会将其解密、上传,然后再次加密。 如果两个位置中的设置使用了有冲突的值,系统会提示你选择如何继续。 在运行此命令之前,请确保已保存对 local.settings.json 文件所做的更改。
在 GitHub 中查看提交内容 在函数应用已连接到存储库后,显示特定部署中的最新提交内容。
查看部署日志 显示 Azure 中函数应用的特定部署的日志。

后续步骤

有关 Azure Functions Core Tools 的详细信息,请参阅使用 Azure Functions Core Tools

若要了解有关以 .NET 类库开发函数的详细信息,请参阅 Azure Functions C# 开发人员参考。 本文还提供了示例链接来说明如何使用属性声明 Azure Functions 支持的各种类型的绑定。