Amazon DynamoDB是一个完全托管的NoSQL数据库服务,提供快速、可预测的性能和无缝扩展性。
API Gateway是一种完全托管的服务,可以轻松创建、发布、维护、监控和保护任何规模的API。
首先确保你有一个DynamoDB表,例如名为"Products"的表,包含id、name、price等字段。
创建一个Lambda函数来查询DynamoDB数据:
// Node.js Lambda函数代码
const AWS = require('aws-sdk');
const dynamoDb = new AWS.DynamoDB.DocumentClient();
exports.handler = async (event) => {
const params = {
TableName: 'Products',
Limit: 100 // 限制返回记录数
};
try {
const data = await dynamoDb.scan(params).promise();
return {
statusCode: 200,
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Credentials': true,
},
body: JSON.stringify(data.Items),
};
} catch (error) {
return {
statusCode: 500,
body: JSON.stringify({ error: 'Could not fetch items' }),
};
}
};
https://your-api-id.execute-api.region.amazonaws.com/prod
)创建一个HTML页面来显示数据:
<!DOCTYPE html>
<html>
<head>
<title>DynamoDB Data Table</title>
<style>
table {
border-collapse: collapse;
width: 100%;
}
th, td {
border: 1px solid #ddd;
padding: 8px;
text-align: left;
}
th {
background-color: #f2f2f2;
}
tr:nth-child(even) {
background-color: #f9f9f9;
}
</style>
</head>
<body>
<h1>Product Data from DynamoDB</h1>
<table id="data-table">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Price</th>
<th>Category</th>
</tr>
</thead>
<tbody id="table-body">
<!-- 数据将通过JavaScript动态填充 -->
</tbody>
</table>
<script>
// 替换为你的API Gateway端点
const apiUrl = 'https://your-api-id.execute-api.region.amazonaws.com/prod';
// 获取数据并填充表格
fetch(apiUrl)
.then(response => response.json())
.then(data => {
const tableBody = document.getElementById('table-body');
data.forEach(item => {
const row = document.createElement('tr');
const idCell = document.createElement('td');
idCell.textContent = item.id || '';
row.appendChild(idCell);
const nameCell = document.createElement('td');
nameCell.textContent = item.name || '';
row.appendChild(nameCell);
const priceCell = document.createElement('td');
priceCell.textContent = item.price ? '$' + item.price : '';
row.appendChild(priceCell);
const categoryCell = document.createElement('td');
categoryCell.textContent = item.category || '';
row.appendChild(categoryCell);
tableBody.appendChild(row);
});
})
.catch(error => {
console.error('Error fetching data:', error);
document.getElementById('table-body').innerHTML =
'<tr><td colspan="4">Error loading data. Please try again later.</td></tr>';
});
</script>
</body>
</html>
现象:前端请求时出现跨域错误 解决:确保API Gateway的响应中包含正确的CORS头,如示例Lambda代码所示
现象:返回数据太多导致性能问题 解决:
现象:Lambda无法访问DynamoDB 解决:确保Lambda执行角色有访问DynamoDB表的权限
现象:请求超时 解决: