Azure Functions 提供无服务器代码基础结构,使你能够创建响应式按需 HTTP 终结点。 无服务器应用由 JavaScript 或 TypeScript 代码组成,这些代码为响应各种事件而运行。

函数提供:

  • Web 服务的抽象 - 你专注于代码,而不是基础结构。

  • 与 Azure 服务集成 - 使用事件触发进出 Azure 服务的工作

  • 与 JavaScript 包集成 - 将常用的 npm 包与无服务器代码配合使用

  • Azure 无服务器社区示例库

    什么是 Function 资源?

    Azure Function 资源是一个 Azure 地理位置中所有相关函数的逻辑单元。 资源可以包含单个函数或多个函数,这些函数可以相互独立,也可以与输入或输出绑定相关。 可以从多个常用函数中进行选择,也可以创建自己的函数。

    函数资源设置包含常用的无服务器配置,包括环境变量、身份验证、日志记录和 CORS。

    持久有状态函数

    Durable Functions 在 Azure 中保留状态或管理长期运行的函数。 使用 JavaScript 创建你的第一个持久函数

    静态 Web 应用包括函数

    开发静态前端客户端应用程序(如 Angular、React 或 Vue)时(也需要无服务器 API),请配合使用 静态 Web 应用 和函数,以将两者捆绑在一起。

    从客户端应用到 API 的代理

    如果打算使用静态 Web 应用部署 API,则无需代理客户端应用程序的 API 调用。 已为你建立代理,包括本地和远程开发。

    使用静态 Web 应用在本地开发并Azure Functions时, Azure 静态 Web 应用 CLI 提供本地代理。

    需要为 Azure 函数配置的常见安全设置

    要确保 Azure 函数安全,应配置下列常见设置:

  • 配置设置 - 为不会影响安全性的设置创建应用程序设置。
  • 机密和密钥 - 对于影响安全性的任何设置,请创建 Azure 密钥保管库 并从 密钥保管库拉取这些设置
  • 平台设置上的 FTP 状态 - 默认全部允许。 需要选择“仅限 FTP”或完全禁用 FTP 来提高安全性。
  • API CORS - 配置客户端域。 不要使用 * 指示所有域的 。
  • HTTPS 的 TLS/SSL 设置 - API 默认接受 HTTP 和 HTTPS 请求。 在 TLS/SSL 设置中启用“仅限 HTTPS” 。 由于函数应用托管在安全子域上,因此可以立即将其 () https ,并延迟购买域名,并在准备就绪之前为域使用证书。
  • 部署槽位 - 创建一个部署槽位(例如 stage preflight ),并推送到该槽位。 准备就绪后,将此阶段槽交换到生产环境。 不要养成手动推送到生产的习惯。 基本代码应该能够指示槽位上的版本或提交。
  • 开发Azure Functions的先决条件

  • Node.js LTS
  • Azure Functions Core Tools
  • 用于 HTTP 请求的简单 JavaScript 函数

    函数是含有请求和上下文信息的导出异步函数。 Azure 门户的以下部分屏幕截图显示了函数代码。

    v4 TypeScript (预览) v4 JavaScript (预览版) v3 TypeScript v3 JavaScript
    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
    async function status(request, context) {
        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
    module.exports = status
    
    import { AzureFunction, Context, HttpRequest } from "@azure/functions"
    const httpTrigger: AzureFunction = async function (context: Context, req: HttpRequest): Promise<void> {
        context.log('HTTP trigger function processed a request.');
        context.res = {
            // status: 200, /* Defaults to 200 */
            body: process.env
    export default httpTrigger;
    

    Azure 函数定义文件:

    "bindings": [ "authLevel": "anonymous", "type": "httpTrigger", "direction": "in", "name": "req", "methods": [ "get", "post" "type": "http", "direction": "out", "name": "res" "scriptFile": "../dist/status/index.js"

    Azure 函数代码文件:

    module.exports = async function (context, req) {
        context.log('JavaScript HTTP trigger function processed a request.');
        context.res = {
            // status: 200, /* Defaults to 200 */
            body: process.env
    

    Azure 函数定义文件:

    "bindings": [ "authLevel": "anonymous", "type": "httpTrigger", "direction": "in", "name": "req", "methods": [ "get", "post" "type": "http", "direction": "out", "name": "res"

    使用 Visual Studio Code 和扩展在本地开发函数

    使用 Visual Studio Code 创建第一个函数。 Visual Studio Code 通过 Azure Functions 扩展简化了许多细节。

    此扩展有助于使用常用模板创建 JavaScript 和 TypeScript 函数。

    与其他 Azure 服务集成

    无服务器函数消除了许多服务器配置和管理,因此你可以只关注所需的代码。

  • 低代码函数:借助 Azure Functions,可以创建由其他 Azure 服务触发的函数,或者使用触发器绑定输出到其他 Azure 服务的函数。
  • 高代码函数:若要进行更多控制,请使用 Azure SDK 协调和控制其他 Azure 服务。
  • Azure Functions JavaScript 开发人员指南是不错的着手点。

    使用 Learn 模块了解如何使用 Azure 函数和SignalR 服务在 Web 应用中启用自动更新

  • 在计时器上运行代码
  • 当文件上传到 Azure Blob 存储中或在 Azure Blob 存储中更新时运行代码
  • 在消息写入 Azure 队列存储时运行代码
  • 使用 Azure Functions 和 Azure Cosmos DB 存储非结构化数据
  • Node.js + Azure Functions 示例
  •