在 AWS 中存储日志的位置?

时间:2021-03-01 14:38:31

标签: amazon-web-services amazon-s3 amazon-dynamodb amazon-rds

只是想在这篇文章的开头提到我是软件开发和 AWS 的新手。

我正在构建一个网络应用程序,我想跟踪特定用户每次登录应用程序的情况。我正在使用 Cognito 进行身份验证,据我了解,用户登录时间并未存储在 AWS 上的任何地方,因此我只是在用户登录时发送发布请求,发送用户用户名和当前时间并将其存储在数据库中。这就是我期望桌子的样子。

.enter image description here

我的问题是我应该使用什么数据库,为什么?我知道我可以使用 DynamoDB、RDS 或 S3 存储桶,但我不确定哪一种最适合这种情况。

登录时间将显示在每个用户特定的应用程序页面上。例如,当 jane doe 登录时,她会在 /previousactivity 页面或其他内容上看到 3 次以前的登录时间

任何帮助将不胜感激:)

2 个答案:

答案 0 :(得分:1)

您提到的服务并非都是数据库:

  • RDS - 管理关系数据库的服务
  • DynamoDB - 完全托管的 NoSQL 数据库
  • S3 - 对象存储

由于您的数据模型相当简单,我会像这样创建一个 DynamoDB 表:

<头>
PK(分区键) SK(排序键)
约翰多 2020-03-01T09:00:00Z
约翰多 2020-02-01T09:00:00Z
约翰多 2020-01-15T09:00:00Z
珍妮朵 2019-03-01T09:00:00Z
珍妮朵 2019-02-01T09:00:00Z
珍妮朵 2019-01-15T09:00:00Z

您可以对分区键执行 query 并以字节顺序获取给定用户的所有登录时间,这就是标准化日期时间信息很重要的原因。您可以使用 Limit 参数来限制您感兴趣的结果数量,并使用 ScanIndexForward 来指定顺序。

如果您想删除旧的登录信息,您可以使用 DynamoDB 表的生存时间功能,或者无论何时登录,您都可以删除旧项目。

答案 1 :(得分:1)

除了 Maurice 的回答,这里还有一些进一步的背景信息:

一般来说,如果你想将日志发送到某个地方,CloudWatch Logs 可能就是你想要使用的服务。您可以使用 Cognito with Lambda Triggers 来记录此类事件。这意味着您编写了一个只将数据写入 CloudWatch Logs 的 Lambda 函数。

如果您使用 Simple Storage Service (S3) 来存储您的日志,那么这类似于您在本地写入并“备份”到 S3 的日志文件中可能知道的情况。然后,您可以在不同的 AWS 区域或账户中进一步存档文件或创建单独的备份。此场景更有可能用于 EC2/ECS 的设置(但您也可以从这里将日志发送到 CloudWatch Logs 等服务)。您通常不会在 Lambda 函数中创建日志文件并将其发送到 S3。

这是一般情况。现在考虑到您当前的情况,您不仅要存储一些日志,而且还要存储半结构化信息。这就是为什么 Maurice 的建议非常适合您的用例的原因。如果您使用 DynamoDB with on-demand capacity,这也是一个便宜的设置。