![](/img/trans.png)
[英]type of argument target must be aws_cdk.CfnResource; got aws_cdk.aws_iam.Role instead
[英]AWS CDK Events Add Target with Input Template
我正在 AWS 中創建一個事件,當一個文件被放入 S3 時,這個規則被觸發並開始一個步驟 function (SfnStateMachine)
我有一些 cdk 代碼 (node.js),我在其中添加SfnStateMachine
作為該規則的目標。
我想獲取 S3 事件的有效負載並使用inputPathsMap
將 map 轉換為可讀格式,然后我可以使用inputTemplate
設置將發送到步驟 Function 的有效負載。
const inputTemplate = {
Payload: {
TriggerType: "<detailType>",
TriggerReason: "<reason>",
Version: "<versionId>"
},
}
rule.addTarget(new events_targets.SfnStateMachine(mystateMachine.stateMachine, {
input: events.RuleTargetInput.fromObject({
inputPathsMap: {
detailType: "$.detail-type",
reason:"$.detail.reason",
versionId:"$.detail.object.version-id"
},
inputTemplate: JSON.stringify(inputTemplate) }),
role,
}))
當我使用它時,它實際上是在withObject
中發送值
我查看了文檔, RuleTargetInput.bind()
似乎是我想要使用的,但我看不到它的使用示例。 https://docs.aws.amazon.com/cdk/api/v1/docs/@aws-cdk_aws-events.RuleTargetInput.html
我想做類似的事情
rule.addTarget(new events_targets.SfnStateMachine(ddStateMachine.stateMachine, {
input: events.RuleTargetInput.bind(),
role,
}))
但我不知道在哪里設置inputTemplate
或inputPathsMap
因為它們是返回類型而不是輸入。
使用EventField助手來定義input
,它定義了 Step Function 負載:
rule.addTarget(
new events_targets.SfnStateMachine(ddStateMachine.stateMachine, {
input: events.RuleTargetInput.fromObject({
detailType: events.EventField.detailType,
reason: events.EventField.fromPath("$.detail.reason"),
versionId: events.EventField.fromPath("$.detail.object.version-id"),
}),
role,
})
);
構建InputPathMap
和InputTemplate
是 CDK 的工作。 Rule > Targets
資源定義中事件目標構造的合成 output 是:
"InputTransformer": {
"InputPathsMap": {
"detail-type": "$.detail-type",
"detail-reason": "$.detail.reason",
"detail-object-version-id": "$.detail.object.version-id"
},
"InputTemplate": "{\"detailType\":<detail-type>,\"reason\":<detail-reason>,\"versionId\":<detail-object-version-id>"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.