如果每次从cloudwatch事件规则触发时,如何向步进函数发送唯一值(UUID4)是json格式? 任何人都可以为此提供帮助。提前致谢。
答案 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
}
});