

• Amazon Systems Manager CloudWatch 控制面板在 2026 年 4 月 30 日之后将不再可用。客户可以像现在一样继续使用 Amazon CloudWatch 控制台来查看、创建和管理其 Amazon CloudWatch 控制面板。有关更多信息，请参阅 [Amazon CloudWatch 控制面板文档](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。

# `aws:loop` – 迭代自动化中的步骤


此操作在自动化运行手册中的步骤子集上进行迭代。您可以选择 `do while` 或 `for each` 样式循环。要构造 `do while` 循环，请使用 `LoopCondition` 输入参数。要构造 `for each` 循环，请使用 `Iterators` 和 `IteratorDataType` 输入参数。使用 `aws:loop` 操作时，请仅指定 `Iterators` 或 `LoopCondition` 输入参数。最大迭代次数为 100。

`onCancel` 属性仅可用于在循环中定义的步骤。`aws:loop` 操作不支持 `onCancel` 属性。`onFailure` 属性可用于 `aws:loop` 操作，但只有在出现导致该步骤失败的意外错误时使用该属性。如果您为循环中的步骤定义 `onFailure` 属性，则 `aws:loop` 操作将继承这些属性，并在出现故障时相应做出反应。

**示例**  
以下是如何构造不同类型的循环操作的示例。

------
#### [ do while ]

```
name: RepeatMyLambdaFunctionUntilOutputIsReturned
action: aws:loop
inputs:
    Steps:
    - name: invokeMyLambda
        action: aws:invokeLambdaFunction
        inputs:
        FunctionName: LambdaFunctionName
        outputs:
        - Name: ShouldRetry
            Selector: $.Retry
            Type: Boolean
    LoopCondition:
        Variable: "{{ invokeMyLambda.ShouldRetry }}"
        BooleanEquals: true
    MaxIterations: 3
```

------
#### [ for each ]

```
name: stopAllInstancesWithWaitTime
action: aws:loop
inputs:
    Iterators: "{{ DescribeInstancesStep.InstanceIds }}"
    IteratorDataType: "String"
    Steps:
    - name: stopOneInstance
        action: aws:changeInstanceState
        inputs:
        InstanceIds:
            - "{{stopAllInstancesWithWaitTime.CurrentIteratorValue}}"
        CheckStateOnly: false
        DesiredState: stopped
    - name: wait10Seconds
        action: aws:sleep
        inputs:
        Duration: PT10S
```

------

**Input**  
输入如下。

迭代器  
要迭代的步骤的项目列表。迭代器的最大数为 100。  
类型：StringList  
必需：否

IteratorDataType  
用于指定 `Iterators` 数据类型的可选参数。可将此参数的值与 `Iterators` 输入参数一起提供。如果您没有为此参数和 `Iterators` 指定值，则必须为 `LoopCondition` 参数指定值。  
类型：字符串  
有效值：Boolean \$1 Integer \$1 String \$1 StringMap  
默认：字符串  
必需：否

LoopCondition  
由 `Variable` 和要评估的运算符条件组成。如果您没有为此参数指定值，则必须为 `Iterators` 和 `IteratorDataType` 参数指定值。您可以通过组合使用 `And`、`Not` 和 `Or` 运算符来使用复杂的运算符评估。循环中的步骤完成后会对条件进行评估。如果条件为 `true` 并且尚未达到 `MaxIterations` 值，则循环中的步骤将再次运行。运算符条件如下：  

**字符串运算**
+ 字符串等于
+ EqualsIgnoreCase
+ StartsWith
+ EndsWith
+ 包含

**数值运算**
+ NumericEquals
+ NumericGreater
+ NumericLesser
+ NumericGreaterOrEquals
+ NumericLesser
+ NumericLesserOrEquals

**布尔运算**
+ BooleanEquals
类型：StringMap  
必需：否

MaxIterations  
循环中步骤运行的最大次数。一旦达到为此输入指定的值，即使 `LoopCondition` 仍是 `true`，或者 `Iterators` 参数中仍然存在对象，循环也会停止运行。  
类型：整数  
有效值：1-100  
必需：否

Steps  
要在循环中运行的步骤列表。这些功能类似于嵌套运行手册。在这些步骤中，您可以使用语法 `{{loopStepName.CurrentIteratorValue}}` 访问 `for each` 循环的当前迭代器值。您还可以使用语法 `{{loopStepName.CurrentIteration}}` 访问两种循环类型的当前迭代的整数值。  
类型：步骤列表  
是否必需：是Output

CurrentIteration  
当前循环迭代为整数。迭代值从 1 开始。  
类型：整数

CurrentIteratorValue  
当前迭代器的值为字符串。此输出仅存在于 `for each` 循环中。  
类型：字符串