【问题标题】:How to build serverless web site on Azure (rather then on AWS Amazon)如何在 Azure 上构建无服务器网站(而不是在 AWS 亚马逊上)
【发布时间】:2017-06-06 22:48:07
【问题描述】:

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

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

Microsoft 拥有类似于 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。

谢谢!

【问题讨论】:

标签: azure aws-lambda azure-functions serverless-framework serverless-architecture


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢。您的示例是“使用 Azure 存储 Blob 服务的简单网站”。很少有静态 html 页面。你认为“Azure 存储 Blob 服务”会是复杂网站的好解决方案吗?例如,stackoverflow.com 拥有的所有功能。假设使用 AngularJs 和 node.js 后端的单页应用程序。
  • 在评估 Azure 存储是否合适时,我认为站点的复杂性并不是一个有趣的标准。可能是一些非功能性需求,如预期负载、安全性等。存储的工作只是为文件提供服务。如果是这种情况,我也会考虑添加 CDN。
  • 我的意思是,过去我们在服务器上有静态 html 文件的日子已经过去了。我们需要在服务器上运行一些运行时来根据请求和数据构建动态页面。例如 C# + MVC + Razor。或者一些 node.js 的框架。我们需要会话、cookie 等。它将如何与 Azure Blob 存储一起使用?
  • 没有。如果您需要所有这些,那么任何存储都无法做到这一点,您开始使用的基于 Lambda + S3 的架构也无法做到这一点。如果您正在构建此类网站,请查看 Azure App Services 和 Azure Web Apps。
【解决方案2】:

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

索引.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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2015-08-17
      • 2015-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-12
      • 2016-07-17
      相关资源
      最近更新 更多