【问题标题】:AWS Step Function get all Range keys with a single primary key in DynamoDBAWS Step Function 使用 DynamoDB 中的单个主键获取所有范围键
【发布时间】:2021-01-19 04:57:57
【问题描述】:

我正在构建 AWS Step Function 状态机。我的目标是从具有哈希键(用户名)和任何(通配符)排序键(order_id)的特定值的 DynamoDB 表中读取所有项目。 基本上可以通过 SQL 来完成:

SELECT username,order_id FROM UserOrdersTable
WHERE username = 'daffyduck'

我正在使用 Step Functions 从 DynamoDB 表中获取 AWS Glue 作业的配置,然后通过 step 函数的 Map 为每个 dynamodb 项目(使用从数据库中读取的参数)生成一个 Glue 作业。

 "Read Items from DynamoDB": {
  "Type": "Task",
  "Resource": "arn:aws:states:::dynamodb:getItem",
  "Parameters": {
    "TableName": "UserOrdersTable",
    "Key": {
      "username": {
        "S": "daffyduck"
      },
      "order_id": {
        "S": "*"
      }
    }
  },
  "ResultPath": "$",
  "Next": "Invoke Glue jobs"
}

但是我不能让状态机在上面的步骤函数任务中读取用户 daffyduck 的所有 order_id。除了 http stats 之外,使用上面的代码不会显示任何输出。 order_id 有通配符吗?还有另一种获取所有 order_id 的方法吗?查询自定义在 step 函数中似乎相当有限: https://docs.amazonaws.cn/amazondynamodb/latest/APIReference/API_GetItem.html#API_GetItem_RequestSyntax

基本上我正在尝试完成可以从命令行完成的操作,如下所示:

$ aws dynamodb query \
--table-name UserOrdersTable \
--key-condition-expression "Username = :username" \
--expression-attribute-values '{
    ":username": { "S": "daffyduck" }
}'

有什么想法吗?谢谢

【问题讨论】:

  • 请注意,您的 CLI 使用 Query,而您的 SFN 机器在 Resource 部分有 GetItem(arn:aws:states:::dynamodb:getItem)。不幸的是,根据 SFN 文档,不支持 DynamoDB 的操作 Query。正如(几乎)始终在 AWS 中一样,如果某些内容不支持开箱即用,您可以回退到 Lambda 函数。我的意思是,您可以将自定义 Lambda 作为第一个任务运行,以通过 DDB API 执行 DDB 调用并将预期结果返回到状态,而不是尝试使用内置的 SFN-DDB 集成。

标签: amazon-web-services amazon-dynamodb aws-glue aws-step-functions


【解决方案1】:

我认为 Step functions Dynamodb Service 尚无法实现。 目前支持获取、放置、删除和更新项目,不支持查询或扫描。 对于GetItem,我们需要传递整个 KEY (Partition + Range Key)

对于主键,您必须提供所有属性。为了 例如,使用简单的主键,您只需要提供一个值 为分区键。对于复合主键,您必须提供 分区键和排序键的值。

我们需要编写一个 Lambda 函数来查询 Dynamo 并返回一个映射并从 step 调用 lambda 函数。

【讨论】:

    猜你喜欢
    • 2023-02-16
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多