

这是新的《Amazon CloudFormation 模板参考指南》**。请更新您的书签和链接。有关开始使用 CloudFormation 的帮助，请参阅《Amazon CloudFormation 用户指南》[https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/Welcome.html](https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/Welcome.html)。

# `Fn::ForEach`
<a name="intrinsic-function-reference-foreach"></a>

`Fn::ForEach` 内置函数接受一个集合和一个片段，并将集合中的项目应用于提供的片段中的标识符。`Fn::ForEach` 可以包含其他内置函数，包括 `Fn::ForEach` 本身，并可以在 `Conditions`、`Outputs` 和 `Resources`（包括资源属性）部分中使用。它不能用于以下任何部分：`AWSTemplateFormatVersion`、`Description`、`Metadata`、`Transform`、`Parameters`、`Mappings`、`Rules` 或 `Hooks` 部分。

如果您在模板中使用 `Fn::ForEach` 内置函数，则还必须使用 [`AWS::LanguageExtensions` 转换](transform-aws-languageextensions.md)。

使用 `Fn::ForEach` 内置函数不会更改限额，限额适用于生成的模板。限额包括模板的最大大小和模板中资源的最大数量。有关更多信息，请参阅《Amazon CloudFormation 用户指南》**中的 [了解 Amazon CloudFormation 配额](https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html)。

## 声明
<a name="intrinsic-function-reference-foreach-declaration"></a>

### JSON
<a name="intrinsic-function-reference-foreach-declaration.json"></a>

```
"Fn::ForEach::LoopLogicalName": [
  "Identifier",
  ["Value1","Value2"], // Collection
  {"OutputKey": {OutputValue}}
]
```

### YAML
<a name="intrinsic-function-reference-foreach-declaration.yaml"></a>

```
'Fn::ForEach::LoopLogicalName':
    - Identifier
    - - Value1 # Collection
      - Value2
    - 'OutputKey':
        OutputValue
```

## 参数
<a name="intrinsic-function-reference-foreach-parameters"></a>

*循环逻辑名称*  
循环的逻辑 ID。此名称在模板中必须是唯一的，并且不能与模板 `Resources` 部分中的任何逻辑 ID 值冲突。此名称不在转换后的输出中。它用于 CloudFormation 模板本身的内部引用。

*标识符*  
在 `OutputKey` 和 `OutputValue` 参数中替换占位符的标识符。`OutputKey` 和 `OutputValue` 参数中 `${Identifier}` 或 `&{Identifier}` 的所有实例都将替换为 `Collection` 参数中的值。

*集合*  
要迭代的值的集合。这可以是此参数中的数组，也可以是 [`Ref`](intrinsic-function-reference-ref.md) 到 `CommaDelimitedList`。使用 `&{Identifier}` 时，可以在 `Collection` 中传递非字母数字字符。

*输出密钥*  
转换模板中的密钥。`${Identifier}` 或 `&{Identifier}` 须包含在 `OutputKey` 参数中。例如，如果在模板的 `Resources` 部分中使用 `Fn::ForEach`，则这是每个资源的逻辑 ID。  
`&{}` 语法允许在 `OutputKey` 参数中使用 `Collection` 的非字母数字字符。相关示例，请参阅 [在 `Fn::ForEach` 的 `Collection` 中传递非字母数字字符](intrinsic-function-reference-foreach-example-resource.md#intrinsic-function-reference-foreach-example-non-alphanumeric)。

*输出值*  
在转换后的模板中为 `Collection` 参数中的每个项目复制的值。例如，如果在模板的 `Resources` 部分中使用 `Fn::ForEach`，则这是重复以配置每个资源的模板片段。

## 返回值
<a name="intrinsic-function-reference-foreach-return-value"></a>

一个扩展对象，其中包含为集合中的每个项目重复一次的对象片段，其中，片段中的标识符将替换为集合中的项目。

## 支持的函数
<a name="intrinsic-function-reference-foreach-nested-functions"></a>

您可以在 `Fn::ForEach` 中使用以下函数。
+ 条件函数：
  + [`Fn::And`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-and)
  + [`Fn::Equals`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-equals)
  + [`Fn::If`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-if)
  + [`Fn::Not`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-not)
  + [`Fn::Or`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-or)
+ [`Fn::Base64`](intrinsic-function-reference-base64.md)
+ [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md)
+ [`Fn::GetAtt`](intrinsic-function-reference-getatt.md)
+ [`Fn::GetAZs`](intrinsic-function-reference-getavailabilityzones.md)
+ [`Fn::ImportValue`](intrinsic-function-reference-importvalue.md)
+ [`Fn::Join`](intrinsic-function-reference-join.md)
+ [`Fn::Length`](intrinsic-function-reference-length.md)
+ [`Fn::Transform`](intrinsic-function-reference-transform.md)
+ [`Fn::Select`](intrinsic-function-reference-select.md)
+ [`Fn::Sub`](intrinsic-function-reference-sub.md)
+ [`Fn::ToJsonString`](intrinsic-function-reference-ToJsonString.md)
+ [`Ref`](intrinsic-function-reference-ref.md)

## 示例
<a name="intrinsic-function-reference-foreach-example-pointer"></a>

您可以在 [示例](intrinsic-function-reference-foreach-examples.md) 中找到 `Conditions`、`Outputs` 和 `Resources` 部分的示例。