3

如何在 Azure 上构建无服务器网站,作为“自动扩展、按执行付费、事件驱动的应用程序”?

有很多关于如何在 AWS 亚马逊上构建无服务器架构网站的好例子,例如https://zanon.io/posts/building-serverless-websites-on-aws-tutorial 它使用S3处理 HTML 和 JS,使用Lambda REST API,用于数据的简单数据库

微软拥有类似于 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 的示例并且所有文档都适用于亚马逊 AWS。

谢谢!

4

3 回答 3

4

这是一个有趣的问题,答案是您当然可以使用 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

于 2017-01-31T21:04:13.017 回答
1

对于存储静态文件,您可以使用与 AWS S3 相当的 Azure Storage: https ://blogs.msdn.microsoft.com/make_it_better/2016/08/09/simple-websites-using-azure-storage-blob-服务/

对于存储数据 - 有很多选项,但如果您正在寻找 NoSQL 风格的 DB(通过您对 AWS SimpleDB 的引用暗示),那么您可以使用 Azure DocumentDB: https ://docs.microsoft.com/en-us/azure/ documentdb/documentdb-介绍

这两个组件都是“无服务器”的,并且随用随付。

于 2017-01-22T10:06:25.333 回答
0

Azure 存储帐户现在支持托管静态网站(目前为预览版)以提供无服务器网站。这适用于静态网站,如 Angular 和 React SPA 应用程序,但不提供任何服务器端计算,如 ASP.NET MVC。它可以与 Azure Functions Proxies 一起使用以提供其他功能。我写了一篇文章,重点介绍了一些功能以及如何设置。 http://www.deliveron.com/blog/serverless-websites-azure-new-storage-account-static-websites/

于 2018-07-15T03:15:06.940 回答