繁体   English   中英

如何获得对我的 dynamodb 表的调用总数?

[英]How can I get the total number of calls to my dynamodb table?

我正在使用 AWS Lambda。 我创建了一个 lambda function 对我的 dynamoDB 表执行 get 操作。 根据我传递给此的 id(主键)得到 function,它应该以 JSON 格式返回正确的项目。 为此,我使用来自 boto3 的 get_item function:

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#DynamoDB.Client.get_item

So normally, if a call my lambda function via an API (created from API Gateway) by specifying and ID, I should get the corresponding item. 问题是我还需要获取检索结果的次数。 例如,如果这是我第七次调用我的 lambda function,我应该得到一个项目(仍然取决于 id)和索引 7,如下所示:

{
  "7":{
        "id" :1246 ,
        "toy":"car",
        "color": "red"
      }
}

从逻辑上讲,我调用 lambda function 的次数就是我调用 dynamoDB 的次数。 比我认为获得这个数字的正确方法可能是使用 dynamodb,但我已经花了几个小时试图找到一种方法来通过到处查看来获得这个数量的事件/呼叫到我的桌子......我该怎么做才能得到这个号码? 我怎么能用boto3来实现呢?

没有现成的解决方案来获取对 DynamoDb 中表的调用次数。 您需要编写一个自定义计数器,该计数器将在 Lambda 调用之间共享。

最简单的选择和最快的解决方案可能是使用 Redis 和它的INCR操作来执行原子增量。 如果您不熟悉 Redis,请查看文档以了解 INCR 操作,特别是Pattern: Counter部分。

如果只能使用 DynamoDb,则需要在单独的单个项目中维护一个计数器。 例子:

{
  "partionKey": "counter_item",
  "counter": 1
}

然后你可以执行更新调用来增加计数器,如下所示:

response = table.update_item(
        Key={'partionKey': {'S': ':pk'}},
        TableName='your_table_name',
        ReturnValues='ALL_NEW',
        UpdateExpression='SET #counter = if_not_exists(#counter, :default) + :incr',
        ExpressionAttributeValues={
          ':pk': 'counter_item',
          ':incr': 1,
          ':default': 0
        },
        ExpressionAttributeNames={
          '#counter': 'counter'
        }
        )

响应中将有一个更新的项目,因此您可以从中获取counter字段。 您可以查看此 DynamoDb 指南以获取 python 中的更好示例。

我觉得有很多方法可以找出服务器调用的数量。

  1. 如果您有日志,您可以轻松获取任何特定页面的服务器调用。
  2. 使用 AWS 仪表板获取信息矩阵。 (它有一切,延迟,失败率,调用等)
  3. 编写自己的 function 可以计算 get、post 和 update 调用。 (这将类似于配置文件命中,通常在项目的初始阶段使用。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM