【发布时间】: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