

這是新的 *CloudFormation 範本參考指南*。請更新您的書籤和連結。如需 CloudFormation 入門的說明，請參閱 [AWS CloudFormation 使用者指南](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# `Fn::FindInMap enhancements`
<a name="intrinsic-function-reference-findinmap-enhancements"></a>

`AWS::LanguageExtensions` 轉換可增強 CloudFormation 範本中 `Fn::FindInMap` 內建函數的功能。

`Fn::FindInMap` 函數用於從 CloudFormation 範本的 `Mappings` 區段所定義的映射中擷取值。不過，標準 `Fn::FindInMap` 函數具有限制，例如無法處理遺失的映射，或無法使用內嵌某些內建函數的 `Fn::FindInMap` 函數。

`AWS::LanguageExtensions` 轉換透過引入下列增強功能來解決這些限制：
+ **預設值支援** – 如果找不到映射，可以指定要傳回的預設值。
+ **內建函數支援** – 也可以使用更廣泛的內建函數來定義 `Fn::FindInMap` 的欄位，而不是使用標準 `Fn::FindInMap` 函數。

## 宣告
<a name="intrinsic-function-reference-findinmap-enhancements-declaration"></a>

### JSON
<a name="intrinsic-function-reference-findinmap-enhancements-syntax.json"></a>

```
{ "Fn::FindInMap" : [
    "MapName",
    "TopLevelKey",
    "SecondLevelKey",
    {"DefaultValue": "DefaultValue"}
  ]
}
```

### YAML
<a name="intrinsic-function-reference-findinmap-enhancements-syntax.yaml"></a>

完整函式名稱的語法：

```
Fn::FindInMap:
  - MapName
  - TopLevelKey
  - SecondLevelKey
  - DefaultValue: DefaultValue
```

短格式的語法：

```
!FindInMap
  - MapName
  - TopLevelKey
  - SecondLevelKey
  - DefaultValue: DefaultValue
```

## Parameters
<a name="intrinsic-function-reference-findinmap-enhancements-parameters"></a>

DefaultValue  <a name="DefaultValue"></a>
無法從 `MapName` 映射中找到 `TopLevelKey` 和/或 `SecondLevelKey` 時，`Fn::FindInMap` 的解析值。此欄位為選用欄位。

只要能夠在轉換期間解析為有效值，`MapName`、`TopLevelKey`、`SecondLevelKey`、和 `DefaultValue` 所有參數都可以是內部函數。

## 範例
<a name="w2aac28c16c20c15"></a>

下列範例示範如何在新增 `AWS::LanguageExtensions` 轉換時定義 `Fn::FindInMap` 的欄位。

### 使用預設值
<a name="intrinsic-function-reference-findinmap-enhancements-example"></a>

以下是在 `Fn::FindInMap` 函數中使用預設值的範例：

#### JSON
<a name="intrinsic-function-reference-findinmap-default-value-example.json"></a>

```
{
  //...
    "Transform": "AWS::LanguageExtensions",
    //...
    "Fn::FindInMap": [
      "RegionMap",
      { "Ref": "AWS::Region" },
      "InstanceType",
      { "DefaultValue": "t3.micro" }
    ]
  //...
}
```

#### YAML
<a name="intrinsic-function-reference-findinmap-default-value-example.yaml"></a>

```
Transform: 'AWS::LanguageExtensions'
#...
    !FindInMap 
        - 'RegionMap'
        - !Ref 'AWS::Region'
        - 'InstanceType'
        - DefaultValue: t3.micro
#...
```

#### 使用內建函數來定義頂層金鑰
<a name="intrinsic-function-reference-findinmap-enhancements-example"></a>

以下是使用內嵌有 `Fn::Select` 和 `Fn::Split` 內建函數的 `Fn::FindInMap` 函數來定義頂層金鑰的範例。

##### JSON
<a name="intrinsic-function-reference-findinmap-enhancement-example.json"></a>

```
{
  //...
  "Transform": "AWS::LanguageExtensions",
  //...
      "Fn::FindInMap": [
        "MyMap",
        {
          "Fn::Select": [
            0,
            {
              "Fn::Split": [
                "|",
                { "Ref": "InputKeys" }
              ]
            }
          ]
        },
        "SecondKey"
      ]
//...
}
```

##### YAML
<a name="intrinsic-function-reference-findinmap-enhance-example.yaml"></a>

```
Transform: 'AWS::LanguageExtensions'
#...
    !FindInMap: [MyMap, !Select [0, !Split [|, !Ref InputKeys]], SecondKey]
#...
```

## 支援的函數
<a name="intrinsic-function-reference-findinmap-enhancements-supported-functions"></a>

您可以在 `Fn::FindInMap:` 增強的參數中使用以下函數：
+ ``Fn::FindInMap``
+ ``Fn::Join``
+ ``Fn::Sub``
+ ``Fn::If``
+ ``Fn::Select``
+ ``Fn::Length``
+ ``Fn::ToJsonString``
+ ``Fn::Split`` - 除非用於預設值，否則 `Fn::Split` 必須與產生字串的內部函數搭配使用，例如 ``Fn::Join`` 或 ``Fn::Select``。
+ ``Ref``

## 相關資源
<a name="w2aac28c16c20c19"></a>

如需有關展示如何使用 `Fn::FindInMap` 內建函數的詳細資訊和範例，請參閱 [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md)。

如需 `AWS::LanguageExtensions` 轉換的詳細資訊，請參閱 [`AWS::LanguageExtensions` 轉換程序](transform-aws-languageextensions.md)。