Azure Functions 提供功能强大的无服务器基础结构,使你能够轻松开发可缩放的按需 HTTP 终结点。 通过使用 JavaScript 或 TypeScript,可以创建响应各种事件的无服务器应用程序,使你能够专注于编写代码,而无需担心管理服务器。 本指南可帮助你开始使用 Azure Functions 开发无服务器 Node.js 应用,并与其他 Azure 服务无缝集成。
什么是 Function 资源?
Azure Function 资源是一个 Azure 地理位置中所有相关函数的逻辑单元。 资源可以包含单个函数或多个函数,这些函数可以彼此独立,也可以与输入或输出绑定相关。 可以从多个常用函数中进行选择,也可以创建自己的函数。
函数资源设置包含常用的无服务器配置,包括环境变量、身份验证、日志记录和 CORS。
持久有状态函数
Durable Functions 在 Azure 中保留状态或管理长期运行的函数。 使用 JavaScript 创建你的第一个持久函数。
静态 Web 应用包括函数
开发静态前端客户端应用程序(如 Angular、React 或 Vue)时,如果还需要无服务器 API,可以使用 静态 Web 应用,将两者与函数一起打包。
从客户端应用到 API 的代理
如果打算使用静态 Web 应用部署 API,则无需代理客户端应用程序的 API 调用。 部署 Azure Functions 应用为托管应用时,系统会为您建立一个代理。
使用静态 Web 应用和 Azure Functions 在本地开发时, Azure 静态 Web 应用 CLI 提供本地代理。
需要为 Azure 函数配置的常见安全设置
要确保 Azure 函数安全,应配置下列常见设置:
-
身份验证和授权:
- 使用 Microsoft Entra ID (以前为 Azure Active Directory)进行可靠的身份验证。 配置您的函数应用,以要求在生产环境中使用 OAuth2 令牌进行工作负载处理。
- 避免对敏感应用程序使用函数键。 相反,可以集成 Microsoft Entra ID,或者在函数代码中验证 JWT 令牌。
- 使用 托管标识 通过其他 Azure 资源对函数应用进行身份验证,确保每个函数仅获取所需的访问权限。
-
配置设置:
- 应用程序设置 - 为不影响安全性的设置创建应用程序设置。
- 机密和密钥 - 对于影响安全性的任何设置,请使用此分层方法:
- 首先,在受支持的身份验证中使用 Microsoft Entra ID 。
- 对于不支持 Entra ID 的集成,请将机密存储在 Azure Key Vault 中, 并从 Key Vault 拉取这些设置。
- 切勿在代码或配置文件中嵌入机密。
- 有关其他平台安全设置,请参阅 保护 Azure Functions。
-
网络安全:
- CORS - 配置客户端域。 请勿使用
*,指示所有域。 - 虚拟网络集成 - 使用专用终结点或虚拟网络集成来限制网络公开,并限制来自受信任源的入站流量。
- CORS - 配置客户端域。 请勿使用
-
HTTPS 和加密:
- HTTPS 的 TLS/SSL 设置 - API 默认接受 HTTP 和 HTTPS 请求。 在 TLS/SSL 设置中启用“仅限 HTTPS”。 由于函数应用托管在安全子域上,因此可以立即使用它(带有
https)并延迟购买域名,并使用域的证书,直到准备就绪。
- HTTPS 的 TLS/SSL 设置 - API 默认接受 HTTP 和 HTTPS 请求。 在 TLS/SSL 设置中启用“仅限 HTTPS”。 由于函数应用托管在安全子域上,因此可以立即使用它(带有
-
部署和监视:
- 部署槽位 - 创建一个部署槽位(例如
stage或preflight),并推送到该槽位。 准备就绪后,将此阶段槽交换到生产环境。 不要习惯手动推送到生产环境。 基本代码应该能够指示槽位上的版本或提交。 - 启用 Application Insights 进行实时遥测、警报和异常检测,以监视可疑活动的函数和审核日志。
- 部署槽位 - 创建一个部署槽位(例如
有关全面的安全指南,请参阅 保护 Azure Functions。
Azure Functions 的托管选项
可以根据要求以不同的方式托管 Azure Functions:
Azure Functions 资源托管计划
创建 Azure Functions 资源时,可以从以下托管计划中进行选择:
- 消耗计划:只需为函数运行自动缩放的时间付费。
- 弹性消耗计划:通过始终就绪的实例提供增强的控制,以减少冷启动、虚拟网络集成和可配置实例大小(512 MB 到 4 GB)。 对于需要企业安全性和性能功能的基于 Linux 的新工作负载,建议使用此计划。 请注意,此计划使用与消费计划类似的基于执行的计费方式,但对于诸如始终就绪实例之类的功能会产生额外费用。
- 高级计划:通过预热实例、虚拟网络连接和较长的执行持续时间提供增强的性能。
- 专用(应用服务)计划:在专用虚拟机上运行函数,以预测成本并完全控制运行时环境。
有关选择正确的托管计划的详细信息,请参阅 Azure Functions 托管选项。
Azure 容器应用资源
或者,可以将 Azure Functions 作为容器化工作负荷部署到 Azure 容器应用资源。 此选项可完全控制容器环境,在需要自定义依赖项、长时间运行的进程或希望将函数与其他容器化微服务组合时,这是理想的选择。 有关详细信息,请参阅 Azure Functions 的 Azure 容器应用托管 。
开发 Azure Functions 的先决条件
- Node.js LTS - 使用最新的长期支持(LTS)版本,以获得最佳与 Azure Functions 的兼容性和安全更新。
- Azure Functions Core Tools - 使用当前主版本进行本地开发和调试。
用于 HTTP 请求的简单 JavaScript 函数
函数是含有请求和上下文信息的导出异步函数。 Azure 门户的以下部分屏幕截图显示了函数代码。
import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions";
export async function status(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
context.log(`Http function processed request for url "${request.url}"`);
return {
status: 200,
jsonBody: {
env: process.env
}
};
};
app.http('status', {
route: "status",
methods: ['GET'],
authLevel: 'anonymous',
handler: status
});
使用 Visual Studio Code 和扩展在本地开发函数
使用 Visual Studio Code 创建第一个函数。 Visual Studio Code 使用 Azure Functions 扩展简化了许多详细信息。
此扩展有助于使用常用模板创建 JavaScript 和 TypeScript 函数。
与其他 Azure 服务集成
无服务器函数消除了许多服务器配置和管理,因此你可以只关注所需的代码。
- 低代码函数:使用 Azure Functions 时,可以使用 触发器绑定创建由其他 Azure 服务触发的函数或输出到其他 Azure 服务的函数。 v4 编程模型直接在代码中注册所有触发器和绑定,使配置类型安全且直观。
- 高代码函数:若要进行更多控制,请使用 Azure SDK 协调和控制其他 Azure 服务。 使用 托管标识 通过其他 Azure 资源安全地对函数进行身份验证,而无需管理凭据。