AWS Cloudformation 코드 모르는거

djEjgrpgksmsrjwl·2024년 12월 18일

SK shieldus Rookies 23기

목록 보기
5/24

!Ref

https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html

Ref 내장 함수는 지정된 파라미터 또는 리소스에 대한 정보를 반환합니다.
!Ref 짧은 형식의 구문으로 사용할때 !를 붙임

!Select

https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-select.html

Fn::Select
내장 함수 Fn::Select는 인덱스별 객체 목록에서 객체 하나를 반환합니다.

JSON

{ "Fn::Select" : [ index, listOfObjects ] }

YAML

전체 함수 이름의 구문:

Fn::Select: [ index, listOfObjects ] 

짧은 형식의 구문:

!Select [ index, listOfObjects ]
  • 인덱스
    • 가져올 객체의 인덱스입니다. 이 항목은 0부터 N-1까지의 값이어야 합니다. 여기서 N은 어레이에 있는 요소의 수를 나타냅니다.
  • listOfObjects
    • 선택할 객체의 목록입니다. 이 목록은 null이 아니어야 하며 null 항목이 포함될 수 없습니다.

!GetAZs

https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-getavailabilityzones.html

Fn::GetAZs 내장 함수는 지정된 리전의 가용 영역을 알파벳순으로 나열하는 배열을 반환합니다.

AWS::CloudFormation::Init

https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/aws-resource-init.html

cfn-init

https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/cfn-init.html

aws에서 CloudFormation이 AWS 서비스들의 동작을 확인할 수 있지만
EC2 내에서 개별입력된 내용을 표준화하기 어렵기 때문에 정상동작하는지 확인하기 어려움
그래서 cfn-init가 그 역할을 함.

Fn::Join

https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-join.html

내장 함수 Fn::Join은 지정된 구분 기호로 구분된 값 세트를 단일 값에 추가합니다. 구분 기호가 빈 문자열이면 값 세트는 구분 기호 없이 연결됩니다.

Properties

속성

AWS 서비스의 구성하는데 필요한 속성 값들 넣는곳

ImageId

ami의 id이다
내가 임의대로 넣으면 안되고 AWS에 구조에 맞게 넣어야함

ec2 만들때 Ami의 아키텍쳐란

EC2를 만들 때 AMI의 아키텍처는 운영체제가 작동하는 방식을 말합니다. 크게 두 가지가 있습니다

  1. x86_64 (64비트) : 대부분의 일반 서버와 PC에서 사용되는 아키텍처입니다.

  2. ARM64 : ARM 프로세서를 사용하는 장치에서 사용되는 아키텍처로, 일부 저전력 시스템에서 사용됩니다.

즉, AMI 아키텍처는 EC2 인스턴스를 실행할 때 어떤 종류의 CPU를 사용할지를 결정하는 것입니다.

Fn::FindInMap

https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-findinmap.html

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

profile
sunseonghwan

0개의 댓글