簡體   English   中英

AWS CDK 事件使用輸入模板添加目標

[英]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,
}))

但我不知道在哪里設置inputTemplateinputPathsMap因為它們是返回類型而不是輸入。

使用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,
  })
);

構建InputPathMapInputTemplate是 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM