19、高效部署 Azure 函数应用及配置管理指南

高效部署 Azure 函数应用及配置管理指南

在开发无服务器应用程序时,将代码部署到 Azure 并进行有效配置管理是至关重要的。本文将介绍几种部署 Azure 函数应用的方法,以及如何配置自定义域名、访问应用设置和使用代理拆分大型 API。

1. 使用 Run From Package 功能部署 Azure 函数

在部署 Azure 函数时,我们通常会将代码存放在 D:\home\site\wwwroot 文件夹中,可通过 Kudu 应用查看二进制文件。Kudu 是一个开源应用,可用于将二进制文件部署到应用服务、查看环境变量和应用服务主机上运行的进程,访问 URL 为 https://<<yourfunctionappname>>.scm.azurewebsites.net

Run From Package(以前称为 Run From Zip)是一种新的部署技术,它可以将默认位置更改为外部存储帐户,降低文件复制时的文件锁定风险。详细信息可参考: https://docs.microsoft.com/azure/azure-functions/run-functions-from-deployment-package

准备工作
1. 使用 Visual Studio 创建一个或多个 Azure 函数,例如一个 HTTP 触发器和一个计时器触发器。
2. 使用 Azure 门户创建一个以 .NET Core 为运行时堆栈的空函数应用。
3. 创建一个新的存储帐户或使用现有的存储帐户,用于上传包文件。

操作步骤
1. 在 Visual Studio 中点击“Publish”并选择一个文件夹,为应用程序创建一个包文件。
2. 导航到包含函数相关文件的 bin 文件夹,将这些文件压缩成一个 .zip 文件。
3. 创建一个具有私有访问权限的 Blob 容器,并将包文件从门户或使用 Azure Storage Explorer 上传到该容器。
4. 为 Blob 生成一个具有读取权限的共享访问签名(SAS)令牌,以便 Azure 函数运行时有权访问容器中的文件。可点击“Generate SAS”按钮生成 SAS 令牌,更多信息可参考: https://docs.microsoft.com/azure/storage/common/storage-sas-overview
5. 复制生成的带有 SAS 令牌的 URL。
6. 导航到函数应用的“Configuration”面板的“Application settings”,创建一个名为 WEBSITE_RUN_FROM_PACKAGE 的新应用设置,并将其值设置为上一步生成的 Blob SAS URL,然后点击“Save”保存更改。
7. 完成上述配置后,即可测试函数。

工作原理 :当 Azure 函数运行时发现名为 WEBSITE_RUN_FROM_PACKAGE 的应用设置时,它会从相应的存储帐户中查找包文件,动态下载文件并启动应用程序。

2. 使用 ARM 模板部署 Azure 函数

手动使用 Azure 门户配置 Azure 函数虽然简单,但存在一些缺点,例如难以查看服务更改历史记录,在大型项目中跨新环境复制基础架构困难等问题。为了解决这些挑战,最佳实践是使用 Azure 资源管理器(ARM)模板自动化基础架构配置过程。

ARM模板是基于 JSON 的文件,可以在其中定义要创建资源。可以将这些 ARM 模板添加到源代码控制存储库(如 Git)中,以便多个团队成员协作使用,并查看更改历史记录。

准备工作 :在编写 ARM 模板之前,需要了解 Azure函数依赖的其他 Azure 服务,创建函数应用时会自动创建这些服务:
- 应用服务计划 :可以是常规应用服务计划或消耗计划。
- 存储帐户 :Azure函数运行时使用存储帐户记录诊断信息,用于故障排除。
- Application Insights :可选。若不使用,需要在函数的应用设置中创建一个名为 AzureWebJobsDashboard 的应用设置,并使用 Azure 表存储服务记录诊断信息。

此外,还需要一个资源组,本文假设该资源组已经存在。

操作步骤 :使用 Visual Studio 编写 ARM 模板:
1. 创建一个新的项目,选择“Azure”,然后选择“Azure 资源组”。

graph LR
    A[开始创建项目] --> B[选择 Azure]
    B --> C[选择 Azure 资源组]
  1. 点击“Next”打开“Configure your new project”面板,并提供一个有意义的项目名称,然后点击“Create”创建项目。在“Select Azure Template”步骤中,选择“Azure QuickStart (github.com/Azure/azure - quickstart - templates)”模板。
  2. 搜索“function”,点击“101 - function - app - create - dynamic”模板创建具有消耗计划的 Azure 函数应用。
  3. Visual Studio 将创建所需的 JSON模板,详细的 JSON 内容可参考: https://docs.microsoft.com/azure/azure-functions/functions-infrastructure-as-code
  4. 部署 ARM 模板以配置函数应用及其依赖资源,可以通过右键单击项目名称,选择“Deploy” -> “New”进行部署操作步骤如下:
    • 选择订阅、资源组和其他参数以配置函数应用。
    • 选择所有必需字段,然后点击“Deploy”。

部署完成后,几分钟内即可开始部署,并配置 ARM JSON 模板中提到的每个资源。

优点
- 将配置存储在 JSON 文件中有助于开发人员将文件推送到版本控制系统(如 Git 或 TFS),以便维护文件版本并跟踪所有更改。
- 可以快速在不同环境中创建服务。
- 可以使用持续集成/持续部署(CI/CD)管道将基础架构配置过程自动化到多个环境。

使用自定义域名配置 Azure 函数

Azure 函数应用的默认 URL 使用 functionappname.azurewebsites.net 格式,客户可能希望使用自己的域名。实际上,是可以为函数应用配置自定义域名的。

准备工作
1. 使用任何域名注册商创建一个域名,也可以直接在“Custom Domains”面板中使用“Buy Domain”按钮从门户购买域名。
2. 使用域名注册商创建以下 DNS 记录:
- A 记录
- CName 记录

操作步骤
1. 导航到要配置域名的 Azure 函数应用的“Custom Domains”面板,记录 Azure 函数应用的 IP 地址和默认 URL。
2. 导航到“App Service Domain”。
3. 点击“Manage DNS records”按钮,进入 DNS 区域概述页面。
4. 点击“Record set”按钮添加一个新的 CName 记录,在“Alias”文本框中提供函数应用的默认 URL。
5. 添加 CName 记录后,导航到函数应用的“Custom Domains”面板,点击“Add custom domain”。
6. 在弹出的“Add custom domain”窗口中,输入要关联的自定义域名,然后点击“Validate”。
7. 验证通过后,在“Hostname record type”下拉菜单中选择“CName”,然后点击“Add custom domain”。
8. 完成上述步骤后,即可成功为函数应用配置自定义域名。
9. 打开一个新的浏览器标签,访问自定义域名,应该可以看到函数应用页面。

访问应用设置的技术

在应用程序中,通常会有一些配置项,不希望硬编码在代码中,而是希望在应用程序上线后可以更改而无需修改代码。这些配置项通常可以分为两类:
- 不同环境不同的配置项 :例如数据库和 SMTP 服务器的连接字符串。
- 不同环境相同的配置项 :例如代码中某些计算使用的常量。

无论配置值的用途如何,都需要一个地方来存储应用程序需要访问的配置值。下面将介绍如何存储这些配置项以及从应用程序代码中访问它们的不同技术。

准备工作 :如果尚未创建,请创建一个使用 V3 Functions 运行时的 Azure 函数,这里将使用之前创建的函数应用。

操作步骤
- 在 Azure 函数代码中访问应用设置和连接字符串
1. 在 local.settings.json 文件中创建一个名为 MyAppSetting 的配置项和一个名为 sql_dbconnection 的连接字符串。 local.settings.json 文件示例如下:

{
    "IsEncrypted": false,
    "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet",
        "MyAppSetting": "YourAppSettingValue",
        "ConnectionStrings:sql_dbconnection": "YourConnectionString"
    }
}
2. 将现有代码替换为以下代码,添加读取配置值和连接字符串的代码:
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Configuration;

namespace FunctionAppinVisualStudio
{
    public class HttpTriggerCSharpFromVS
    {
        [FunctionName("HttpTriggerCSharpFromVS")]
        public static IActionResult
        Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", 
Route= null)]HttpRequest req, ILogger logger)
        {
            var configuration = new ConfigurationBuilder()
            .AddEnvironmentVariables()
            .AddJsonFile("appsettings.json", true)
            .Build();

            var ValueFromGetConnectionStringOrSetting = configuration.
GetConnectionStringOrSetting("MyAppSettings");
            logger.LogInformation("Get Connection String Or Setting - 
MyAppSettings = " + ValueFromGetConnectionStringOrSetting);

            var ValueFromConfigurationIndex = 
configuration["MyAppSettings"]; 
            logger.LogInformation("Value From Configuration Index - 
MyAppSettings = " + ValueFromConfigurationIndex); 

            var ValueFromConnectionString = configuration.
GetConnectionStringOrSetting("connectionStrings:sql_dbconnection");
            logger.LogInformation("ConnectionStrings: sql_dbconnection = " 
+ ValueFromConnectionString);
            string name = req.Query["name"];
            return name != null ? (ActionResult)new 
OkObjectResult($"Hello,{ name }"): new BadRequestObjectResult("Please pass 
a name on the query string or in the request body");
        }
    }
}
3. 右键单击项目,选择“Publish”将项目发布到 Azure。
4. 在“Configuration”面板中添加配置键和连接字符串。
5. 点击“Run”按钮运行函数,输出将记录在“Output”窗口中。
  • 应用设置 - 绑定表达式
    1. 打开 Visual Studio,修改 Run 方法,添加一个新参数来配置 QueueTrigger
    2. 为了避免硬编码队列名称,使用应用设置绑定表达式。将应用设置键用 %...% 括起来,并在“Application settings”中创建一个名为 queuename 的键。
3. 使用代理将大型 API 拆分为较小的子集

近年来,微服务成为行业热门话题,我们可以将 Web 组件开发为微服务,以便独立管理(扩展、部署等),而不会影响其他相关组件。在本部分,我们将尝试构建一些可以作为独立函数应用单独管理的微服务,并使用 Azure 函数代理将它们作为一个具有不同操作的单个 API 暴露给外部世界。

综上所述,通过使用 Run From Package 功能、ARM 模板、自定义域名配置、访问应用设置的技术以及代理拆分大型 API,我们可以更高效地部署和管理 Azure 函数应用,同时提高应用的可维护性和可扩展性。在实际应用中,可以根据具体需求选择合适的方法和技术,以满足项目的要求。

高效部署 Azure 函数应用及配置管理指南

3. 使用代理将大型 API 拆分为较小的子集(续)

在微服务架构的理念下,将大型 API 拆分为多个独立的小型 API 是一种有效的架构设计方式。Azure 函数代理为我们提供了这样的能力,它可以将多个独立的函数应用整合为一个统一的 API 接口,对外提供服务。

准备工作
- 确保已经创建了多个独立的 Azure 函数应用,每个函数应用实现一个或多个特定的业务功能。
- 对每个函数应用的 API 端点和功能有清晰的了解,明确如何将它们组合成一个完整的 API 服务。

操作步骤
1. 配置 Azure 函数代理
- 打开 Azure 门户,导航到要作为主 API 入口的函数应用。
- 找到“Proxies”(代理)选项,点击进入代理配置页面。
- 点击“Add”(添加)按钮,开始配置一个新的代理规则。

graph LR
    A[进入函数应用] --> B[找到 Proxies 选项]
    B --> C[点击 Add 按钮]
  1. 定义代理规则
    • 在“Name”(名称)字段中,为代理规则取一个有意义的名称,例如“api - user - management”。
    • 在“Route template”(路由模板)字段中,定义外部访问该 API 的路径,例如“/api/users/{*path}”。
    • 在“Backend URL”(后端 URL)字段中,指定实际处理该请求的函数应用的 API 端点,例如“https://user - function - app.azurewebsites.net/api/{path}”。
    • 可以根据需要配置其他选项,如请求方法(GET、POST 等)、请求头、响应头的处理等。
    • 点击“Save”(保存)按钮,保存代理规则。
  2. 重复配置多个代理规则
    • 根据需要,为不同的业务功能重复上述步骤,配置多个代理规则,将多个函数应用的 API 整合到一个主 API 中。
  3. 测试 API
    • 使用工具(如 Postman)或浏览器,访问主 API 的 URL,按照定义的路由模板进行请求。
    • 验证请求是否正确地转发到相应的函数应用,并返回预期的结果。

优势分析
| 优势 | 说明 |
| ---- | ---- |
| 简化 API 管理 | 外部客户端只需要与一个主 API 进行交互,无需了解内部多个函数应用的具体细节,降低了客户端的复杂度。 |
| 提高可维护性 | 各个函数应用可以独立开发、部署和维护,当某个功能需要修改时,只需要修改对应的函数应用,不会影响其他部分。 |
| 灵活扩展 | 可以根据业务需求,轻松添加或移除函数应用,实现 API 功能的灵活扩展。 |

4. 将配置项从一个环境迁移到另一个环境

在应用开发和部署过程中,经常需要将配置项从一个环境(如开发环境)迁移到另一个环境(如测试环境、生产环境)。下面介绍使用资源进行配置项迁移的方法。

准备工作
- 确保在源环境和目标环境中都已经创建了相应的函数应用。
- 了解源环境和目标环境的资源组、存储账户等信息。

操作步骤
1. 导出配置项
- 打开源环境的函数应用,导航到“Configuration”(配置)面板。
- 找到需要迁移的配置项,如应用设置、连接字符串等。
- 可以将这些配置项导出为一个文件(如 JSON 格式),方便后续导入到目标环境。
2. 导入配置项到目标环境
- 打开目标环境的函数应用,导航到“Configuration”面板。
- 点击“Import”(导入)按钮,选择之前导出的配置项文件。
- 确认导入的配置项信息,点击“Save”保存更改。
3. 验证配置项迁移结果
- 在目标环境中测试函数应用,确保配置项已经正确迁移,应用能够正常运行。

总结

本文全面介绍了高效部署 Azure 函数应用以及进行配置管理的多种方法和技术。通过使用 Run From Package 功能,可以降低文件锁定风险,提高部署的稳定性;利用 ARM 模板能够自动化基础架构配置,解决手动配置的诸多问题;配置自定义域名满足了客户使用自有域名的需求;掌握访问应用设置的不同技术,使配置项的管理更加灵活;使用代理将大型 API 拆分为较小子集,符合微服务架构的设计理念,提高了应用的可维护性和扩展性;最后,将配置项在不同环境之间迁移,保证了应用在不同阶段的顺利运行。

在实际应用中,我们可以根据项目的具体需求和特点,灵活选择和组合这些方法和技术,构建出高效、稳定、可维护的 Azure 函数应用系统。同时,不断关注 Azure 平台的新特性和功能,持续优化应用的部署和管理方式,以适应不断变化的业务需求。

基于分布式模型预测控制的多个固定翼无人机一致性控制(Matlab代码实现)内容概要:本文围绕“基于分布式模型预测控制的多个固定翼无人机一致性控制”展开,采用Matlab代码实现相关算法,属于顶级EI期刊的复现研究成果。文中重点研究了分布式模型预测控制(DMPC)在多无人机系统中的一致性控制问题,通过构建固定翼无人机的动力学模型,结合分布式协同控制策略,实现多无人机在复杂环境下的轨迹一致性和稳定协同飞行。研究涵盖了控制算法设计、系统建模、优化求解及仿真验证全过程,并提供了完整的Matlab代码支持,便于读者复现实验结果。; 适合人群:具备自动控制、无人机系统或优化算法基础,从事科研或工程应用的研究生、科研人员及自动化、航空航天领域的研发工程师;熟悉Matlab编程和基本控制理论者更佳; 使用场景及目标:①用于多无人机协同控制系统的算法研究与仿真验证;②支撑科研论文复现、毕业设计或项目开发;③掌握分布式模型预测控制在实际系统中的应用方法,提升对多智能体协同控制的理解与实践能力; 阅读建议:建议结合提供的Matlab代码逐模块分析,重点关注DMPC算法的构建流程、约束处理方式及一致性协议的设计逻辑,同时可拓展学习文中提及的路径规划、编队控制等相关技术,以深化对无人机集群控制的整体认知。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值