Fn::Select
내장 함수 Fn::Select
는 인덱스별 객체 목록에서 객체 하나를 반환합니다.
중요
인덱스가 어레이 범위를 벗어나는 경우 Fn::Select
는 null 값을 확인하지 않습니다. 두 개의 조건에서 모두 스택 오류가 발생하므로 선택하는 인덱스가 유효하며 목록에 null이 아닌 값이 포함되는지 확인해야 합니다.
선언
JSON
{ "Fn::Select" : [
index
,listOfObjects
] }
YAML
전체 함수 이름의 구문:
Fn::Select: [
index
,listOfObjects
]
짧은 형식의 구문:
!Select [
index
,listOfObjects
]
파라미터
- 인덱스
-
가져올 객체의 인덱스입니다. 이 항목은 0부터 N-1까지의 값이어야 합니다. 여기서 N은 어레이에 있는 요소의 수를 나타냅니다.
- listOfObjects
-
선택할 객체의 목록입니다. 이 목록은 null이 아니어야 하며 null 항목이 포함될 수 없습니다.
반환 값
선택한 객체입니다.
예시
기본 예제
다음 예제는 "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