【问题标题】:Is it possible to build a web site using just amazon lambda是否可以仅使用 amazon lambda 构建网站
【发布时间】:2017-07-17 03:28:54
【问题描述】:

我知道我可以在 cloudfront/S3 中放置一些东西,然后调用 lambda 函数来做事,我知道该怎么做,但我正在尝试将 lambda 函数直接公开为一个网站 - 即有一组生成 html 的函数,并用浏览器访问它们。

我特别困惑的是安全模型。非常重要的是,这个“站点”将有某种“登录”——即不仅仅是任何人都可以调用它——而且这与我或其他任何人的 aws 凭据无关,也不依赖于任何共享的秘密。

这可能吗,只使用 lambda + api 网关?还是 lambda + cloudfront?

【问题讨论】:

  • 有趣的q..我稍后会尝试回答..

标签: amazon-web-services aws-lambda


【解决方案1】:

我不确定其他答案是否真正回答了您的问题。他们似乎建议您使用 Angular/React/Whatever 构建单页应用程序,但我认为您是在问是否可以直接从 API Gateway / Lambda 提供 HTML。答案是肯定的。要登录一个用户,它看起来像这样:

  1. 用户访问页面 - API Gateway 调用 Login Lambda 来呈现登录 html
  2. 用户填写表单,提交表单 method="POST" - API Gateway 将表单数据映射到 JSON 并将其传递给 Authorizer Lambda,如果经过身份验证,它允许 API Gateway 调用 Protected Content Lambda 以获取该页面的 html
  3. API Gateway 设置了一个 cookie,表明用户已通过身份验证
  4. 在随后的页面查看中,API Gateway 将 cookie 传递给 Authorizer Lambda,后者再次确定用户是否可以继续

有关如何提供 html,请在此处查看此帖子:Return Html from API Gateway

Authorizer Lambda 处理身份验证(有了这个,您可以使用任何类型的身份验证方案):Custom Authorizers

由于您只想使用 html,因此您的登录表单需要通过 API Gateway 映射模板将 POST application/www-form-urlencodeddata 转换为 JSON,而不是使用 ajax 调用:https://gist.github.com/ryanray/668022ad2432e38493df

如果您不使用 ajax 请求来加载数据,您很可能需要使用 cookie 进行身份验证。有关如何在 API Gateway 中访问/设置 cookie 数据的信息,请参阅这篇文章:Using AWS Gateway API, can I access the cookies?

【讨论】:

    【解决方案2】:

    实际上这取决于用例。

    您可以使用以下 AWS 服务构建完整的动态 Web 应用程序:

    • S3 用于静态内容。例如:React/Angular 应用和其他静态应用
    • CloudFront 作为 CDN 和代理。
    • API Gateway 为您的后端构建 API。
    • Lambda 作为 API 资源端点的计算函数。

    在安全性方面,您可以使用 AWS Cognito 和 Userpools。您可以配置您的API Gateway with cognito userpools 来验证和授权用户。如果您愿意,API Gateway 还为您提供编写自己的自定义授权方的功能。

    使用上述服务开发应用程序被认定为无服务器应用程序。

    您可以使用以下链接了解有关无服务器的更多信息。

    Building Serverless web applications

    AWS doc on building a serverless web app

    【讨论】:

    • 谢谢 - 我没有把它作为接受的答案,因为我特别说我不想使用 S3,但我很感激它并且不知道 cognito 有希望做什么我要!
    【解决方案3】:

    即使没有 Lambda,您也可以使用以下服务为简单的应用程序构建一个支持登录的 Web 应用程序。

    • AWS S3(存储静态资产,如 HTML、JS、CSS)
    • AWS DynamoDB(数据存储)
    • AWS Cognito(用于登录)

    您甚至可以为 dynamodb 提供fine-grain access control,仅允许用户访问特定行。主要限制之一是为多个用户属于一个组并需要组级授权的多租户应用程序构建安全模型。另一个限制是将 DNS 记录直接添加到 S3 存储桶,它将被限制为具有 S3 存储桶名称的域。此外,由于预检请求,COR 会降低应用程序性能。为了解决上述限制和更多问题,您还可以使用以下服务。

    • AWS CloudFront(通过缓存消除 DNS 限制、COR 和性能改进、Web 应用程序防火墙集成以提高安全性等)
    • AWS Lambda(提供多租户自定义授权等)
    • AWS API 网关(限制、集成等)

    添加上述服务还提供了使用不同数据存储机制和利用其他 AWS 服务的灵活性。

    因此,总而言之,您可以使用以下一组服务作为 AWS 中 Web 应用程序的基础。

    • AWS S3
    • AWS API 网关
    • AWS Lambda
    • AWS 云端
    • AWS 认知

    【讨论】:

      猜你喜欢
      • 2019-10-13
      • 1970-01-01
      • 1970-01-01
      • 2020-03-22
      • 1970-01-01
      • 2013-05-12
      • 1970-01-01
      • 2017-12-31
      • 1970-01-01
      相关资源
      最近更新 更多