如何停止特定状态机的所有运行 Step Functions?

Pål*_*erg 2 aws-cli aws-step-functions

我不小心启动了很多步骤函数,现在希望终止所有这些。

使用 CLI 或 Web 控制台执行此操作的任何智能方法?

Pål*_*erg 10

好的,让我们使用 CLI 执行此操作。

您可以使用以下方法停止执行:

aws stepfunctions stop-execution \
  --execution-arn <STEP FUNCTION EXECUTION ARN>
Run Code Online (Sandbox Code Playgroud)

但是由于我开始了太多的执行,因此能够列出状态机的所有正在运行的执行是有帮助的:

aws stepfunctions list-executions \
  --state-machine-arn <STEP FUNCTION ARN> \
  --status-filter RUNNING \
  --output text
Run Code Online (Sandbox Code Playgroud)

接下来,确保只列出这些执行的执行 ARN,并在单独的行中列出每个执行 ARN:

aws stepfunctions list-executions \
  --state-machine-arn <STEP FUNCTION ARN> \
  --status-filter RUNNING \
  --query "executions[*].{executionArn:executionArn}" \
  --output text
Run Code Online (Sandbox Code Playgroud)

现在,我们使用xargs以下命令将其组合成一个命令:

aws stepfunctions list-executions \
  --state-machine-arn <STEP FUNCTION ARN> \
  --status-filter RUNNING \
  --query "executions[*].{executionArn:executionArn}" \
  --output text | \
xargs -I {} aws stepfunctions stop-execution \
  --execution-arn {} 
Run Code Online (Sandbox Code Playgroud)

现在应该关闭所有正在运行的执行。请务必小心执行此操作,以免弄乱生产!

在这一点上,如果您使用 aws-vault 来最小化这种风险,上面的命令将如下所示:

aws-vault exec test-env -- aws stepfunctions list-executions \
  --state-machine-arn <STEP FUNCTION ARN> \
  --status-filter RUNNING \
  --query "executions[*].{executionArn:executionArn}" \
  --output text | \
xargs -I {} aws-vault exec test-env -- aws stepfunctions stop-execution \
  --execution-arn {} 
Run Code Online (Sandbox Code Playgroud)

  • 好的,这太棒了,感谢您的逐步解释 (2认同)

小智 5

对我来说 xargs 出现了问题,因为我的执行 arn 足够大。

\n
aws stepfunctions list-executions \\\n  --state-machine-arn <ARN> \\\n  --status-filter RUNNING \\\n  --query "executions[*].{executionArn:executionArn}" \\\n  --output text | \\\n    awk '{print}' |\n    while read line;\n    do aws stepfunctions stop-execution --execution-arn  $line\n    done\n
Run Code Online (Sandbox Code Playgroud)\n

这对我来说很有效。感谢 @P\xc3\xa5l 布拉特伯格

\n