如何从AWS Lambda函数返回存储在AWS S3存储桶上的HTML页面

时间:2016-08-02 12:42:39

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

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

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

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

2 个答案:

答案 0 :(得分:6)

您不需要涉及任何Lambda函数。您可以配置代理AWS API调用的方法,然后您唯一需要的是创建代理S3 API对象GET的API网关代理。

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

enter image description here

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

答案 1 :(得分: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 }, ...);