用于Azure SQL数据库的Azure函数的使用方法

153 阅读7分钟

作为一项平台即服务(PaaS)服务,Azure SQL数据库使开发人员能够在Azure云中部署SQL数据库,而无需管理基础设施。我们使用SQL Server Agent来安排工作,在内部SQL实例中按特定的时间表运行。然而,Azure DB并没有代理功能。

在云中有多种方法来安排作业或批处理。你可以探索Azure自动化系列,使用Azure Logic应用程序和自动化运行簿来执行脚本。

本文主要介绍为Azure SQL数据库调度作业的Azure函数。

Azure函数概述

Azure函数允许你使用较少的编码工作来运行事件触发代码的自动化,而无需在无服务器模式下维护基础设施。你可以在最新的Azure云基础设施资源中开始部署你的代码。

  • Azure函数支持C#、F#、JavaScript、node.js、PowerShell等语言。
  • 你可以将Azure函数用于任何配置的触发器 - HTTPTrigger、TimerTrigger、QueueTrigger。
  • 它支持基于工具(Visual Studio Code、Visual Studio)、应用服务管理(CI/CD管道、容器)、外部管道(Azure管道、GitHub行动)等部署选项。
  • 它支持跨平台的本地开发和在Windows和Linux上的托管。
  • 我们可以使用Application Insights和Azure Monitor来监控Azure功能。

目前,我们有三种Azure函数的托管计划。

  • 消费型。消耗计划是一个完全无服务器的托管选项,支持根据传入的事件动态扩大和缩小资源。Azure会根据函数执行过程中的执行次数、执行时间和使用的内存,向你收取计算资源的费用。它有一个限制,即函数的执行在一个特定的时期后会超时。
  • 高级计划。 高级托管计划提供无限制的执行时间,保证60分钟,虚拟网络连接,可预测的价格,避免冷启动和永久热实例。它根据核心秒数和分配给各实例的内存数量来收费。
  • 专用的。 在这个计划中,你定义了一组用于执行的计算资源。

你可以在下表中比较这些消费、高级和专用托管。

consumption, premium and dedicated hosting

参考资料。微软文档

配置设置Azure函数应用

要使用Azure函数,我们需要在Azure中部署函数应用。 用你的证书登录到Azure门户,然后搜索 - 功能应用。

Set up Azure Function App

点击功能应用页面中的 "创建"。

Function app

基本页面配置

在基本页面中,选择你的订阅并创建一个新的资源组。

每个功能应用都需要一个独特的名字。因此,请输入名称。Azure功能名称的后缀为**.azurewebsites.net**

Subscription and instance details

在发布部分,选择代码或docker容器。在运行时栈中,你可以选择.Net、Node.js、Python、Java、PowerShell核心等语言。

Runtime stack, versiom

对于这篇文章,我们使用3.1版本的.Net语言。 .Net的第6版正在预览中。 Choose .net for deployment

托管。

托管配置需要一个通用的Azure存储账户,用于Blobs、队列和表存储。

设置会自动为存储账户指定一个新名称。但是,你可以选择你的自定义存储账户名称。

选择操作系统为Windows,计划类型为消费,我们在本文前面讨论过。

Choose plan type

我们可以配置Azure监控应用洞察力,以监控Azure功能的性能。然而,对于演示的目的,我们不需要它。

Enable application insights

在审查+创建页面,审查的配置,并开始功能的应用程序部署。 Deployment progress 一旦完成了资源的部署,就可以查看部署的资源及其类型。

View deployed resources

点击 "转到资源 "按钮,查看功能应用的状态和URL。 Function app URL

创建一个功能

在功能、应用程序中,点击功能和创建来部署一个新的功能。

Create a function

它会打开以下页面。

Development environment, template

开发环境。正如前面所讨论的,你可以为Azure函数使用各种部署工具。默认情况下,它使用的是选项--在一个门户中开发。你可以根据你的要求从以下任何一个选项中选择。不过,你需要配置Visual Studio或VS Code来连接到Azure函数。

注:你可以参考超链接 通过使用Visual Studio Code来开发Azure函数。

Development environment

选择一个模板

