在 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这个错误,找到了两个相关的结果:

  1. A post on AWS where the OP decided to just change the format of the data that gets passed to the Dynamo step
  2. 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 内部函数可以将来自状态机执行输入的数字值字符串化。