如何在 Azure 上构建无服务器网站,作为“自动扩展、按执行付费、事件驱动的应用程序”?
有大量关于如何在 AWS 上构建无服务器架构网站的好例子 Amazon,例如https://zanon.io/posts/building-serverless-websites-on-aws-tutorial 它使用 S3 来处理 HTML 和 JS,使用 Lambda 来处理 REST API,使用 Simple DB 来处理数据。
微软拥有类似于AWS Lambda的Azure Functions,但它是“无服务器计算”,而不是“无服务器网站”。我可以使用 Azure Functions 创建“无服务器 REST API”,但是用于网站、数据库等的 HTML、JS、CSS 又如何呢?
我尝试了 Azure 应用服务,但它缺少“仅按使用量付费”选项,因为所有计划都按月付款,以及用于数据库的 Azure SQL。而且应用服务似乎并不是为了托管无服务器架构网站而构建的,更多的是为了可以轻松部署到那里的经典 ASP.NET 网站。
此外,还有一个流行的库 https://github.com/serverless/serverless他们甚至提到了 Azure:“使用 AWS Lambda、Azure Functions、Google CloudFunctions 等”,但没有一个示例如何将其用于 Azure,所有文档均适用于 Amazon AWS。
谢谢!
最佳答案
这是一个有趣的问题,答案是你当然可以使用Azure功能构建一个网站。您可以创建一个 http 触发器,该触发器返回您包含在函数中的静态 html 文件。如果需要,您可以将 Javascript 或 jQuery 逻辑添加到该文件中。为了获得更多功能,您可以创建更多用作 API 的函数,您可以从 html 文件中查询这些函数。 API 可以例如利用 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;
}
HttpTriggerCSharp2:
using System.Net;
public static async Task<int> Run(HttpRequestMessage req, TraceWriter log)
{
return 42;
}
index.html: (请注意,您必须将 index.html 文件添加到函数文件集合中)
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
</head>
<body>
<script type="text/javascript">
$(document).ready(function() {
var original = $("#testDiv").text();
$("#testDiv").text(original + " - jQuery added this!");
$("#testButton").click(ButtonClick);
});
var i = 0;
function ButtonClick() {
i++;
var result = i + i;
$.ajax("https://testfunctionwebsite.azurewebsites.net/api/HttpTriggerCSharp2").done(function(a,b) {
var queryResult = a;
$("#ajaxResult").text("Result from api:" + queryResult);
});
$("#ajaxResult").text(result);
}
</script>
<div id="testDiv">
Hello functional world!
</div>
<div>
<button id="testButton">Get some values</button><br>
<div id="ajaxResult"></div>
</div>
</body>
</html>
您可以尝试一下:https://testfunctionwebsite.azurewebsites.net/api/HttpTriggerCSharp1
关于azure - 如何在 Azure(而不是 AWS 亚马逊)上构建无服务器网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41789192/