Tof*_*nov 6 amazon-web-services aws-step-functions
背景:我正在尝试向 AWS Step Functions 中的状态机
添加步骤。DynamoDB:GetItem
GetItem API 接受以下格式的输入:
{
"TableName": "MyDynamoDBTable",
"Key": {
"Column": {
"S": "MyEntry"
}
}
}
Run Code Online (Sandbox Code Playgroud)
其中“Column”是主键名称,“MyEntry”是主键值。问题是我希望能够使用 JSON 路径引用动态指定主键名称和值。
不幸的是,AWS 不允许我传递主键名称(“Column”)的值引用。所以我不能做类似的事情
{
"TableName": "MyDynamoDBTable",
"Key.$": {
"$.ColumnName": {
"S": "MyEntry"
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题:
我能想到的唯一解决方法(虽然有点难看)是使用States.StringToJson
和States.Format
内部函数的组合首先生成字段输入的字符串化版本Key.$
,然后从字符串转换为 JSON。就像是:
{
"TableName.$": "$.TableName",
"Key.$": "States.StringToJson(States.Format('\{\"{}\":\{\"S.$\":\"{}\"\}\}', $.PrimaryKeyName, $.PrimaryKeyValue))"
}
Run Code Online (Sandbox Code Playgroud)
理论上它应该有效,但 AWS Step Functions 似乎对转义双引号不满意?它无法解析上面的定义。
所以我的问题是:
有没有办法让这项工作发挥作用?(通过某种方式转义双引号,或者通过完全不同的方法)
经过大量的实验,我终于找到了一种让动态键起作用的方法。我正在使用Pass
定义如下的步骤parameters
:
{
"Key.$": "States.StringToJson(States.Format('\\{\"{}\":\\{\"S\":\"{}\"\\}\\}', $.HashKeyName, $.HashKeyValue))"
}
Run Code Online (Sandbox Code Playgroud)
显然,秘密在于\\
转义时使用 double{
和}
符号。转义毕竟不是问题,尽管AWS 文档"
中没有对此进行记录。
此转换的结果如下:
{
"Key": {
"MyHashKeyName": {
"S": "MyHashKeyValue"
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1225 次 |
最近记录: |