练习 - 使用 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。
在根文件夹中,运行
func init
以在新的loan-wizard
文件夹中创建一个函数项目。func init loan-wizard
当系统提示选择辅助角色运行时时,输入 3(表示“节点”)。
当系统提示选择语言时,输入 1(表示“javascript”)。
输出列出了要写入到磁盘的文件,包括这些文件:
- host.json 同时支持适用于运行时实例与特定触发器和绑定类型的应用级配置。
- local.settings.json 设置仅限局部的行为和应用程序设置(局部环境变量)。
- package.json 是特定于 JavaScript 的文件,可跟踪在代码中安装和使用的所有包。
- .gitignore 和 extensions.json 是分别由 Git 版本控制工具和 Visual Studio Code 使用的配置文件。 现在可以忽略这些文件。
创建 HTTP 触发的函数
现在该创建函数了!
在 Cloud Shell 中,导航到新的
loan-wizard
目录。cd ~/loan-wizard
运行
func new
以启动函数创建向导。func new
当系统提示选择模板时,输入 7(表示“HTTP 触发器”)。
当系统提示提供 HTTP 触发器的函数名称时,输入
simple-interest
。运行以下命令以打开 Cloud Shell 编辑器。
code .
该向导在
src/functions
下创建一个名为 simple-interest.js 的函数项目,其中包含默认模板内容。 此代码支持 Azure Functions 的 Node.js v4 编程模型。 现在,请花点时间使用编辑器浏览项目文件。 屏幕截图显示了展开的文件夹,其中在编辑器中打开了 simple-interest.js。
实现单利函数
Core Tools 在 simple-interest.js 中创建的默认函数实现在查询字符串或入站 HTTP 请求的正文中查找名为 name
的输入,并返回字符串 Hello, [name]
。 这是一个有关如何使用 HTTP 触发器的好示例,但你希望将该代码替换为根据 3 个输入参数计算单利的代码。
在编辑器的“文件”窗格中,展开“源”>“函数”文件夹,然后选择 simple-interest.js 以在编辑器中打开该文件。
将 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 请求的查询字符串中名为
principal
、rate
和term
的参数。 然后,它返回单利计算 (principal * rate * term
) 的结果。按 Ctrl+S 保存文件,然后按 Ctrl+Q 关闭编辑器。
在 Cloud Shell 中运行函数
为了在本地运行新函数来进行试用,我们将使用 func start
在后台进程中启动 Functions 运行时 (func.exe),以便可以在它运行的同时使用命令行。 然后,将使用命令行工具 curl
与函数进行交互。
如果你从自己的计算机使用 Core Tools,只需从另一个终端窗口或 Web 浏览器使用 curl
即可。 Core Tools 生成的输出在第一个终端窗口中实时显示。 在 Cloud Shell 中,你只能使用单个终端,因此需要在后台进程中运行 Core Tools (func.exe)。
运行以下命令,在后台以无提示方式启动 Functions 主机。
func start &> ~/output.txt &
与
func new
一样,Cloud Shell 应仍位于loan-wizard
目录中。Functions 主机现在正在将其输出写入到文件 ~/output.txt 中。 在该函数运行的同时,你可以继续使用命令行。
使用
ps
命令验证func
进程是否正在运行。输入以下命令以查看输出日志。
code ~/output.txt
在输出中,你将看到一条消息,它列出
Functions: simple-interest:
可作为 GET 和 POST HTTP 请求http://localhost:7071/api/simple-interest
提供。注意
如果看到错误消息,请选择 Ctrl+C 以停止主机。 请确保你的代码文件的内容与示例相同。
此 localhost URL 不会发布到 Web,只能从 Cloud Shell 会话中运行的工具访问。
通过选择 Ctrl+Q 以关闭编辑器。
运行以下命令,将 HTTP GET 请求发送到在本地运行的函数。
curl "http://localhost:7071/api/simple-interest" -w "\n"
Please supply principal, rate and term in the query string
输出表明函数已成功调用,并且能够返回响应,但你不是按预期方式调用它。 你需要在 HTTP 请求中提供参数。再次调用该函数。 这次,为每个查询字符串参数提供一个值。
curl "http://localhost:7071/api/simple-interest?principal=5000&rate=.035&term=36" -w "\n"
这一次,输出为
6300
。 函数的运行符合预期!输入以下命令,再次查看输出日志。
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)
通过选择 Ctrl+Q 以关闭编辑器。