如何从AWS Lambda检索数据并将其显示在AWS S3托管的静态网站上?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从AWS Lambda检索数据并将其显示在AWS S3托管的静态网站上?相关的知识,希望对你有一定的参考价值。
我正在尝试使用AWS DynamoDB,Lambda,API Gateway和S3创建一个简单的网站。 DDB有一个表,并且该表中有一个条目。 S3有一个用于网站html的简单文件。目的是在网站中显示位于DDB中的条目,如果我更新DDB中的值,则刷新网站应更改数字以反映DDB中的更新。目前,我有一个lambda函数,该函数可以从DDB成功检索条目。我一直试图告诉HTML文件调用lambda函数并取回数据(使用API Gateway)。我以前从未使用过AWS,如果这不是实现此目标的正确方法,请原谅我。
下面是lambda函数的代码:
'use-strict';
const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient({region: 'us-location-x'});
exports.handler = (event, context, callback) => {
let tableToRead = {
TableName: 'dataStore',
Limit: 10
};
docClient.scan(tableToRead, function(err,data){
if(err){
callback(err,null);
} else {
callback(null,data);
}
});
};
这是S3上的HTML:
<html>
<head>
</head>
<body>
<h1> This number that's in DDB </h1>
<div id="entries">
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script type="text/javascript">
//This is the link generated by API Gateway
var API_URL = 'https://xxxxxxxxxx.execute-api.us-location-x.amazonaws.com/prod/retrieveDDB';
$(document).ready(function(){
$.ajax({
type: 'GET',
url: API_URL,
success: function(data){
$('#entries').html('');
data.Items.forEach(function(tableItem){
$('#entries').append('<p>' + tableItem.Row + '</p>');
})
}
});
});
</script>
</body>
</html>
当我使用“测试”按钮运行lambda函数时,它成功地从DDB中检索了数据。但是,当我尝试运行HTML时,它确实说了标题文本,但随后没有附加DDB中的值。我假设我只是不了解如何调用/解析lambda数据(如果我已经正确设置的话)。预先感谢您的帮助!
cross-origin request blocked
错误发生,因为您正尝试从其他域(例如www.example.com)访问api。这是称为CORS(跨源资源共享请求)的浏览器的安全功能。浏览器将向API发送pre-light
请求,以检查是否应允许该调用。
预照式请求作为http options
请求发送到api方法。
有两个步骤。
- 您需要启用
Cors
到API网关的资源方法。这样它将启用资源的Options
方法。简而言之,您需要选择特定的资源,然后从操作中单击Enable Cors
。
参考:请阅读https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html的“在REST API资源上启用CORS支持”部分>
您应该从lambda返回原始标头。
const docClient = new AWS.DynamoDB.DocumentClient({ region: 'us-location-x' }); exports.handler = async (event) => { let tableToRead = { TableName: 'dataStore', Limit: 10 }; const headers = { "Access-Control-Allow-Origin": '*' // other headers } try { const data = docClient.scan(tableToRead).promise(); return { statusCode: 200, body: JSON.stringify(data), headers: headers } } catch (error) { return { statusCode: 400, body: error.message, headers: headers } } };
希望这会有所帮助。 @Ashish Modi,感谢您分享链接。
以上是关于如何从AWS Lambda检索数据并将其显示在AWS S3托管的静态网站上?的主要内容,如果未能解决你的问题,请参考以下文章
AWS SDK (PHP):异步调用 lambda 函数,检索状态
如何使用 jdbc 连接从数据库中检索数据并将其显示在 jsp 文本字段中
如何使用 java servlet 从 mysql 数据库中检索图像并将其显示在 HTML img 标签中? [关闭]
aws 如何从生产环境中的 lambda 函数访问 ECS 服务