学习Azure Functions:在Visual Studio 2017中创建Azure Functions

目录

介绍

Azure

Azure帐户设置

设置开发环境

案例分析

在Visual Studio 2017中创建Azure Functions

添加Azure Functions项目

添加HTTP触发的Azure Functions

使用Postman测试和调试HTTP触发器功能

介绍模型

从Visual Studio将Azure Functions发布到Azure门户

测试无服务器Azure Functions

从Visual Studio调试Azure Functions

结论


介绍

随着无服务器Azure故事的最新情况,Azure Functions现在可以在Visual Studio中开发,就像任何其他功能一样。NET项目类型。这意味着我们可以在开发Azure Functions时使用Visual Studio熟悉且强大的功能和工作流程。在将功能代码发布到云之前,我们可以在本地编写,单元测试和调试功能代码。本文的目的是介绍Azure Functions的概念,即Azure支持的无服务器功能或预编译功能。

在这两篇学习Azure Functions的系列文章中,我们将学习如何在Visual Studio中开始使用Azure Functions,我们将获得Azure Functions的高级概述,并查看Visual Studio发展环境。我们将在我们的Function项目中创建一个新的Azure Function,我们将学习如何在本地开发机器上运行此函数,以及如何从Visual Studio中将它发布到Azure。一旦我们学会了如何创建基本函数,在下面的文章中,我们将学习如何创建与Azure存储功能不同的预编译函数,例如BlobQueues

Azure

AzureMicrosoft的云平台,可在云计算环境中提供大量资源。其中一个资源是虚拟机,即您选择的全功能机器,只需点击几下即可在几秒钟内创建您的配置和操作系统,您可以使用安全凭据从任何地方远程访问机器。做任何你想做的事情,例如,托管你的网站,开发应用程序,为你的软件创建生产或测试环境等。让我们一步一步地看到我们如何实现这一目标。

Azure Functions和无服务器计算

这里谈论定义:

“Azure FunctionsMicrosoft Azure公共云上托管的无服务器计算服务。Azure Functions和无服务器计算通常用于加速和简化应用程序开发。

关于Azure Functions的首要注意事项是它们在完全托管的环境中运行。基本上这意味着我们不必去创建或管理虚拟机。Microsoft提供并提供Azure Functions所基于的所有底层硬件。这样做的好处之一是它为我们提供了高可靠性,因为我们不必手动管理底层基础架构。另一个好处是我们不必担心将安全补丁应用到底层基础架构。微软将为我们解决这个问题。但是,我们有责任确保我们在Azure Functions之上构建的系统得到适当的保护和管理。这种完全托管环境的另一个好处是它可以自动扩展。Azure Functions平台将自动扩展我们的功能,以处理传入请求量的变化。如果我们在消费计划上执行Azure Functions,那么我们只会在执行功能时付费。Azure Functions的另一个好处是我们需要编写更少的样板代码,其中一个原因是我们的Azure Functions可以轻松地与一系列Azure服务集成。例如,将我们的功能与Azure Blob存储集成就像在C#代码上配置正确的属性一样简单。

Azure帐户设置

如果没有付费Azure帐户,可以利用Azure的新帐户提供200美元信用额度的好处。这意味着如果您是Azure的新手,想要免费试用,您将获得200美元的积分,您可以用它来探索Azure。如果您是Azure新手并且没有帐户,请按照以下过程操作,否则直接登录您的帐户。

1、打开Azure网站,即azure.microsoft.com

2、点击开始免费创建您的免费Azure帐户并获得200美元的积分。

创建一个帐户并申领200美元将需要您的信用卡/借记卡仅用于验证目的,并且不会从您的卡中扣除任何金额。您可以使用此信用额度和帐户30天。您将看到注册页面,您可以在其中填写所有信息并逐步注册。成功注册后,您将看到指向门户网站的链接,如下所示。

单击门户网站,您就可以登录仪表板,随时可以使用/试玩Azure

设置开发环境

在开始编写Azure Functions之前,让我们确保相应地设置开发环境。我们将在这里使用Visual Studio 2017。您可以在本教程中使用任何版本的Visual Studio 2017。先决条件是在Visual Studio上启用Azure开发。您可以在Visual Studio安装中检查它,如下所示:

