2

当每次从cloudwatch事件规则触发时,如何将唯一值(UUID4)发送到step函数是json格式?任何人都可以帮助解决这个问题。提前致谢。

4

2 回答 2

0

由于 AWS 最近将Step Functions 添加为 CloudWatch 目标,因此您可以轻松地使 Step Function 中的第一个函数生成 UUID。然后将其传递给下一个函数。这将允许 Step Function 是自包含的。

"GenerateUuid": {
  "Type": "Task",
  "Resource": "arn:aws:states:us-east-1:123456789012:activity:GenerateUuid",
  "Next": "CreateNewRecord"
},

另一种方法是让 Lambda 函数生成 UUID 并传递到状态机,您可以再次从 CloudWatch 事件触发。

var params = {
  stateMachineArn: 'MyStateMachine-12345',
  input: uuidv4()
};
stepfunctions.startExecution(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});
于 2017-09-30T14:30:27.233 回答
0

派对有点晚了,但万一其他人遇到这个......

当您设置 cloudwatch 事件时,您可以在其上设置输入转换器,幸运的是,触发的事件有一个 ID,可以解决您的问题,而无需向您的状态机添加任何额外的 lambda。

下面是一个设置它的示例,以便状态机的输入如下所示:

{
  "meta": {
    "uniqueId": "96c80428-14fe-c8d0-f6e3-639384992391"
  }
}

使用 AWS 控制台: 屏幕截图

使用代码(JS):

const targets = [
  {
    Arn: "my-state-machine-arn",
    Id: "my cloud watch rule name",
    InputTransformer: {
      InputTemplate: '{"meta":{"uniqueId":<id>}}',
      InputPathsMap: {
        id: '$.id',
      },
    },
    RoleArn: "my-cloudwatch-arn",
  },
];
const params = {
  Rule: "my cloud watch rule name",
  Targets: targets,
};
cloudwatch.putTargets(params, (err, data) => {
  if (err) {
    // error
  } else {
    // success
  }
});
于 2018-10-22T18:00:47.370 回答