如何在Azure(而不是AWS Amazon)上构建无服务器网站

如何在Azure(而不是AWS Amazon)上构建无服务器网站,azure,aws-lambda,azure-functions,serverless-framework,serverless-architecture,Azure,Aws Lambda,Azure Functions,Serverless Framework,Serverless Architecture,如何在Azure上构建无服务器网站,如“自动缩放、按执行付费、事件驱动应用程序” 有很多很好的例子可以说明如何在AWS Amazon上构建无服务器架构web站点,例如:。 HTML和JS使用S3,RESTAPI使用Lambda,数据使用Simple DB 微软的Azure功能类似于AWS Lambda,但它是“无服务器计算”,而不是“无服务器网站”。我可以用Azure函数创建“无服务器RESTAPI”,但网站、数据库等的HTML、JS、CSS呢 我尝试了Azure应用程序服务,但它缺少“只为您使

如何在Azure上构建无服务器网站,如“自动缩放、按执行付费、事件驱动应用程序”

有很多很好的例子可以说明如何在AWS Amazon上构建无服务器架构web站点,例如:。 HTML和JS使用S3,RESTAPI使用Lambda,数据使用Simple DB

微软的Azure功能类似于AWS Lambda,但它是“无服务器计算”,而不是“无服务器网站”。我可以用Azure函数创建“无服务器RESTAPI”,但网站、数据库等的HTML、JS、CSS呢

我尝试了Azure应用程序服务,但它缺少“只为您使用的内容付费”选项,因为所有计划都有每月付款,以及Azure SQL for database。而且,应用程序服务似乎并不是为了承载无服务器体系结构的网站而构建的,更多的是针对可以轻松部署在那里的经典ASP.NET网站

此外,还有一个受欢迎的库,他们甚至提到Azure:“使用AWS Lambda、Azure函数、Google CloudFunctions&更多”,但没有一个例子说明如何在Azure中使用它,所有文档都是针对Amazon AWS的


谢谢

对于存储静态文件,您可以使用Azure存储,这与AWS S3相当:

对于存储数据,有很多选择,但是如果您正在寻找NoSQL样式的数据库(由您引用AWS SimpleDB所暗示),那么您可以使用Azure DocumentDB:


这两个组件都是“无服务器”和按量付费模式。

这是一个有趣的问题,答案是您当然可以使用Azure功能构建网站。您可以创建一个http触发器,该触发器返回包含在函数中的静态html文件。如果需要,可以向该文件添加Javascript或jQuery逻辑。为了获得更多的功能,您可以创建更多用作API的函数,您可以从html文件中查询这些函数。例如,API可以利用Azure存储,在Azure存储中,您可以廉价地将数据存储在表或blob中

使用此模式,理论上可以在无服务器架构上构建复杂的web应用程序。然而,我想您可能会发现使用它有点麻烦,因为工具还不是很好。另一方面,您永远不需要考虑托管/扩展,因此这是一个很大的优点

为了证明我的理论,我实现了一个带有两个c#http触发器函数的小函数应用程序:一个用于html文件,另一个用于返回数字的api。为了证明这一点,我很快就把它放在了一起,所以如果代码混乱,我很抱歉

HttpTriggerCSharp1:

using System.Net;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using System.IO;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req,    TraceWriter log)
{
log.Info("C# HTTP trigger function processed a request.");

var response = new HttpResponseMessage(HttpStatusCode.OK);
var stream = new FileStream(@"d:\home\site\wwwroot\HttpTriggerCSharp1\index.html", FileMode.Open);
response.Content = new StreamContent(stream);
response.Content.Headers.ContentType = new    MediaTypeHeaderValue("text/html");
return response;
}
使用System.Net;
使用System.Net.Http.Header;
使用System.Threading.Tasks;
使用System.IO;
公共静态异步任务运行(HttpRequestMessage请求、TraceWriter日志)
{
Info(“C#HTTP触发器函数处理了一个请求。”);
var响应=新的HttpResponseMessage(HttpStatusCode.OK);
var stream=new FileStream(@“d:\home\site\wwwroot\HttpTriggerCSharp1\index.html”,FileMode.Open);
response.Content=新的流内容(stream);
response.Content.Headers.ContentType=新的MediaTypeHeaderValue(“文本/html”);
返回响应;
}
HttpTriggerCSharp2:

using System.Net;

public static async Task<int> Run(HttpRequestMessage req, TraceWriter log)
{
    return 42;
}
使用System.Net;
公共静态异步任务运行(HttpRequestMessage请求、TraceWriter日志)
{
返回42;
}
index.html: (请注意,您必须将index.html文件添加到函数文件集合中)


$(文档).ready(函数(){
var original=$(“#testDiv”).text();
$(“#testDiv”).text(原始+”-jQuery添加了这个!);
$(“#测试按钮”)。单击(按钮单击);
});
var i=0;
函数按钮单击(){
i++;
var结果=i+i;
$.ajax(”https://testfunctionwebsite.azurewebsites.net/api/HttpTriggerCSharp2)。完成(功能(a、b){
var queryResult=a;
$(“#ajaxResult”).text(“来自api的结果:+queryResult”);
});
$(“#ajaxResult”)。文本(结果);
}
你好,功能世界!
获取一些值

Azure存储帐户现在支持托管静态网站(当前处于预览中),以提供无服务器网站。这适用于静态网站,如Angular和React SPA应用程序,但不提供任何服务器端计算,如ASP.NET MVC。它可以与Azure函数代理一起使用,以获得其他功能。我写了一篇文章,重点介绍了一些功能以及如何设置

谢谢。您的示例是“使用Azure存储Blob服务的简单网站”。很少有静态html页面。您认为“Azure存储Blob服务”是复杂网站的好解决方案吗?例如,stackoverflow.com具有所有功能。比如说使用AngularJs的单页应用程序,其后端是node.js。我认为在评估Azure存储是否合适时,站点的复杂性不是一个有趣的标准。可能是一些非功能性需求,如预期负载、安全性等。存储的工作只是为文件提供服务。如果是这样的话,我也会考虑添加一个CDN。我的意思是,过去服务器上有静态html文件的日子已经过去了。我们需要一些服务器上的运行时来根据请求和数据构建动态页面。例如C#+MVC+Razor。或者node.js的一些框架。我们需要会话、cookies等。它将如何与Azure Blob存储配合使用?不。如果您需要所有这些,那么在任何存储中都不可能做到这一点,在基于Lambda+S3的体系结构中也不可能做到这一点。如果您正在构建此类网站,请查看Azure应用程序服务和Azure Web应用程序。您可以参考以下文档将AWS与Azure服务进行比较,并找到合适的匹配项: