<aside> <img src="notion://custom_emoji/872842ef-88e8-4d29-b9f3-5aadcf8c0cc1/1787ed89-b6d1-8082-b46e-007a6fa9e1fd" alt="notion://custom_emoji/872842ef-88e8-4d29-b9f3-5aadcf8c0cc1/1787ed89-b6d1-8082-b46e-007a6fa9e1fd" width="40px" />

!Ref (Reference)


Resources:
  MyVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16

Outputs:
  VPCId:
    Value: !Ref MyVPC

결과: "vpc-0abc123def456gh78"

</aside>

<aside> <img src="notion://custom_emoji/872842ef-88e8-4d29-b9f3-5aadcf8c0cc1/1787ed89-b6d1-8082-b46e-007a6fa9e1fd" alt="notion://custom_emoji/872842ef-88e8-4d29-b9f3-5aadcf8c0cc1/1787ed89-b6d1-8082-b46e-007a6fa9e1fd" width="40px" />

!Sub (Substitute)


Resources:
  MyBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Sub "${AWS::AccountId}-mybucket"

결과: "123456789012-mybucket"

!Sub "VPC Name: ${Environment}-${VPC}"

결과: "VPC Name: dev-vpc”

</aside>

<aside> <img src="notion://custom_emoji/872842ef-88e8-4d29-b9f3-5aadcf8c0cc1/1787ed89-b6d1-8082-b46e-007a6fa9e1fd" alt="notion://custom_emoji/872842ef-88e8-4d29-b9f3-5aadcf8c0cc1/1787ed89-b6d1-8082-b46e-007a6fa9e1fd" width="40px" />

!Join (문자열 합치기)


Outputs:
  SubnetIds:
    Value: !Join [ ",", [ "subnet-abc", "subnet-def" ] ]

결과: "subnet-abc,subnet-def"

</aside>

<aside> <img src="notion://custom_emoji/872842ef-88e8-4d29-b9f3-5aadcf8c0cc1/1787ed89-b6d1-8082-b46e-007a6fa9e1fd" alt="notion://custom_emoji/872842ef-88e8-4d29-b9f3-5aadcf8c0cc1/1787ed89-b6d1-8082-b46e-007a6fa9e1fd" width="40px" />

!Select (리스트에서 특정 값 선택)


!GetAZs와 같이 사용하면 특정 가용 영역(AZ)을 선택 할 수 있음

Resources:
  MySubnet:
    Type: AWS::EC2::Subnet
    Properties:
      AvailabilityZone: !Select [ 0, !GetAZs '' ]

결과: "ap-northeast-2a"

</aside>

<aside> <img src="notion://custom_emoji/872842ef-88e8-4d29-b9f3-5aadcf8c0cc1/1787ed89-b6d1-8082-b46e-007a6fa9e1fd" alt="notion://custom_emoji/872842ef-88e8-4d29-b9f3-5aadcf8c0cc1/1787ed89-b6d1-8082-b46e-007a6fa9e1fd" width="40px" />

!GetAZs (가용 영역 목록 가져오기)


!Select와 함께 사용해서 특정 가용 영역을 선택할 수 있음

!GetAZs ''

결과: [ "ap-northeast-2a", "ap-northeast-2b" ]

</aside>

<aside> <img src="notion://custom_emoji/872842ef-88e8-4d29-b9f3-5aadcf8c0cc1/1787ed89-b6d1-8082-b46e-007a6fa9e1fd" alt="notion://custom_emoji/872842ef-88e8-4d29-b9f3-5aadcf8c0cc1/1787ed89-b6d1-8082-b46e-007a6fa9e1fd" width="40px" />

!FindInMap (매핑 값 가져오기)


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" ]

결과: "ami-12345678"

</aside>

<aside> <img src="notion://custom_emoji/872842ef-88e8-4d29-b9f3-5aadcf8c0cc1/1787ed89-b6d1-8082-b46e-007a6fa9e1fd" alt="notion://custom_emoji/872842ef-88e8-4d29-b9f3-5aadcf8c0cc1/1787ed89-b6d1-8082-b46e-007a6fa9e1fd" width="40px" />

!GetAtt (리소스 속성 값 가져오기)


Resources:
  MyVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16

Outputs:
  VPCArn:
    Value: !GetAtt MyVPC.Arn

결과: "arn:aws:ec2:ap-northeast-2:123456789012:vpc/vpc-0abc123def456gh78"

!GetAtt MyNatGateway.AllocationId

결과: "eipalloc-12345678"

</aside>

<aside> <img src="notion://custom_emoji/872842ef-88e8-4d29-b9f3-5aadcf8c0cc1/1787ed89-b6d1-8082-b46e-007a6fa9e1fd" alt="notion://custom_emoji/872842ef-88e8-4d29-b9f3-5aadcf8c0cc1/1787ed89-b6d1-8082-b46e-007a6fa9e1fd" width="40px" />

!If (조건문)


Conditions:
  CreateProdResources: !Equals [ !Ref Environment, "prod" ]

Resources:
  MyEC2:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: !If [ CreateProdResources, "t3.large", "t3.micro" ]

<aside> <img src="notion://custom_emoji/872842ef-88e8-4d29-b9f3-5aadcf8c0cc1/1787ed89-b6d1-8082-b46e-007a6fa9e1fd" alt="notion://custom_emoji/872842ef-88e8-4d29-b9f3-5aadcf8c0cc1/1787ed89-b6d1-8082-b46e-007a6fa9e1fd" width="40px" />

!Equals (두 값 비교)


!If와 함께 사용해서 조건을 설정할 때 활용됨

Conditions:
  IsProd: !Equals [ !Ref Environment, "prod" ]

결과: true (Environment 값이 "prod"일 때)

</aside>

<aside> <img src="notion://custom_emoji/872842ef-88e8-4d29-b9f3-5aadcf8c0cc1/1787ed89-b6d1-8082-b46e-007a6fa9e1fd" alt="notion://custom_emoji/872842ef-88e8-4d29-b9f3-5aadcf8c0cc1/1787ed89-b6d1-8082-b46e-007a6fa9e1fd" width="40px" />

!Not (조건 반전)


조건이 true이면 false, false이면 true를 반환

!If와 함께 사용하면 조건을 반대로 설정할 수 있음

Conditions:
  IsNotProd: !Not [ !Equals [ !Ref Environment, "prod" ] ]

결과: