我有一个ApiGatewayv2事件桥-PutEvents集成正在运行。将POST正文作为事件细节发送到事件桥中。
集成请求参数如下:
{
'Source': 'com.me.api',
'DetailType': 'ApiEvent',
'Detail': $request.body,
'EventBusName': BUS_NAME,
}如果我将{"foo":"bar"}发布到API端点,则在总线中以{"foo":"bar"}作为Detail结束事件。到目前为止,一切都很简单。
我还在API上启用了一个授权程序,我也希望将上下文从该授权程序传递到事件细节中。
目前,我正在使用IAM授权程序进行测试,但希望使用科尼图。
我可以更新请求参数以将DetailType更改为$context.identity.caller,并在事件的DetailType中获取访问键。
这不是我想要的,但它表明我可以在集成中访问这些上下文变量。
不过,我想要的是细节,而不是DetailType。
因此,当我将{"foo":"bar"}发布到我的API GW时,我会得到一个包含详细信息的事件:
{
"body": {"foo":, "bar"},
"auth": {"user": "AAA1111ACCESSKEY"}
}但是,除了$request.body之外,我不能使用它作为Integration参数中的Detail值。
如果使用像{"body": $request.body}这样的详细信息,则在保存集成- Invalid selection expression specified: Validation Result: warnings : [], errors : [Invalid source: {"body": $request.body} specified for destination: Detail]时会出现错误。
而且,我也尝试过使用字符串{"body":$request.body}。
如何将POST数据封装在事件详细信息中,如"body“键中,并从我从授权程序获得的上下文变量中添加键/值。
或者,将授权程序上下文注入到我的事件中的其他方式。我应该放弃使用lambda来访问ApiGw上下文并运行PutEvent吗?似乎是失败主义者!
发布于 2022-02-10 21:59:52
这个SAM模板展示了如何使用API https://github.com/aws-samples/client-event-sample/blob/6d58777382da148a3ccc1314b0bdf21c46b6378f/template.yaml#L196来做我想做的事情。
rest端点带来了额外的好处,我们可以验证入站事件json。
https://stackoverflow.com/questions/70933202
复制相似问题