案例分析

在本文中,我们将创建一个允许进行信用卡申请的功能。此函数将使用配置为仅允许POST请求的HTTP触发器。这个HTTP POST将包含信用卡申请详细信息的JSON。我们将通过Azure存储队列将信用卡应用程序从评分中分离出去。因此,一旦执行此HTTP函数,应用程序将返回到队列。然后我们将创建一个流程应用程序功能,该功能将此功能带入队列并确定信用卡应用程序是否成功。如果应用程序成功,那么我们将编写BlobAzure Blob存储。此blob将写入单独接受的blob容器,如果信用卡应用程序未成功,换句话说,它被拒绝,则应用程序将被写入不同的blob存储容器。然后,我们将创建一个接受的申请功能来处理接受的信用卡申请,我们还将创建一个拒绝的申请功能来处理被拒绝的申请。

Visual Studio 2017中创建Azure Functions

让我们按照一步一步的步骤创建一个Azure function项目并向其中添加Azure Functions。最后,我们将创建的Azure Functions发布到Azure门户。我们将创建一个接受信用卡应用程序并基于某些标准的模块,接受并拒绝该应用程序。

添加Azure Functions项目

1、打开Visual Studio并创建一个新项目。

2、从项目模板类型列表中选择Cloud ”,然后选择Azure Functions作为项目类型。为项目指定一个有意义的名称,然后单击OK

3、首先,选择Empty作为项目类型,然后单击OK以创建项目。

4、完成后,项目将如下图所示。我在创建项目时给项目命名为LearnAzureFunctions,并在Visual Studio解决方案中显示为项目。

添加HTTP触发的Azure Functions

现在我们的Azure Function项目已准备就绪,我们可以为此项目添加多个功能。让我们开始添加它们以实现我们的案例研究目标。

1、右键单击该项目并添加新的Azure Functions,如下图所示:

2、选择类型为Azure Function并为其指定一个有意义的名称,例如,在我们的案例中为ApplyForCC

3、选择类型Http trigger作为功​​能类型,在访问权限中,您可能会看到几个选项。现在,选择将访问权限限制为仅限Function 的选项,然后单击OK

