本文共 8783 字,大约阅读时间需要 29 分钟。
目录
随着无服务器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存储功能不同的预编译函数,例如Blob和Queues。
Azure是Microsoft的云平台,可在云计算环境中提供大量资源。其中一个资源是虚拟机,即您选择的全功能机器,只需点击几下即可在几秒钟内创建您的配置和操作系统,您可以使用安全凭据从任何地方远程访问机器。做任何你想做的事情,例如,托管你的网站,开发应用程序,为你的软件创建生产或测试环境等。让我们一步一步地看到我们如何实现这一目标。
和无服务器计算
从谈论定义:
“Azure Functions是Microsoft Azure公共云上托管的无服务器计算服务。Azure Functions和无服务器计算通常用于加速和简化应用程序开发。“
关于Azure Functions的首要注意事项是它们在完全托管的环境中运行。基本上这意味着我们不必去创建或管理虚拟机。Microsoft提供并提供Azure Functions所基于的所有底层硬件。这样做的好处之一是它为我们提供了高可靠性,因为我们不必手动管理底层基础架构。另一个好处是我们不必担心将安全补丁应用到底层基础架构。微软将为我们解决这个问题。但是,我们有责任确保我们在Azure Functions之上构建的系统得到适当的保护和管理。这种完全托管环境的另一个好处是它可以自动扩展。Azure Functions平台将自动扩展我们的功能,以处理传入请求量的变化。如果我们在消费计划上执行Azure Functions,那么我们只会在执行功能时付费。Azure Functions的另一个好处是我们需要编写更少的样板代码,其中一个原因是我们的Azure Functions可以轻松地与一系列Azure服务集成。例如,将我们的功能与Azure Blob存储集成就像在C#代码上配置正确的属性一样简单。
如果没有付费Azure帐户,可以利用Azure的新帐户提供200美元信用额度的好处。这意味着如果您是Azure的新手,想要免费试用,您将获得200美元的积分,您可以用它来探索Azure。如果您是Azure新手并且没有帐户,请按照以下过程操作,否则直接登录您的帐户。
1、打开Azure网站,即。
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函数,应用程序将返回到队列。然后我们将创建一个流程应用程序功能,该功能将此功能带入队列并确定信用卡应用程序是否成功。如果应用程序成功,那么我们将编写Blob到Azure Blob存储。此blob将写入单独接受的blob容器,如果信用卡应用程序未成功,换句话说,它被拒绝,则应用程序将被写入不同的blob存储容器。然后,我们将创建一个接受的申请功能来处理接受的信用卡申请,我们还将创建一个拒绝的申请功能来处理被拒绝的申请。
让我们按照一步一步的步骤创建一个Azure function项目并向其中添加Azure Functions。最后,我们将创建的Azure Functions发布到Azure门户。我们将创建一个接受信用卡应用程序并基于某些标准的模块,接受并拒绝该应用程序。
1、打开Visual Studio并创建一个新项目。
2、从项目模板类型列表中选择“Cloud ”,然后选择“Azure Functions”作为项目类型。为项目指定一个有意义的名称,然后单击“OK”。
3、首先,选择Empty作为项目类型,然后单击“OK”以创建项目。
4、完成后,项目将如下图所示。我在创建项目时给项目命名为“LearnAzureFunctions”,并在Visual Studio解决方案中显示为项目。
现在我们的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动词,如GET和POST。该方法还将路由作为参数,请求和日志,即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请求测试此端点。我们将在以下部分中执行此操作:
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 TaskRun( [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 (); 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”中。
是时候在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现在公开的相同端点。
如果我们点击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。
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并对其进行调试。快乐的编码!
原文地址:
转载地址:http://zjzhj.baihongyu.com/