在 AWS Step Functions 中,我如何将整数输入传递给 DynamoDB
In AWS Step Functions how do I pass an integer input to DynamoDB
我有一个 AWS Step 函数,我需要将项目插入 DynamoDB。我将以下输入传递给 Step Function 执行:
{
"uuid": "dd10a857-3711-451e-91ee-d0b3ab621b2e",
"item_id": "0D98C2F77",
"item_count": 3,
"order_id": "IO-98255AX"
}
我有一个 DynamoDB PutItem Step,设置如下:
因为item_count
是一个数值,所以我指定了"N.$": "$.item_count"
——我一开始就指定了N
,因为that maps to the number type in DynamoDB。由于所有其他字段都是字符串,因此我以 S
.
开始它们的键
然后我尝试使用上述负载测试 PutItem 步骤,但出现以下错误:
{
"error": "States.Runtime",
"cause": "An error occurred while executing the state 'DynamoDB PutItem' (entered at the event id #2). The Parameters '{\"TableName\":\"test_item_table\",\"Item\":{\"uuid\":{\"S\":\"dd10a857-3711-451e-91ee-d0b3ab621b2e\"},\"item_id\":{\"S\":\"0D98C2F77\"},\"item_count\":{\"N\":3},\"order_id\":{\"S\":\"IO-98255AX\"}}}' could not be used to start the Task: [The value for the field 'N' must be a STRING]"
}
我查了The value for the field 'N' must be a STRING
这个错误,找到了两个相关的结果:
- A post on AWS where the OP decided to just change the format of the data that gets passed to the Dynamo step
- A post on Github, where the OP was using CDK - and he ends up using a
numberFromString()
function that's available in CDK
在我的例子中,我有一个整数值,我更愿意将整数作为整数传入 Dynamo - 但基于第一个 link,似乎 Step Functions 只能传递字符串值到 DynamoDB。这意味着我唯一的选择是将整数值转换为字符串,但我不确定该怎么做。我知道 Step Functions 有 intrinsic functions, but I don't think that this is applicable to JSON paths.
将此数字数据存储到 DynamoDB 的最佳方法是什么?
TL;DR "item_count": {"N.$": "States.JsonToString($.item_count)"}
it seems that Step Functions can only pass string values to DynamoDB
是的,尽管从技术上讲这是 DynamoDB API 的限制条件。 DynamoDB 接受数字作为字符串以最大限度地提高兼容性,但底层数据类型仍然是数字。
This means that my only option is to convert the integer value to a string, but I'm not sure how to do this.
JsonToString
内部函数可以将来自状态机执行输入的数字值字符串化。
我有一个 AWS Step 函数,我需要将项目插入 DynamoDB。我将以下输入传递给 Step Function 执行:
{
"uuid": "dd10a857-3711-451e-91ee-d0b3ab621b2e",
"item_id": "0D98C2F77",
"item_count": 3,
"order_id": "IO-98255AX"
}
我有一个 DynamoDB PutItem Step,设置如下:
因为item_count
是一个数值,所以我指定了"N.$": "$.item_count"
——我一开始就指定了N
,因为that maps to the number type in DynamoDB。由于所有其他字段都是字符串,因此我以 S
.
然后我尝试使用上述负载测试 PutItem 步骤,但出现以下错误:
{
"error": "States.Runtime",
"cause": "An error occurred while executing the state 'DynamoDB PutItem' (entered at the event id #2). The Parameters '{\"TableName\":\"test_item_table\",\"Item\":{\"uuid\":{\"S\":\"dd10a857-3711-451e-91ee-d0b3ab621b2e\"},\"item_id\":{\"S\":\"0D98C2F77\"},\"item_count\":{\"N\":3},\"order_id\":{\"S\":\"IO-98255AX\"}}}' could not be used to start the Task: [The value for the field 'N' must be a STRING]"
}
我查了The value for the field 'N' must be a STRING
这个错误,找到了两个相关的结果:
- A post on AWS where the OP decided to just change the format of the data that gets passed to the Dynamo step
- A post on Github, where the OP was using CDK - and he ends up using a
numberFromString()
function that's available in CDK
在我的例子中,我有一个整数值,我更愿意将整数作为整数传入 Dynamo - 但基于第一个 link,似乎 Step Functions 只能传递字符串值到 DynamoDB。这意味着我唯一的选择是将整数值转换为字符串,但我不确定该怎么做。我知道 Step Functions 有 intrinsic functions, but I don't think that this is applicable to JSON paths.
将此数字数据存储到 DynamoDB 的最佳方法是什么?
TL;DR "item_count": {"N.$": "States.JsonToString($.item_count)"}
it seems that Step Functions can only pass string values to DynamoDB
是的,尽管从技术上讲这是 DynamoDB API 的限制条件。 DynamoDB 接受数字作为字符串以最大限度地提高兼容性,但底层数据类型仍然是数字。
This means that my only option is to convert the integer value to a string, but I'm not sure how to do this.
JsonToString
内部函数可以将来自状态机执行输入的数字值字符串化。