你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:使用 Azure 应用程序配置创建 Azure Functions 应用

在本快速入门中,你会将 Azure 应用程序配置服务合并到 Azure Functions 应用中,以集中存储和管理与代码分离的所有应用程序设置。

先决条件

创建应用配置存储区

  1. 若要创建新应用程序配置存储区,请登录 Azure 门户

  2. 在主页的左上角,选择“创建资源” 。

  3. 在“搜索服务和市场”框中,输入“应用程序配置”,然后选择 Enter

    显示“搜索应用程序配置”页面的屏幕截图。

  4. 在搜索结果中选择“应用程序配置”,然后选择“创建” 。

    显示“创建”页面的屏幕截图。

  5. 在“创建应用配置”窗格中,输入以下设置:

    设置 建议的值 说明
    订阅 订阅 选择要用来测试应用配置的 Azure 订阅。 如果帐户只有一个订阅,则会自动选择该订阅并且不显示“订阅”列表 。
    资源组 AppConfigTestResources 为应用程序配置存储区资源选择或创建资源组。 此组可用于组织多个资源,删除该资源组可以同时删除这些资源。 有关详细信息,请参阅使用资源组管理 Azure 资源
    资源名称 全局唯一名称 输入要用于应用程序配置存储区资源的唯一资源名称。 该名称必须是包含 5 到 50 个字符的字符串,只能包含数字、字母和 - 字符。 该名称的开头或末尾不能是 - 字符。
    位置 美国中部 使用“位置”指定在其中托管应用配置存储区的地理位置 。 为获得最佳性能,请在应用程序的其他组件所在的同一区域创建资源。
    定价层 免费 选择所需的定价层。 有关详细信息,请参阅应用配置定价页
  6. 选择“查看 + 创建”以验证自己的设置 。

  7. 选择“创建”。 部署可能需要几分钟。

  8. 部署完成后,转到“应用程序配置”资源。 选择“设置”“访问密钥”。 记下只读主密钥连接字符串。 稍后将使用此连接字符串来配置应用程序,以与创建的应用程序配置存储区进行通信。

  1. 选择“配置资源管理器”>“+ 创建”>“键-值”来添加以下键值对 :

    密钥
    TestApp:Settings:Message Azure 应用配置的数据

    暂时将“标签”和“内容类型”保留为空 。

  2. 选择“应用”。

创建 Functions 应用

Visual Studio 中的 Azure Functions 项目模板创建了一个 C# 类库项目,该项目可发布到 Azure 中的函数应用。 可使用函数应用将函数分组为逻辑单元,以便更轻松地管理、部署、缩放和共享资源。

  1. 在 Visual Studio 菜单中,选择“文件”>“新建”>“项目”。

  2. 在“创建新项目”中,在搜索框中输入“functions”,选择“Azure Functions”模板,然后选择“下一步”。

  3. 在“配置新项目”中,输入项目的“项目名称”,然后选择“创建”。 函数应用名称必须可以充当 C# 命名空间,因此请勿使用下划线、连字符或任何其他的非字母数字字符。

  4. 对于“创建新的 Azure Functions 应用程序”设置,请使用下表中的值:

    设置 说明
    .NET 版本 .NET 6 此值会创建一个函数项目,该项目在进程内使用 Azure Functions 运行时版本 4.x 运行。 Azure Functions 1.x 支持 .NET Framework。 有关详细信息,请参阅 Azure Functions 运行时版本概述
    函数模板 HTTP 触发器 此值会创建由 HTTP 请求触发的函数。
    存储帐户(AzureWebJobsStorage) 存储模拟器 由于 Azure 中的函数应用需要存储帐户,因此在将项目发布到 Azure 时会分配或创建一个存储帐户。 HTTP 触发器不使用 Azure 存储帐户连接字符串;所有其他触发器类型需要有效的 Azure 存储帐户连接字符串。
    授权级别 匿名 在未提供密钥的情况下,任何客户端都可以触发创建的函数。 通过此授权设置可以轻松测试新函数。 有关密钥和授权的详细信息,请参阅授权密钥HTTP 和 Webhook 绑定

    Azure Functions 项目设置

    请确保将“授权级别”设置为“匿名”。 如果选择默认级别的函数,需要在请求中提供函数密钥才能访问函数终结点。

  5. 选择“创建”以创建函数项目和 HTTP 触发器函数。

连接到应用程序配置存储区

