Search

CloudFormation Function

한 눈에 보기
!Ref (Reference)
리소스나 파라미터의 값을 참조하는 함수
주로 Parameters 또는 Resources의 값을 가져올 때 사용됨
Resources: MyVPC: Type: AWS::EC2::VPC Properties: CidrBlock: 10.0.0.0/16 Outputs: VPCId: Value: !Ref MyVPC
YAML
복사
결과: "vpc-0abc123def456gh78"
!Sub (Substitute)
문자열을 동적으로 생성하는 함수
변수를 사용해 리소스 이름을 동적으로 설정할 때 유용함
Resources: MyBucket: Type: AWS::S3::Bucket Properties: BucketName: !Sub "${AWS::AccountId}-mybucket"
YAML
복사
결과: "123456789012-mybucket"
!Sub "VPC Name: ${Environment}-${VPC}"
YAML
복사
결과: "VPC Name: dev-vpc”
!Join (문자열 합치기)
리스트의 값을 특정 구분자로 연결하는 함수
주로 서브넷 ID 리스트, 보안 그룹 리스트 등을 하나의 문자열로 합칠 때 사용됨
Outputs: SubnetIds: Value: !Join [ ",", [ "subnet-abc", "subnet-def" ] ]
YAML
복사
결과: "subnet-abc,subnet-def"
!Select (리스트에서 특정 값 선택)
리스트에서 특정 인덱스의 값을 가져오는 함수
!GetAZs와 같이 사용하면 특정 가용 영역(AZ)을 선택 할 수 있음
Resources: MySubnet: Type: AWS::EC2::Subnet Properties: AvailabilityZone: !Select [ 0, !GetAZs '' ]
YAML
복사
결과: "ap-northeast-2a"
!GetAZs (가용 영역 목록 가져오기)
현재 리전의 가용 영역(AZ) 목록을 가져오는 함수
!Select와 함께 사용해서 특정 가용 영역을 선택할 수 있음
리전을 생략하면 현재 스택이 실행 중인 리전의 AZ를 반환
!GetAZs ''
YAML
복사
결과: [ "ap-northeast-2a", "ap-northeast-2b" ]
!FindInMap (매핑 값 가져오기)
Mappings에서 특정 값을 조회하는 함수
리전별 AMI ID와 같은 정보를 저장하고 가져올 때 유용함
Mappings: RegionMap: ap-northeast-2: AMI: "ami-12345678" us-east-1: AMI: "ami-87654321" Resources: MyEC2: Type: AWS::EC2::Instance Properties: ImageId: !FindInMap [ "RegionMap", "ap-northeast-2", "AMI" ]
YAML
복사
결과: "ami-12345678"
!GetAtt (리소스 속성 값 가져오기)
특정 리소스의 속성을 참조하는 함수
주로 VPC ID, 서브넷 ID, 보안 그룹 ID, NAT 게이트웨이의 할당 ID 등을 가져올 때 사용
Resources: MyVPC: Type: AWS::EC2::VPC Properties: CidrBlock: 10.0.0.0/16 Outputs: VPCArn: Value: !GetAtt MyVPC.Arn
YAML
복사
결과: "arn:aws:ec2:ap-northeast-2:123456789012:vpc/vpc-0abc123def456gh78"
!GetAtt MyNatGateway.AllocationId
YAML
복사
결과: "eipalloc-12345678"
!If (조건문)
Conditions을 기반으로 다른 값을 반환하는 함수
주로 특정 환경(dev/prod)에 따라 리소스 설정을 다르게 할 때 사용됨
Conditions: CreateProdResources: !Equals [ !Ref Environment, "prod" ] Resources: MyEC2: Type: AWS::EC2::Instance Properties: InstanceType: !If [ CreateProdResources, "t3.large", "t3.micro" ]
YAML
복사
"prod" 환경이면 "t3.large"
아니면 "t3.micro"
!Equals (두 값 비교)
두 값이 같은지 비교하여 true 또는 false 반환
!If와 함께 사용해서 조건을 설정할 때 활용됨
Conditions: IsProd: !Equals [ !Ref Environment, "prod" ]
YAML
복사
결과: true (Environment 값이 "prod"일 때)
!Not (조건 반전)
조건이 true이면 false, false이면 true를 반환
!If와 함께 사용하면 조건을 반대로 설정할 수 있음
Conditions: IsNotProd: !Not [ !Equals [ !Ref Environment, "prod" ] ]
YAML
복사
결과:
"prod"이면 false
"prod"이 아니면 true