模板指定了将调用函数的事件类型。支持的模板有HTTP触发器、定时器触发器、Azure队列存储触发器、Azure Blob存储触发器等。

Select a template or trigger

在本文中,我们使用定时器触发器。一旦我们选择了它,它就会为函数名称和它的时间表打开配置。 Timer trigger

计时器的时间表是CRON格式的。默认情况下,它每5分钟显示一次。 时间表的格式如下。

{秒}{分钟}{小时}{日}{月}{周天}。{日}{月}{周}{日}。

对于这篇文章,我把它设置为每30分钟发生一次。

CRON schedule

点击创建,部署该功能,并打开以下仪表盘。

deploys the function

点击 "开发人员"选项中的 "代码+测试"。你会得到一个代码窗口,里面有run.csx文件的示例代码。

Click on Code + Test

在我们继续前进之前,在Azure门户中打开你的Azure SQL数据库仪表板,点击显示连接字符串。 Connection string

我们还创建了一个存储过程[TestSP],从视图[SalesLT].[vProductAndDescription]中返回行计数。

  Create Procedure TestSP
    as 
    begin
    SELECT count(*) as NumberofRecords
      FROM [SalesLT].[vProductAndDescription]
      end
    
      Exec TestSP

记下连接字符串,并输入连接到Azure SQL数据库的密码。

ADO.net connection string Azure SQL Database

现在,回到Azure函数代码页面,用下面的代码替换。这段代码运行存储过程[TestSP],并在函数输出控制台显示结果。

 using System;
    using System.Data.SqlClient;
     
    public static void Run(TimerInfo myTimer, ILogger log)
    {
        string SqlConnectionString ="place your connection string;";
         SqlConnection conn = new SqlConnection(SqlConnectionString);
        conn.Open();
         SqlCommand command = new SqlCommand("TestSP", conn);
        command.CommandType = System.Data.CommandType.StoredProcedure;
        using (SqlDataReader reader = command.ExecuteReader())
        {
        if (reader.Read())
        {
            log.LogInformation($"Successfully Executed Azure Function at:
     {DateTime.Now}");
            log.LogInformation($"Row count processed: "+ 
    reader.GetInt32(0).ToString());
        }
        }
         conn.Close();
            
    }

Replace code

单击 "保存"。

Save code

要测试Azure函数,请点击测试/运行。如果我们有任何测试HTTP请求的参数,我们可以在这里指定它们。在我们的案例中,我们使用了一个定时器触发器。因此,直接点击底部的运行。

Click on Run

正如下面所强调的,它返回的行数是1746,正如我的样本存储过程所预期的那样。这一次我们做了手动执行。但是,如果你不禁用该功能,它将按照我们的CRON计划每30分钟自动执行一次。

View expected output

Azure函数执行监控

点击Azure函数控制台中的Monitor,在这里,你可以看到调用情况和日志。仪表板显示了过去30天内函数执行成功和失败的情况,你也可以在表格中记下执行时间。

如果你启用了应用洞察力,你也可以从这里运行应用洞察力中的查询。

Azure function execution Monitor

集成

集成选项卡给出了Azure函数执行的图形化工作流程。例如,在我们的演示中,我们有一个定时器触发器,可以调用Azure函数。计时器触发器不需要用户输入,而且我们也没有配置任何特定的输出格式。

如下图所示,我们有一个名为 myTimer 的定时器触发器,调用Azure函数AzureSQLTrigger。 如果你有一个复杂的Azure函数,有多个输入、输出或触发器,那么将函数的执行过程可视化是很好的。

Integration

你可以点击定时器来查看CRON时间表,或者在需要时进行编辑。

view the CRON schedule

Azure函数应用程序的仪表板图形

Azure函数应用程序给出了函数执行的几个指标的图形视图。这些图表显示了配置的Azure函数的总执行数、成功执行数和失败执行数。

Azure function app dashboard graphs

总结

本文探讨了Azure函数用于在类似于SQL Server代理的特定时间表上调度查询执行。Azure函数是基于事件的无服务器选项。因此,你可以根据你在Azure SQL数据库上运行查询的要求来配置事件和函数。