Fn::Select - AWS CloudFormation

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

Fn::Select

內部函數 Fn::Select 會依據索引從物件清單傳回單一物件。

重要

Fn::Select 不會檢查空值或索引是否超出陣列邊界。上述兩個情況都將會導致堆疊錯誤,因此您應該確定您選擇的索引是有效的,而且清單包含非空值。

宣告

JSON

{ "Fn::Select" : [ index, listOfObjects ] }

YAML

完整函式名稱的語法:

Fn::Select: [ index, listOfObjects ]

短格式的語法:

!Select [ index, listOfObjects ]

參數

index

要擷取之物件的索引。這必須是從 0 至 N-1 的值,其中 N 代表陣列中的元素數目。

listOfObjects

要從中選取的物件清單。此清單不得為空,也不能有空項目。

傳回值

選取的物件。

範例

基本範例

以下範例傳回:"grapes"

JSON

{ "Fn::Select" : [ "1", [ "apples", "grapes", "oranges", "mangoes" ] ] }

YAML

!Select [ "1", [ "apples", "grapes", "oranges", "mangoes" ] ]

 

逗號分隔清單參數類型

您可以使用 Fn::SelectCommaDelimitedList 參數選取物件。您可以使用 CommaDelimitedList 參數來結合相關參數的值,這可減少範本中的參數總數。例如,下列參數會指定以逗號分隔的三個CIDR區塊清單:

JSON

"Parameters" : { "DbSubnetIpBlocks": { "Description": "Comma-delimited list of three CIDR blocks", "Type": "CommaDelimitedList", "Default": "10.0.48.0/24, 10.0.112.0/24, 10.0.176.0/24" } }

YAML

Parameters: DbSubnetIpBlocks: Description: "Comma-delimited list of three CIDR blocks" Type: CommaDelimitedList Default: "10.0.48.0/24, 10.0.112.0/24, 10.0.176.0/24"

若要指定三個CIDR區塊之一,請在相同範本的資源區段Fn::Select中使用 ,如下列範例程式碼片段所示:

JSON

"Subnet0": { "Type": "AWS::EC2::Subnet", "Properties": { "VpcId": { "Ref": "VPC" }, "CidrBlock": { "Fn::Select" : [ "0", {"Ref": "DbSubnetIpBlocks"} ] } } }

YAML

Subnet0: Type: "AWS::EC2::Subnet" Properties: VpcId: !Ref VPC CidrBlock: !Select [ 0, !Ref DbSubnetIpBlocks ]

 

短格式巢狀函數 YAML

以下範例說明以 !Select 短格式使用巢狀內部函數的有效模式。您不可以連續巢狀短格式函數,因此類似 !GetAZs !Ref 的模式是無效的。

YAML

AvailabilityZone: !Select - 0 - !GetAZs Ref: 'AWS::Region'

YAML

AvailabilityZone: !Select - 0 - Fn::GetAZs: !Ref 'AWS::Region'

支援的函數

對於 Fn::Select 索引值,您可以使用 RefFn::FindInMap 函數。

對於 Fn::Select 物件清單,您可以使用下列函數:

  • Fn::FindInMap

  • Fn::GetAtt

  • Fn::GetAZs

  • Fn::If

  • Fn::Split

  • Ref