4、完成后,我们将获得如下所示的功能。请注意,这是一个Http触发器函数,因此可以通过浏览器或API客户端像API一样执行。如果我们仔细观察它,它具有FunctionName包含函数名称的属性,并Task返回像Web API一样的Http响应。该Run方法是在该API被命中时执行的方法,它将授权级别作为参数。由于我们将访问权限设置为Function级别,因此它显示AuthorizationLevel.Function并具有HTTP动词,如GETPOST。该方法还将路由作为参数,请求和日志,即TraceWriter类实例来写日志,如log.Info(“C# HTTP trigger function processed a request.”)方法所示。

以下是生成的完整类代码。该方法处理请求并期望来自请求的name查询参数。如果它找到name查询参数,则返回OK响应,即,200否则返回Bad Request响应。

using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;

namespace LearnAzureFunctions
{
  public static class ApplyForCC
  {
    [FunctionName(ApplyForCC)]
    public static async TaskHttpResponseMessage Run(
      [HttpTrigger(AuthorizationLevel.Function,
          get, post,
          Route = null)]HttpRequestMessage req,
      TraceWriter log)
    {
      log.Info(C# HTTP trigger function processed a request.);

       parse query parameter

      string name = req.GetQueryNameValuePairs()
          .FirstOrDefault(q = string.Compare(q.Key, name, true) == 0)
          .Value;

      if (name == null)
      {
        Get request body
        dynamic data = await req.Content.ReadAsAsyncobject();
        name = data.name;
      }
      return name == null
                 req.CreateResponse(HttpStatusCode.BadRequest,
                 Please pass a name on the query string or in the request body)
                 req.CreateResponse(HttpStatusCode.OK, Hello + name);
    }
  }
}

5、让我们稍微修改一下方法只接受post请求,所以从参数列表中删除Get属性,如下所示:

6、现在,编译应用程序并通过单击箭头操作按钮运行它,如下所示,或者您也可以按F5运行该应用程序。

7、函数处于运行模式后,将启动func.exe控制台窗口。如果你仔细监视它,它会在详细信息中显示它找到了一个新函数LearnAzureFunctions.ApplyForCC.Run,并且在作业主机启动后,它显示了我们ApplyForCC函数的结束端点。我们可以通过Postman等任何Web API客户端的POST请求测试此端点。我们将在以下部分中执行此操作:

使用Postman测试和调试HTTP触发器功能

1、一旦应用程序启动并运行,我们就可以通过Postman测试我们的功能。如果您没有Postman应用程序,请安装它以测试API调用。安装应用程序后,从start explorer打开应用程序,如下所示。

2、从控制台窗口获取功能URL并发出POST请求,如下所示。请注意,我们收到404错误请求错误。如果你还记得它,那么从Run方法返回错误,因为没有提供名为name的参数。

3、让我们更正该请求并使用name参数发出请求。因此,请附加查询字符串name = “Akhil”并按send。请注意,我们得到200,即OK响应文本为Hello Akhil。所以我们的Azure Functions在本地工作。

4、现在,如果您检查控制台窗口,我们会看到请求和响应,其中显示执行ApplyForCC,当执行时,它会显示Executed并且响应也会发送。

5、您还可以通过将断点放在函数中并发出请求来调试方法。我们看到name参数设置为Akhil,如下所示:

介绍模型

我们的Http触发器工作正常。我们现在将介绍一个模型,即用于信用卡应用程序,它将作为我们的Azure Functions的输入,并相应地处理应用程序。

1、添加一个名为CCApplication的新类,并添加以下代码,即类及其属性。

namespace LearnAzureFunctions 
 { 
   public class CCApplication 
   { 
     public string Name { get; set; } 
     public int Age { get; set; } 
     public string Occupation { get; set; } 
     public float YearlyIncome { get; set; } 
   } 
 }

我们的解决方案完全如下图所示:

2、在Azure Functions中进行一些修改。从请求中读取信用卡应用程序模型,并在应用程序中记录该人员的姓名,然后发送回复消息,说明已收到该名称的信用卡请求。运行应用程序,以便在测试之前启动我们的控制台窗口。

以下是实现的代码:

using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;

namespace LearnAzureFunctions
{
  public static class ApplyForCC
  {
    [FunctionName("ApplyForCC")]
    public static async Task<HttpResponseMessage> Run(
      [HttpTrigger(AuthorizationLevel.Function,
          "post",
          Route = null)]HttpRequestMessage req,
      TraceWriter log)
    {
      log.Info("C# HTTP trigger function processed a request.");

      CCApplication ccApplication = await req.Content.ReadAsAsync<CCApplication>();
      log.Info($"Received Credit Card Application from : {ccApplication.Name }");
      return req.CreateResponse(HttpStatusCode.OK,
        $"Application received and submitted for {ccApplication.Name}");
    }
  }
}

3、现在再次回到Postman测试这个功能。这次,该功能不期望查询参数,而是期望来自请求正文的模型。因此,在请求正文中定义JSON并像之前一样发送POST请求。

4、您可以将调试器放在方法中以检查接收到的请求的参数。正如我们在下图中看到的那样:

5、现在回到邮递员,我们得到了预期的响应,即模型中的名称已收到信用卡申请,即在我们的案例Akhil Mittal中。

Visual StudioAzure Functions发布到Azure门户

是时候在Azure门户中将Visual Studio中开发的本地函数作为Function应用程序发布。确保您在Azure中拥有一个帐户,并且您已登录到该帐户。

1、右键单击项目,您将在上下文菜单中选择Publish。单击该选项。

2、在下一个屏幕上,如果您是第一次发布它,请选择如下所示的单选按钮,如果您要发布现有应用程序,则可以选择选择现有单选按钮。选择发布目标为Azure Function App,然后单击发布

3、如果您已经在Visual Studio中登录到Microsoft帐户,那么它是好的,否则它将要求您在继续之前登录Microsoft帐户以访问Azure门户服务。下一步将要求您在发布函数之前提供App Service配置。

4、提供功能名称,订阅应自动填充,资源组(您可以创建新的或使用现有的)。选择一个主机方案,给它命名,例如CCAppFunctionPlan,位置为Central US,我选择的大小为Consumption,如下图所示。如果我们选择消费计划,请注意此警告,告诉我们消费应用服务计划仅适用于Function 应用程序,但这很好,因为我们正在创建一个Function 应用程序。这意味着我们只会在函数执行时收费。让我们点击OK,最后,我们可以在这里选择一个现有的存储帐户,或者我们可以创建一个新帐户。那么,我们来创建一个新的存储帐户。我们将此存储帐户称为ccappfunction,我们将此处的帐户类型保留为默认值。

5、现在,现在继续并点击Create,这将创建我们的App Service,它还将部署我们的Function 应用程序,包括我们的ApplyForCC功能到Azure

发布完成后,将创建发布配置文件,如下所示:

6、转到Azure门户,在仪表板上,我们看到我们的CCAppFunction应用服务已创建,并且ccappfunction存储帐户和CCAppFunctionPlan服务计划已成功创建。

7、双击CCAppFunction即可支持多种功能的App服务。在我们的例子中,到目前为止它只是在它所持有的功能上,即ApplyForCC。在CCAppFunction页面上,您将看到左侧的功能列表,当您展开它时,您将看到该ApplyForCC功能。单击该功能并查看该功能的详细信息。在概述页面上,即函数的详细信息页面,您可以看到其状态为正在运行以及该函数的URL。请记住我们在从本地测试函数时使用的端点,这是Azure现在公开的相同端点。

测试无服务器Azure Functions

如果我们点击Manage选项卡,我们可以在这里看到几个键。如果我们回到Visual Studio并检查我们的函数,请参阅我们设置的AuthorizationLevel Function。这意味着我们需要在将函数部署到Azure后调用该函数时提供功能键。如果我们回到门户网站,我们可以看到我们已经为我们自动添加了一个默认功能键,如果需要,我们可以添加其他功能键,我们可以看到键值。

1、现在,ApplyForCC再次单击功能选项卡,通过单击Get Function URL链接获取功能URL,如下所示。请注意,我们无法在此处更改函数定义,因为它处于只读模式。任何需要更改的内容都应该从Visual Studio本身完成,并且可以再次发布。

2、复制URL

3、返回Postman并使用门户网站中复制的Azure Functions URL 发出新POST请求。确保你的消息体具有我们之前给出的JSON

4、一旦发送请求,我们就会收到收到并提交给Akhil的申请的回复这表明我们在Azure上部署的功能实际上正在运行,我们正在获取响应。我们来检查一下。

5、返回门户网站,单击Monitor选项卡,我们看到成功计数显示为1。如果单击它,我们会看到我们的函数的日志,即称为调用日志,它显示函数的详细信息,如持续时间,状态,上次运行和执行的函数。

6、在如下所示的日志部分中,我们看到了我们在功能代码本身中执行的日志记录文本。

Visual Studio调试Azure Functions

我们将尝试从Visual Studio调试部署的Azure Functions

1、返回Visual Studio并打开Cloud Explorer,如下所示:

2、在列表中选择您对Azure的订阅,然后单击AppServices,我们看到我们的功能名称出现在那里,即部署在云上的功能。右键单击CCAppFunction,然后单击Attach Debugger

3、连接调试器后,将使用功能URL启动浏览器,如下所示:

4、回到Postman并再次使用功能应用程序的托管URL发出类似之前的请求。

5、一旦发送请求,我们就会在Visual Studio的函数中看到调试器断点,这意味着我们正在调试该函数。您可以检查请求和请求正文以获取参数。按F5继续。

6、在Postman中,我们看到收到的回复为200

结论

在这篇详细的文章中,我们了解了什么是Azure Functions和功能应用程序,如何在Visual Studio中本地编写Azure Functions,调试和测试它并将功能发布到Azure门户。我们学习了如何使用Visual Studio测试部署的Azure Functions并对其进行调试。快乐的编码!

 

原文地址:https://www.codeproject.com/Articles/1359783/Learning-Azure-Functions-Creating-Azure-Functions

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值