我有 Lambda 函数tranportKickoff,它接收输入,然后将输入发送/代理到Step Function中。下面的代码确实运行,我没有收到任何错误,但同时步骤函数没有执行。
对于设计也很重要,我不希望函数transportKickoff等待步骤函数完成,因为它可能运行很长时间。然而,我希望调用Step Function 时出现的任何错误都会同步报告回来。也许这个想法是错误的,我不知何故错过了某个地方抛出的错误。但是,如果是这种情况,我想找到一种方法,能够实现在 Step Function 开始执行后立即退出 lambda 函数的目标。
注意:我可以独立执行步骤函数,并且我知道它工作正常
const stepFn = new StepFunctions({ apiVersion: "2016-11-23" });
const stage = process.env.AWS_STAGE;
const name = `transport-steps ${message.command} for "${stage}" environment at ${Date.now()}`;
const params: StepFunctions.StartExecutionInput = {
stateMachineArn: `arn:aws:states:us-east-1:999999999:stateMachine:transportion-${stage}-steps`,
input: JSON.stringify(message),
name
};
const request = stepFn.startExecution(params);
request.send();
console.info(
`startExecution request for step function was sent, context sent was:\n`,
JSON.stringify(params, null, 2)
);
callback(null, {
statusCode: 200 …Run Code Online (Sandbox Code Playgroud) 我想在任何给定时间将步骤函数的执行次数限制为 1。有没有办法对 AWS Step 函数设置全局锁定?
我想知道 AWS 步骤函数执行的输出是否记录在 CloudWatch 日志组中。我不是在谈论由 step 函数调用的 lambda 函数的输出。我对状态机本身的输出感兴趣。
我问这个问题是因为我们通常将所有日志集中在 loggly 中,以便更轻松、集中地进行故障排除/警报。如果step函数的输出在CloudWatch中,我们就可以轻松地将其转发到loggly。
如果步骤功能中的任务失败,在尝试使用重试策略后,有没有办法可以将这些失败的任务放在某些 DLQ 或类似的东西中,以便有人可以稍后监视这些消息并在解决问题后重新驱动它们?
我创建了 2 个胶水作业(gluejob1、gluejob2)。
我想创建一个依赖项,因为gluejob2 应该只在gluejob1 完成后运行。
为了编排这个,我创建了一个具有以下定义的阶跃函数:
{
"gluejob1": {
"Type": "Task",
"Resource": "gluejob1.Arn",
"Comment": "Glue job1.",
"Next": "gluejob2"
},
"gluejob2": {
"Type": "Task",
"Resource": "gluejob2.Arn",
"Comment": "TGlue job2.",
"Next": "Gluejob2 Finished Loading"
},
"Gluejob2 Finished Loading": {
"Type": "Pass",
"Result": "",
"End": true
}
}
Run Code Online (Sandbox Code Playgroud)
当我执行这个 step 函数时,状态函数在它触发 Gluejob1并继续触发gluejob2的那一刻称它为成功。
我想知道是否有可能只有在gluejob1 完成后才运行gluejob2。
限制 - AWS Step Functions显示AWS Step Functions 的限制。有人可以解释一下他们所说的bucket size和是什么意思Refill Rate per Second吗?
现在我有一个 AWS Step Function 来创建、运行和终止 EMR 集群作业。我想添加一个超时功能来停止作业并在集群卡住或运行时间过长的情况下终止集群(例如,将输入变量"TIMEOUT_AFTER_X_HOURS": 12与将自动停止的集群配置一起传递到状态机中如果集群在 12 小时后仍在运行,则终止该作业)。有谁知道如何做到这一点?
Step Function 定义如下:
{
"StartAt": "Decision_Maker",
"States": {
"Decision_Maker":{
"Type": "Choice",
"Choices": [
{
"Variable": "$.body.MyData",
"StringEquals": "null", //that doesn't work :(
"Next": "Run_Task1"
}],
"Default": "Run_Task2"
},
"Run_Task1": {
"Type": "Task",
"Resource": "url_1",
"Next": "Run_Task2"
},
"Run_Task2": {
"Type": "Task",
"Resource": "url_2",
"End": true
}
}
}
Run Code Online (Sandbox Code Playgroud)
基本上它是两个任务之间的选择。输入数据是这样的:
{
"body": {
"prop1": "value1",
"myData": {
"otherProp": "value"
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是有时 JSON 中没有 myData。所以输入可能是这样的:
{
"body": {
"prop1": "value1",
"myData": null
}
}
Run Code Online (Sandbox Code Playgroud)
如何检查 myData 是否为空?
目标是将我们的作业从 Control M 迁移到 AWS,但在此之前,我想更好地了解 AWS 批处理和 AWS 步骤函数之间的区别。据我了解,AWS 步骤函数似乎更具包容性,因为我可以让我的步骤之一运行 AWS 批处理。
您能解释一下 AWS Batch 和 AWS Step 函数之间的区别吗?哪个更适合从 Control M 迁移?(也许这是偏好)
我不小心启动了很多步骤函数,现在希望终止所有这些。
使用 CLI 或 Web 控制台执行此操作的任何智能方法?