Amazon dynamodb API网关作为DynamoDB非代理集成,具有针对变量映射返回的集成响应
给定API网关中的AWS服务集成(DynamoDB),我想知道是否有一种方法可以动态解析DynamoDB结构化JSON并以标准JSON格式返回它,而无需独立的Lambda函数映射器?为了便于演示,这里有一个示例,其中两个可能的数据元素存在于我的DynamoDB表中,如果可能的话,我希望使用单个集成响应映射模板以标准JSON格式返回: 例1 例2 基于这两个示例,我们可以看到这些是嵌套的数据结构,它们共享顶级键,但嵌套层的数量可变 我在回答有关集成映射模板的所有问题时都注意到了以下内容,而不使用单独的Lambda函数来解析映射:Amazon dynamodb API网关作为DynamoDB非代理集成,具有针对变量映射返回的集成响应,amazon-dynamodb,aws-api-gateway,api-gateway,vtl,Amazon Dynamodb,Aws Api Gateway,Api Gateway,Vtl,给定API网关中的AWS服务集成(DynamoDB),我想知道是否有一种方法可以动态解析DynamoDB结构化JSON并以标准JSON格式返回它,而无需独立的Lambda函数映射器?为了便于演示,这里有一个示例,其中两个可能的数据元素存在于我的DynamoDB表中,如果可能的话,我希望使用单个集成响应映射模板以标准JSON格式返回: 例1 例2 基于这两个示例,我们可以看到这些是嵌套的数据结构,它们共享顶级键,但嵌套层的数量可变 我在回答有关集成映射模板的所有问题时都注意到了以下内容,而不使用单
s
或N
:M
)的答案都假定问题作者毫无疑问知道DynamoDB表元素的确切外观。因此,他们会说“为每个层创建映射模板,并为该字段创建适当的预期返回类型。”使用示例1演示解决方案集成响应映射模板:$util.dynamodb.toJSON
方法可以有效地展开动态成形的dynamodb返回,否则有没有一种方法可以直接执行此操作而不必使用独立的Lambda函数?是否有一种方法可以概括响应映射模板,以考虑可变嵌套的M
类型数据
我的一个想法是循环所有键,并将M
类型发送到第二个循环,但考虑到:
#foreach
对迭代次数有一个严格的限制:1000次
我对非Lambda解决方案的前景表示怀疑,但仍然很好奇。想法?如果AWS不添加某种类型的util函数来提供帮助,它似乎是行不通的。任何你可能想到的东西,如果可能的话,都可能比lambda解决方案复杂得多。@JasonWadsworth我有点这样想,但仍然很好奇。我已经开始尝试两种不同的方法(每种方法都有缺点):1。在API网关中创建一个
模型
类型,然后让集成响应强制执行该类型——仍然有些不灵活,但如果我想避免Lambda调用或2,这是一个解决方案。让API网关调用一个AppSync端点,在该端点中可以强制执行flexbile模式,并且所有集成响应都只是在正确的JSON中传递——需要维护一个AppSync端点,并为所有调用增加一点周转时间。我问你为什么不想调用lambda?@JasonWadsworth当然。我正试图为我的初创公司创建一个开发者API,为批量用户提供付费墙,而AppSync并没有让这变得容易(额外的Lambda层需要考虑身份验证)。我想我应该使用API网关,并将其作为网关服务直接连接到我们的DynamoDB表。在某些情况下,返回是可变嵌套的,尽管DynamoDB集成太有限(因此util
引用)。如果我不能使用集成服务,我只能使用Lambda集成,这对我来说,使得整个DynamoDB集成变得毫无意义。@JasonWadsworth老实说,我可能会把所有这些都复杂化了。如果AWS不添加某种util函数来帮助,这似乎是行不通的。任何你可能想到的东西,如果可能的话,都可能比lambda解决方案复杂得多。@JasonWadsworth我有点这样想,但仍然很好奇。我已经开始尝试两种不同的方法(每种方法都有缺点):1。在API网关中创建一个模型
类型,然后让集成响应强制执行该类型——仍然有些不灵活,但如果我想避免Lambda调用或2,这是一个解决方案。让API网关调用一个AppSync端点,在该端点中可以强制执行flexbile模式,并且所有集成响应都只是在正确的JSON中传递——需要维护一个AppSync端点,并为所有调用增加一点周转时间。我问你为什么不想调用lambda?@JasonWadsworth当然。我正试图为我的初创公司创建一个开发者API,为批量用户提供付费墙,而AppSync并没有让这变得容易(额外的Lambda层需要考虑身份验证)。我想我应该使用API网关,并将其作为网关服务直接连接到我们的DynamoDB表。在某些情况下,返回是可变嵌套的,尽管DynamoDB集成太有限(因此util
引用)。如果我不能使用集成服务,我就只能使用Lambda集成,对我来说,这使得整个DynamoDB集成变得毫无意义。@JasonWadsworth老实说,我可能会把这一切都复杂化了
{
"id": "1",
"desc": "here's a string type at depth 1",
"info": {
"key1": "a string at depth 2"
}
}
{
"id": "2",
"desc": "here's a string type at depth 1",
"info": {
"key1": "a string at depth 2"
"key2": {
"subkey1": "look, a string at depth 3"
}
}
}
{
"param1": "some stuff",
"param2": "other stuff"
}
#set($inputRoot = $input.path('$'))
{
"id": "$input.Item.id.S",
"desc": "$input.Item.desc.S",
"info": {
"key1": "$input.Item.info.M.key1.S"
}
}