本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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::Select
從 CommaDelimitedList
參數選取物件。您可以使用 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
索引值,您可以使用 Ref
和 Fn::FindInMap
函數。
對於 Fn::Select
物件清單,您可以使用下列函數:
-
Fn::FindInMap
-
Fn::GetAtt
-
Fn::GetAZs
-
Fn::If
-
Fn::Split
-
Ref