每次通过AWS CloudWatch事件规则将新的UUID发送到AWS步骤时都会发送

时间:2017-09-23 09:13:42

标签: amazon-cloudwatch aws-step-functions

如果每次从cloudwatch事件规则触发时,如何向步进函数发送唯一值(UUID4)是json格式? 任何人都可以为此提供帮助。提前致谢。

2 个答案:

答案 0 :(得分:0)

由于AWS最近添加了Step Functions as a CloudWatch target,您可以轻松地使步骤函数中的第一个函数生成UUID。然后将其传递给下一个函数。这将允许步骤函数自包含。

"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
});

答案 1 :(得分:0)

聚会晚了一点,但是如果有人碰到这个...

设置cloudwatch事件时,可以在其上设置Input Transformers,幸运的是,触发的事件具有可以解决问题的ID,而无需在状态机中添加任何额外的lambda。

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

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

使用AWS控制台: Screenshot

使用代码(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
  }
});