Ref 내장 함수는 지정된 파라미터 또는 리소스에 대한 정보를 반환합니다.
!Ref 짧은 형식의 구문으로 사용할때 !를 붙임
Fn::Select
내장 함수 Fn::Select는 인덱스별 객체 목록에서 객체 하나를 반환합니다.
JSON
{ "Fn::Select" : [ index, listOfObjects ] }
YAML
전체 함수 이름의 구문:
Fn::Select: [ index, listOfObjects ]
짧은 형식의 구문:
!Select [ index, listOfObjects ]
Fn::GetAZs 내장 함수는 지정된 리전의 가용 영역을 알파벳순으로 나열하는 배열을 반환합니다.
https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/aws-resource-init.html
https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/cfn-init.html
aws에서 CloudFormation이 AWS 서비스들의 동작을 확인할 수 있지만
EC2 내에서 개별입력된 내용을 표준화하기 어렵기 때문에 정상동작하는지 확인하기 어려움
그래서 cfn-init가 그 역할을 함.
내장 함수 Fn::Join은 지정된 구분 기호로 구분된 값 세트를 단일 값에 추가합니다. 구분 기호가 빈 문자열이면 값 세트는 구분 기호 없이 연결됩니다.
속성
AWS 서비스의 구성하는데 필요한 속성 값들 넣는곳
ami의 id이다
내가 임의대로 넣으면 안되고 AWS에 구조에 맞게 넣어야함
EC2를 만들 때 AMI의 아키텍처는 운영체제가 작동하는 방식을 말합니다. 크게 두 가지가 있습니다
x86_64 (64비트) : 대부분의 일반 서버와 PC에서 사용되는 아키텍처입니다.
ARM64 : ARM 프로세서를 사용하는 장치에서 사용되는 아키텍처로, 일부 저전력 시스템에서 사용됩니다.
즉, AMI 아키텍처는 EC2 인스턴스를 실행할 때 어떤 종류의 CPU를 사용할지를 결정하는 것입니다.
Fn::FindInMap은 3개의 인자를 받습니다:
첫 번째 인자: 맵 이름
- 값을 찾을 맵의 이름.
두 번째 인자: 찾을 키
- 맵에서 검색할 키.
세 번째 인자: 찾을 값
- (선택적) 두 번째 인자에서 찾은 값에 대해 또 다른 키를 검색할 때 사용.
yaml
Mappings:
RegionMap:
us-east-1: ami-12345
us-west-2: ami-67890
Resources:
MyInstance:
Type: AWS::EC2::Instance
Properties:
ImageId: !FindInMap [RegionMap, us-east-1, ami-default]
RegionMap에서 us-east-1 키를 찾아 ami-12345를 반환합니다.
만약 us-east-1이 없다면, 기본값인 ami-default를 반환합니다.
{
"Properties": {
"ImageId": {
"Fn::FindInMap": [
"AWSRegionArch2AMI", // 1-1. 첫 번째 맵 이름
{ "Ref": "AWS::Region" }, // 1-2. 첫 번째 맵에서 찾을 키 (리전 정보)
{ // 1-3 첫 번째 맵에서 찾을 키 (리전 정보) 안에서 찾을 키 => "HVM64"
"Fn::FindInMap": [ // 두 번째 Fn::FindInMap (중첩)
"AWSInstanceType2Arch", // 2-1. 두 번째 맵 이름
{ "Ref": "InstanceType" }, // 2-2. 두 번째 맵에서 찾을 키 (인스턴스 타입)
"Arch" // 2-3. 두 번째 맵에서 찾을 키(인스턴스 타입)의 안에서 찾을 키 ("Arch")의 값
]
}
]
}
}
}
"AWSInstanceType2Arch" : { // 두 번째 맵
"t1.micro" : { "Arch" : "HVM64" },
"t2.nano" : { "Arch" : "HVM64" },
"t2.micro" : { "Arch" : "HVM64" },
"t2.small" : { "Arch" : "HVM64" }
},
"AWSRegionArch2AMI" : { // 첫 번째 맵
"us-east-1" : {"HVM64" : "ami-0ff8a91507f77f867", "HVMG2" : "ami-0a584ac55a7631c0c"},
"us-west-2" : {"HVM64" : "ami-a0cfeed8", "HVMG2" : "ami-0e09505bc235aa82d"},
"us-west-1" : {"HVM64" : "ami-0bdb828fd58c52235", "HVMG2" : "ami-066ee5fd4a9ef77f1"},
"eu-west-1" : {"HVM64" : "ami-047bb4163c506cd98", "HVMG2" : "ami-0a7c483d527806435"},
"eu-west-2" : {"HVM64" : "ami-f976839e", "HVMG2" : "NOT_SUPPORTED"},
ex)
"Ref": "AWS::Region" => us-east-1
"Ref": "InstanceType" => t2.micro
천천히 풀어보자
1.
FindInMap : [ "AWSRegionArch2AMI", "us-east-1", "FindInMap" ]
2.
FindInMap : [ AWSRegionArch2AMI, us-east-1,
(FindInMap : [ AWSInstanceType2Arch, t2.micro, Arch ]) ]
3.
FindInMap : [ AWSRegionArch2AMI, us-east-1,
(FindInMap : [ AWSInstanceType2Arch, t2.micro, Arch ]) ]
4.
FindInMap : [ AWSRegionArch2AMI, us-east-1, HVM64 ]
5.
=> ami-0ff8a91507f77f867
AWSRegionArch2AMI(첫번째 맵) 의 키"us-east-1" (리전정보) 의
아키텍처 키{ AWSInstanceType2Arch(두번째 맵) 의 "t2.micro"(두번째 맵에서 찾을 키)의 "Arch"(세번째 키) => "HVM64" }
=> ami-0ff8a91507f77f867