此项目将使用 .NET Azure Functions 中的依赖项注入,并将 Azure 应用程序配置添加为额外的配置源。 Azure Functions 支持运行进程内独立进程。 选择符合要求的项。

  1. 右键单击项目,然后选择“管理 NuGet 包” 。 在“浏览”选项卡中,搜索以下 NuGet 包并将其添加到项目中。

  2. 添加代码以连接到 Azure 应用程序配置。

    使用以下代码添加新文件 Startup.cs。 它定义了一个名为 Startup 的类,该类实现了 FunctionsStartup 抽象类。 程序集属性用于指定 Azure Functions 启动期间使用的类型名称。

    重写 ConfigureAppConfiguration 方法,并通过调用 AddAzureAppConfiguration() 将 Azure 应用程序配置提供程序添加为额外的配置源。 Configure 方法保留为空,因为此时无需注册任何服务。

    using System;
    using Microsoft.Azure.Functions.Extensions.DependencyInjection;
    using Microsoft.Extensions.Configuration;
    
    [assembly: FunctionsStartup(typeof(FunctionApp.Startup))]
    
    namespace FunctionApp
    {
        class Startup : FunctionsStartup
        {
            public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
            {
                string cs = Environment.GetEnvironmentVariable("ConnectionString");
                builder.ConfigurationBuilder.AddAzureAppConfiguration(cs);
            }
    
            public override void Configure(IFunctionsHostBuilder builder)
            {
            }
        }
    }
    
  3. 打开 Function1.cs,并添加以下命名空间(如果尚不存在)。

    using Microsoft.Extensions.Configuration;
    

    添加或更新用于通过依赖项注入获得 IConfiguration 实例的构造函数。

    private readonly IConfiguration _configuration;
    
    public Function1(IConfiguration configuration)
    {
        _configuration = configuration;
    }
    
  4. 更新 Run 方法以从配置中读取值。

    [FunctionName("Function1")]
    public async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");
    
        // Read configuration data
        string keyName = "TestApp:Settings:Message";
        string message = _configuration[keyName];
    
        return message != null
            ? (ActionResult)new OkObjectResult(message)
            : new BadRequestObjectResult($"Please create a key-value with the key '{keyName}' in App Configuration.");
    }
    

    注意

    Function1 类和 Run 方法不应是静态的。 如果已自动生成 static 修饰符,请将其删除。

在本地测试函数

  1. 设置名为“ConnectionString”的环境变量,并将其设置为应用程序配置存储区的访问密钥。 如果使用 Windows 命令提示符,则请运行以下命令并重启命令提示符,这样更改才会生效:

        setx ConnectionString "connection-string-of-your-app-configuration-store"
    

    如果使用 Windows PowerShell,请运行以下命令:

        $Env:ConnectionString = "connection-string-of-your-app-configuration-store"
    

    如果使用 macOS 或 Linux,则请运行以下命令:

        export ConnectionString='connection-string-of-your-app-configuration-store'
    
  2. 按 F5 测试函数。 如果系统提示,请按 Visual Studio 的请求下载和安装 Azure Functions Core (CLI) 工具。 你还需要启用防火墙例外,这样工具才能处理 HTTP 请求。

  3. 从 Azure Functions 运行时输出复制函数的 URL。

    在 VS 中的函数调试快速入门

  4. 将 HTTP 请求的 URL 粘贴到浏览器的地址栏。 下图显示了浏览器中函数返回的本地 GET 请求的响应。

    本地函数启动快速入门

清理资源

如果不想继续使用本文中创建的资源,请删除此处创建的资源组以避免产生费用。

重要

删除资源组的操作不可逆。 将永久删除资源组以及其中的所有资源。 请确保不要意外删除错误的资源组或资源。 如果在包含要保留的其他资源的资源组中创建了本文的资源,请从相应的窗格中单独删除每个资源,而不是删除该资源组。

  1. 登录到 Azure 门户,然后选择“资源组”。
  2. 在“按名称筛选”框中,输入资源组的名称
  3. 在结果列表中,选择资源组名称以查看概述。
  4. 选择“删除资源组”。
  5. 系统会要求确认是否删除资源组。 重新键入资源组的名称进行确认,然后选择“删除” 。

片刻之后,将会删除该资源组及其所有资源。

后续步骤

在本快速入门中,你创建了一个新的应用程序配置存储区,并通过应用程序配置提供程序将其用于 Azure Functions 应用。 若要了解如何更新 Azure Functions 应用以动态刷新配置,请继续学习下一个教程。

若要了解如何使用 Azure 托管标识来简化对应用程序配置的访问,请继续学习下一篇教程。