我有一个使用AWS IoT将数据发送到DynamoDB表的系统。这是简单的天气数据,并存储时间,温度,湿度和压力。到目前为止,这一方面运作良好。 我想在S3托管的网页上显示此表中的数据。以其最简单的形式,它将仅显示最新的数据行。虽然我曾经遇到过这样一种简单的客户端javascript查询数据库的情况,但是在Amazon上使用Lambda函数变得很复杂,该函数通过API网关使用IAM进行认证来调用。 有没有更简单的方法可以做到这一点?数据应该是公开可读的,并且不能写,所以我认为应该比到目前为止阅读的内容容易。
答案 0 :(得分:2)
请查看Simple Web Service CDK Pattern。它可以帮助您使用API网关,Lambda函数创建简单的端到端服务,并只需几行代码即可访问DynamoDB表。它支持多种编程语言。
作为一般说明:每当您要提供动态内容时,都需要某种应用程序来处理它。由AWS Lambda函数支持的API网关比运行Web服务器要简单得多,它具有所有无差别的繁重工作,例如网络配置,防火墙设置,操作系统修补和维护。在任何情况下都必须正确处理身份和访问控制。
答案 1 :(得分:2)
如果您真的只想显示最新行,并且希望让网页保持尽可能的静态,我会考虑使用所需的任何后端过程将dynamodb的最新行写到一个简单的json文件中,然后该文件可由您的前端应用程序使用,而不必担心IAM凭证甚至AWS JS SDK-使其尽可能简单和轻便。
无需重复打动dynamodb即可为每次页面加载拉回相同的数据-从长远来看,这也可以为您节省一些钱。
答案 2 :(得分:1)
有一个in-browser JavaScript SDK。它使您网页上的JavaScript可以直接调用DynamoDB,而不必通过API网关进行API调用,而API网关会触发Lambda函数,而Lambda函数本身可以代表您对DynamoDB进行调用。
这里的主要考虑因素是如何对Web浏览器客户端进行身份验证。没有AWS凭证,它将无法进行DynamoDB API调用。我假设您没有可以将AWS凭证返回给客户端的服务器端组件。
您可以在页面本身中嵌入只读的,权限最小的AWS凭证-绝对不是最佳实践,但这很简单,在某些情况下可能是可以接受的。其他选项包括要求网站用户通过Web Identity Federation进行身份验证,这将动态生成一组可用的,有时间限制的AWS凭证。另一个更复杂的选项是AWS Amplify,它支持经过身份验证的客户端和未经身份验证的客户端。通常,这比在网页中硬编码(只读)AWS凭证更好,但设置起来稍微复杂一些。
还有一个博客文章:Dynamic Websites Using the AWS SDK for JavaScript in the Browser。
在所有这些情况下,页面本身都将直接对DynamoDB进行API调用,并且您应确保与凭据关联的IAM角色受到严格限制(只是相关的DynamoDB表和只是必要的查询/获取)权限)。