【问题标题】:How to return HTML page stored on AWS S3 bucket from a AWS Lambda function如何从 AWS Lambda 函数返回存储在 AWS S3 存储桶中的 HTML 页面
【发布时间】:2016-12-07 19:49:06
【问题描述】:

我现在的情况: 我有一个带有资源 /login 的 AWS API 网关。当对此资源有 GET 请求时,会调用一个 AWS Lambda 函数,该函数会返回一个 HTML 登录表单。登录表单的 HTML 写在 Lambda 函数的 JavaScript 字符串中(我在 Lambda 函数中使用 Node JS)。 提交表单时,相同的资源 - /login 使用 POST 方法调用另一个验证登录的 Lambda 函数。如果登录失败,它会返回一个带有验证错误消息的 HTML 表单,但同样,HTML 代码是写在 JavaScript 字符串中的。

我的问题: 是否可以将 HTML 文件存储在 AWS S3 存储桶中,所以当我点击 /login 时,API 网关会调用 Lambda 函数,然后从 S3 存储桶中获取 HTML 页面并将其返回给用户? 当表单验证失败时,我想从 S3 存储桶返回相同的 HTML 并添加错误消息。

是否可以以这种方式互连这些组件?我正在努力的部分是将 HTML 存储在 S3 上并从 Lambda 访问它。

【问题讨论】:

  • 冒着暗示显而易见的风险...您可以在上传 lambda 函数时将 html 文件包含在 zip 文件中。

标签: amazon-web-services amazon-s3 aws-lambda


【解决方案1】:

您不需要涉及任何 Lambda 函数。您可以配置一个代理 AWS API 调用的方法,然后您唯一需要做的就是创建一个 API Gateway 代理来代理 S3 API Object GET。

您应该首先创建一个可以访问您的存储桶/特定 HTML 对象的 IAM 角色,记下其 ARN,然后创建一个像图像一样的集成。

注意:如果您想即时修改 HTML 的内容,这当然不是一个有效的解决方案,并且只有在您的内容是静态的情况下才有效。如果你想这样做,你必须创建一个 Lambda 来下载 S3 对象,对其进行操作并将其发送回客户端。

【讨论】:

    【解决方案2】:

    是的,您可以使用 Amazon S3 存储登录 HTML 页面的“主”副本,并在您的 Lambda 函数中使用它。

    使用此 Lambda 和 S3 教程作为起点:

    http://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html

    您关心的部分是在您的 Lambda 函数中从 S3 读取对象:

    var AWS = require('aws-sdk');
    var s3 = new AWS.S3();
    s3.getObject({ Bucket: srcBucket, Key: srcKey }, ...);
    

    【讨论】:

      猜你喜欢
      • 2020-03-14
      • 2019-12-07
      • 2020-07-05
      • 1970-01-01
      • 2020-05-22
      • 1970-01-01
      • 2019-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多