【问题标题】:Dynamo DB : inserting data while creating the table through a lambda functionDynamo DB:通过 lambda 函数在创建表时插入数据
【发布时间】:2019-05-06 16:33:16
【问题描述】:

我有一个用于创建 DynamoDB 表的 lambda 函数。

我有一个需求,需要在表创建完成后,在这个表中插入一些数据。

在 DynamoDB 中,创建表是一个异步调用。在创建表时,它处于"CREATING" 状态,之后进入"ACTIVE" 状态。

挑战是,我不能在这个表中插入数据,直到它不在"ACTIVE" 状态并且我得到ResourceNotFoundException 异常。

有什么办法,我可以在创建表的同时将这些数据插入到表中吗?

我想在同一个 Lambda 函数调用中完成建表和数据插入。

【问题讨论】:

  • 您使用的是哪种运行时/编程语言?

标签: aws-lambda amazon-dynamodb


【解决方案1】:

正如您所发现的,您只能写入活动(/已创建)表,并且无法使用 dynamodb::CreateTable 为“预加载”您的表提供数据。

表准备就绪时不会发出任何事件。因此,您必须轮询直到表格变为活动状态。这应该可以在 lambda 中轻松实现,因为 DynamoDB 很少需要超过 30-60 秒的时间来配置表。

创建表后,您可以每秒(左右)调用dynamodb::DescribeTable,并等待它返回Table.TableStatus === 'ACTIVE'。一旦他们的表状态变为活动状态,您就可以插入初始数据。请记住将您的 Lambda 超时时间增加到整整 15 分钟,以防 AWS 需要更长的时间来预置您的表。

您可以在AWS Documentation 中查看此示例。

【讨论】:

  • 有没有更好的方法从另一个 Lambda 函数处理这个问题?在同一个 lambda 函数中每秒轮询大约 30 秒在我的情况下不是一个好主意,因为 lambda 函数需要同步发回响应。
  • 没有完成完成的事件(例如,您不能像使用某些服务那样在 CloudTrail 上调用)。如果您需要返回,您可以调用第二个函数从第一个函数开始等待。
  • 谢谢,这种方法奏效了。我调用了另一个 lambda 函数,在该函数中我每 10 秒进行一次轮询以检查表状态是否为“活动”。表状态为“ACTIVE”后,我将数据插入到新表中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 2017-08-01
  • 2022-11-16
相关资源
最近更新 更多