

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

# `AWS::LanguageExtensions` 转换
<a name="transform-aws-languageextensions"></a>

本主题介绍如何使用 `AWS::LanguageExtensions` 转换来启用默认情况下不可用的其他函数和功能。

`AWS::LanguageExtensions` 转换是一个 CloudFormation 宏，如果您在堆栈模板中引用了该宏，则会在您使用更改集创建或更新堆栈时将该转换定义的任何内置函数更新为解析的值。

通过在 CloudFormation 模板中包含此转换，您可以使用 `Fn::ForEach` 等额外的功能，从而支持迭代等更高级的操作。您还可以在通常不允许使用内置函数的位置使用内置函数，例如在 `Ref` 和 `Fn::GetAtt` 函数中。

## 用法
<a name="aws-languageextensions-usage"></a>

要使用 `AWS::LanguageExtensions` 转换，您必须在 CloudFormation 模板的顶层对其进行声明。`AWS::LanguageExtensions` 不能用作嵌入在任何其他模板部分中的转换。

该声明的值必须为文本字符串 `AWS::LanguageExtensions`。您无法使用参数或函数来指定转换值。

### 语法
<a name="aws-languageextensions-syntax"></a>

要在 CloudFormation 模板中声明该转换，请使用以下语法：

### JSON
<a name="aws-languageextensions-syntax.json"></a>

```
{
  "Transform":"AWS::LanguageExtensions",
  "Resources":{
    ...
  }
}
```

### YAML
<a name="aws-languageextensions-syntax.yaml"></a>

```
Transform: AWS::LanguageExtensions
Resources:
  ...
```

`AWS::LanguageExtensions` 转换是一个独立的声明，没有其他参数。

## 支持额外的函数
<a name="aws-languageextensions-supported-functions"></a>

`AWS::LanguageExtensions` 转换支持以下额外的函数：
+ [`Fn::ForEach`](intrinsic-function-reference-foreach.md)
+ [`Fn::Length`](intrinsic-function-reference-length.md)
+ [`Fn::ToJsonString`](intrinsic-function-reference-ToJsonString.md)

## 注意事项
<a name="aws-languageextensions-considerations"></a>

使用 `AWS::LanguageExtensions` 转换时，请记住以下注意事项：
+ 更新使用 `AWS::LanguageExtensions` 转换的堆栈时，建议不要使用 CloudFormation 控制台中的**使用现有模板**选项或等效的命令行选项 `--use-previous-template`。`AWS::LanguageExtensions` 转换会在处理过程中将参数解析为字面值。当您使用 `--use-previous-template` 时，CloudFormation 会将此已处理的模板与旧字面值一起使用，从而阻止应用新的参数值和 Systems Manager 参数更新。请改为提供原始模板，以确保使用当前值重新解析参数。
+ 仅在 `AWS::LanguageExtensions` 转换中可用的内置函数模板中不支持短格式 YAML 语法。使用对这些函数的显式引用。例如，使用 `Fn::Length` 而不是 `!Length`。
+ Amazon SAM CLI 目前不支持 `AWS::LanguageExtensions` 转换的 `Fn::ForEach` 内置函数。
+ 如果您使用多个转换，请使用列表格式。如果您使用自定义宏，请将 Amazon 提供的转换放在自定义宏之后。如果同时使用 `AWS::LanguageExtensions` 和 `AWS::Serverless` 转换，则 `AWS::LanguageExtensions` 转换必须位于列表中的 `AWS::Serverless` 转换之前。
+ `AWS::LanguageExtensions` 转换提供的函数和属性仅在模板的 `Resources`、`Conditions` 和 `Outputs` 部分中受支持。

## 示例
<a name="aws-languageextensions-examples"></a>

以下示例展示了如何使用 `AWS::LanguageExtensions` 转换来使用由该转换定义的 `Fn::Length` 内置函数。

### JSON
<a name="aws-languageextensions-example.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Transform": "AWS::LanguageExtensions",
    "Parameters": {
        "QueueList": {
            "Type": "CommaDelimitedList"
        },
        "QueueNameParam": {
            "Description": "Name for your SQS queue",
            "Type": "String"
        }
    },
    "Resources": {
        "Queue": {
            "Type": "AWS::SQS::Queue",
            "Properties": {
                "QueueName": {
                    "Ref": "QueueNameParam"
                },
                "DelaySeconds": {
                    "Fn::Length": {
                        "Ref": "QueueList"
                    }
                }
            }
        }
    }
}
```

### YAML
<a name="aws-languageextensions-example.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Parameters:
  QueueList:
    Type: CommaDelimitedList
  QueueNameParam:
    Description: Name for your SQS queue
    Type: String
Resources:
  Queue:
    Type: AWS::SQS::Queue
    Properties:
      QueueName: !Ref QueueNameParam
      DelaySeconds:
        'Fn::Length': !Ref QueueList
```

## 相关资源
<a name="aws-languageextensions-related-resources"></a>

有关更多示例，请参阅以下主题。
+ [`Fn::ForEach`](intrinsic-function-reference-foreach.md)
+ [`Fn::Length`](intrinsic-function-reference-length.md)
+ [`Fn::ToJsonString`](intrinsic-function-reference-ToJsonString.md)
+ [`Ref`](intrinsic-function-reference-ref.md)
+ [`Fn::GetAtt`](intrinsic-function-reference-getatt.md)
+ [`Fn::FindInMap enhancements`](intrinsic-function-reference-findinmap-enhancements.md)

有关使用宏的一般信息，请参阅《Amazon CloudFormation 用户指南》**中的 [使用模板宏对 CloudFormation 模板执行自定义处理](https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/template-macros.html)。