💾 Archived View for cfdocs.wetterberg.nu › intrinsic-function-reference-select.gemini captured on 2023-11-04 at 12:33:52. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2021-12-03)
-=-=-=-=-=-=-
The intrinsic function `Fn::Select` returns a single object from a list of objects by index.
Fn::Select does not check for null values or if the index is out of bounds of the array. Both conditions will result in a stack error, so you should be certain that the index you choose is valid, and that the list contains non-null values.
{ "Fn::Select" : [ index, listOfObjects ] }
Syntax for the full function name:
Fn::Select: [ index, listOfObjects ]
Syntax for the short form:
!Select [ index, listOfObjects ]
index
The index of the object to retrieve. This must be a value from zero to N-1, where N represents the number of elements in the array.
listOfObjects
The list of objects to select from. This list must not be null, nor can it have null entries.
The selected object.
The following example returns: `"grapes"`.
{ "Fn::Select" : [ "1", [ "apples", "grapes", "oranges", "mangoes" ] ] }
!Select [ "1", [ "apples", "grapes", "oranges", "mangoes" ] ]
You can use `Fn::Select` to select an object from a `CommaDelimitedList` parameter. You might use a `CommaDelimitedList` parameter to combine the values of related parameters, which reduces the total number of parameters in your template. For example, the following parameter specifies a comma-delimited list of three CIDR blocks:
1. "Parameters" : { 2. "DbSubnetIpBlocks": { 3. "Description": "Comma-delimited list of three CIDR blocks", 4. "Type": "CommaDelimitedList", 5. "Default": "10.0.48.0/24, 10.0.112.0/24, 10.0.176.0/24" 6. } 7. }
1. Parameters: 2. DbSubnetIpBlocks: 3. Description: "Comma-delimited list of three CIDR blocks" 4. Type: CommaDelimitedList 5. Default: "10.0.48.0/24, 10.0.112.0/24, 10.0.176.0/24"
To specify one of the three CIDR blocks, use `Fn::Select` in the Resources section of the same template, as shown in the following sample snippet:
"Subnet0": { "Type": "AWS::EC2::Subnet", "Properties": { "VpcId": { "Ref": "VPC" }, "CidrBlock": { "Fn::Select" : [ "0", {"Ref": "DbSubnetIpBlocks"} ] } } }
Subnet0: Type: "AWS::EC2::Subnet" Properties: VpcId: !Ref VPC CidrBlock: !Select [ 0, !Ref DbSubnetIpBlocks ]
The following examples show valid patterns for using nested intrinsic functions with the `!Select` short form. You can't nest short form functions consecutively, so a pattern like `!GetAZs !Ref` is invalid.
1. AvailabilityZone: !Select 2. - 0 3. - !GetAZs 4. Ref: 'AWS::Region'
1. AvailabilityZone: !Select 2. - 0 3. - Fn::GetAZs: !Ref 'AWS::Region'
For the `Fn::Select` index value, you can use the `Ref` and `Fn::FindInMap` functions.
For the `Fn::Select` list of objects, you can use the following functions: