将阶段变量注入我的 API Gateway body-mapping-template

问题描述

我正在使用 API Gateway 将请求定向到 Step Function(状态机)。

我正在按照此处的步骤操作:https://docs.aws.amazon.com/step-functions/latest/dg/tutorial-api-gateway.html

我在状态机中有一个步骤,用于检查输入负载中给定变量的值。如果 'stage' 变量等于 'prod',它会调用 prod lambda,否则它会调用测试 lambda,这很简单。

理想情况下,我想在我的身体映射模板内的 API 网关中注入一个阶段变量。按照此处解释的内容 (https://docs.aws.amazon.com/step-functions/latest/dg/tutorial-api-gateway.html#api-gateway-step-3) 我有以下模板:

{
    "input": "$util.escapeJavaScript($input.json('$'))","stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:nameOfMyStateMachine"
} 

如果我的阶段变量被注入到 input 对象中,那么这个工作会很棒。

所以我会

# before I inject the Stage Variable
{
    "key1": "value1","key2": "value2",}
# after I inject the Stage Variable
{
    "stage": "prod","key1": "value1",}

鉴于模板语言,我猜最简单的方法是将变量传递到“输入”对象之外,这样我就会得到

{
    "stage": "prod","input": "$util.escapeJavaScript($input.json('$'))","stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:nameOfMyStateMachine"
}

但这无济于事,因为只有“body”中的有效载荷才会传递给 step 函数(我希望它保持这种状态)

我的问题是,有没有办法在正文模板片段中操作/附加“输入”的内容

类似的东西

const stage = $.stageVariables.stage;
# some code that append stage to the input.json() ?
{
    "input": "$util.escapeJavaScript($input.json('$'))","stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:nameOfMyStateMachine"
}

希望有意义

编辑

环顾四周后,我以为我有以下内容,但没有:

#set($inputJson = $util.escapeJavaScript($input.json('$')))
$util.qr($inputJson.put("stage",${stageVariables.stage}))
{
    "input": "$inputJson","stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:nameOfMyStateMachine"
} 

:(

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)