练习 - 使用 Core Tools 在本地创建函数

已完成

Azure Functions Core Tools 可让你通过以下方式在自己的计算机上本地开发函数:

  • 创建函数项目所需的文件和文件夹。
  • 提供从项目的根目录本地运行的 Functions 主机。

你决定开发一个计算单利的函数,开始使用 Azure Functions 在本地工作。 最终,你可以创建更复杂的函数,这些函数协同工作,并调用其他服务和数据库。 使用 Core Tools 构建执行基本贷款计算的函数是一个很好的开端。 在将函数发布到 Azure 之前,你还需要先尝试在自己的计算机上运行该函数。 可使用 Core Tools 从 Azure Cloud Shell 执行此操作。

Azure Cloud Shell 附带有 Core Tools 和 Azure CLI,还有一个可用于编写代码的编辑器。 在继续之前,请确保选择上面的“激活沙盒”。

创建本地 Azure Functions 项目

在本练习中,使用 Cloud Shell 使用 Core Tools 开发你的第一个 JavaScript 函数。 Cloud Shell 已经安装了正确版本的 Core Tools 和 Node.js。

  1. 在根文件夹中,运行 func init 以在新的 loan-wizard 文件夹中创建一个函数项目。

    func init loan-wizard
    
  2. 当系统提示选择辅助角色运行时时,输入 3(表示“节点”)。

  3. 当系统提示选择语言时,输入 1(表示“javascript”)。

    输出列出了要写入到磁盘的文件,包括这些文件:

    • host.json 同时支持适用于运行时实例与特定触发器和绑定类型的应用级配置。
    • local.settings.json 设置仅限局部的行为和应用程序设置(局部环境变量)。
    • package.json 是特定于 JavaScript 的文件,可跟踪在代码中安装和使用的所有包。
    • .gitignore 和 extensions.json 是分别由 Git 版本控制工具和 Visual Studio Code 使用的配置文件。 现在可以忽略这些文件。

创建 HTTP 触发的函数

现在该创建函数了!

  1. 在 Cloud Shell 中,导航到新的 loan-wizard 目录。

    cd ~/loan-wizard
    
  2. 运行 func new 以启动函数创建向导。

    func new
    
  3. 当系统提示选择模板时,输入 7(表示“HTTP 触发器”)。

  4. 当系统提示提供 HTTP 触发器的函数名称时,输入 simple-interest

  5. 运行以下命令以打开 Cloud Shell 编辑器。

    code .
    

    Screenshot showing the simple-interest folder with the function.json file open in Cloud Shell code editor.

    该向导在 src/functions 下创建一个名为 simple-interest.js 的函数项目,其中包含默认模板内容。 此代码支持 Azure Functions 的 Node.js v4 编程模型。 现在,请花点时间使用编辑器浏览项目文件。 屏幕截图显示了展开的文件夹,其中在编辑器中打开了 simple-interest.js。

实现单利函数

Core Tools 在 simple-interest.js 中创建的默认函数实现在查询字符串或入站 HTTP 请求的正文中查找名为 name 的输入,并返回字符串 Hello, [name] 这是一个有关如何使用 HTTP 触发器的好示例,但你希望将该代码替换为根据 3 个输入参数计算单利的代码。

  1. 在编辑器的“文件”窗格中,展开“源”>“函数”文件夹,然后选择 simple-interest.js 以在编辑器中打开该文件。

  2. 将 simple-interest.js 的全部内容替换为以下代码:

    const { app } = require('@azure/functions');
    
    app.http('simple-interest', {
        methods: ['GET','POST'],
        authLevel: 'anonymous',
        handler: async (request, context) => {
            const principal = parseFloat(request.query.get('principal'));
            const rate = parseFloat(request.query.get('rate'));
            const term = parseFloat(request.query.get('term'));
    
          if ([principal, rate, term].some(isNaN)) {
            // If any empty or non-numeric values, return a 400 response with an
            // error message
            return {
              status: 400,
              body: "Please supply principal, rate and term in the query string"
            };
          } else {
            // Otherwise set the response body to the product of the three values
            return { body: principal * rate * term };
          }
        }
    });
    

    此脚本查找 HTTP 请求的查询字符串中名为 principalrateterm 的参数。 然后,它返回单利计算 (principal * rate * term) 的结果。

  3. Ctrl+S 保存文件,然后按 Ctrl+Q 关闭编辑器。

在 Cloud Shell 中运行函数

为了在本地运行新函数来进行试用,我们将使用 func start 在后台进程中启动 Functions 运行时 (func.exe),以便可以在它运行的同时使用命令行。 然后,将使用命令行工具 curl 与函数进行交互。

如果你从自己的计算机使用 Core Tools,只需从另一个终端窗口或 Web 浏览器使用 curl 即可。 Core Tools 生成的输出在第一个终端窗口中实时显示。 在 Cloud Shell 中,你只能使用单个终端,因此需要在后台进程中运行 Core Tools (func.exe)。

  1. 运行以下命令,在后台以无提示方式启动 Functions 主机。

    func start &> ~/output.txt &
    

    func new 一样,Cloud Shell 应仍位于 loan-wizard 目录中。

    Functions 主机现在正在将其输出写入到文件 ~/output.txt 中。 在该函数运行的同时,你可以继续使用命令行。

    使用 ps 命令验证 func 进程是否正在运行。

  2. 输入以下命令以查看输出日志。

    code ~/output.txt
    

    在输出中,你将看到一条消息,它列出 Functions: simple-interest: 可作为 GET 和 POST HTTP 请求 http://localhost:7071/api/simple-interest 提供。

    注意

    如果看到错误消息,请选择 Ctrl+C 以停止主机。 请确保你的代码文件的内容与示例相同。

    此 localhost URL 不会发布到 Web,只能从 Cloud Shell 会话中运行的工具访问。

  3. 通过选择 Ctrl+Q 以关闭编辑器。

  4. 运行以下命令,将 HTTP GET 请求发送到在本地运行的函数。

    curl "http://localhost:7071/api/simple-interest" -w "\n"
    

    Please supply principal, rate and term in the query string 输出表明函数已成功调用,并且能够返回响应,但你不是按预期方式调用它。 你需要在 HTTP 请求中提供参数。

  5. 再次调用该函数。 这次,为每个查询字符串参数提供一个值。

    curl "http://localhost:7071/api/simple-interest?principal=5000&rate=.035&term=36" -w "\n"
    

    这一次,输出为 6300。 函数的运行符合预期!

  6. 输入以下命令,再次查看输出日志。

    code ~/output.txt
    

    启动日志条目后,每次通过 curl 调用该函数时,都会追加一组带时间戳的日志条目:

    [2024-02-20T06:25:56.700Z] Executing 'Functions.simple-interest' (Reason='This function was programmatically called via the host APIs.', Id=5daf20c3-f204-41bb-a5b9-021acaf17c04)
    [2024-02-20T06:25:56.893Z] Executed 'Functions.simple-interest' (Succeeded, Id=5daf20c3-f204-41bb-a5b9-021acaf17c04, Duration=228ms)
    
    
  7. 通过选择 Ctrl+Q 以关闭编辑器。