AWS - 20 [CloudFormation]

_Block·2022년 10월 1일
0

AWS

목록 보기
21/27
post-thumbnail

🔨 개요

이떄까지 공부했던 내용은 어느정도의 자동화를 보장합니다.

하지만 예를들어 ELB같은 경우에 다른 리전에서 사용을 하려면 기존에 사용하는 ELB를 복제 할 수 없고 기존에 했던 방법으로 수동으로 만들어 주어야 합니다.

이러한 개념에서 시작을 하였고 CloudFormation은 코드를 통해서 인프라를 생성해 주기 떄문에 이를 코드형 인프라 라고 합니다.

즉 AWS서비스를 만드는에 사용하는 기능들의 인프라를 코드를 통해 설정하는 것을 의미합니다.

장점으로는 다음과 같습니다.

1. 코드형 인프라를 사용해 수동으로 생서ㅇ되는 리소스가 없어 제어하기 편하다.

모든 버전을 git으로 관리 가능하기 떄문에 버전 관리가 용이하고, 인프라의 모든 변경 사항은 코드 검토를 통해 검토합니다.

2. 비용 측면에서는 무료 입니다.

생성하는 스택에 식별자가 있어서 스택의 비용을 추적함으로써 비용이 유발되고 템플릿으로 비용을 추산 가능합니다.

예를들면 비용 절약 전략이 필요하다면 오후 5시에 템플릿을 삭제하고 오전 8시에 재 생성하는 것도 가능합니다.

3. 생산성이 뛰어납니다.

원하는 만큼 인프라를 설계 가능합니다.

일반적으로 저희가 ELB를 사용할떄 만드는 템플릿 같은 것은 CloudFormation을 뒷면에서 사용 하는 것과 같다고 할 수 있습니다.

동작하는 방식은 이와 같습니다.

S3에 업로드를 하게 되면 ColudFormation이 가져 오는데 업로드 할 떄마다 해당 템플릿은 수정이 불가능 합니다.

즉 항상 새 버전을 업로드 해야 하며 CloudFormation은 버전 차이를 파악하고 업데이트 됩니다.

스택은 이름으로 식벽이 되며 스택을 삭제한다면 모든 스택도 함께 삭제 됩니다.
- 아직 스택의 개념을 잘 이해하지 못하고 있기 떄문에 해당 구문은 이해하지 못하였습니다.

🔨 CloudFormation 리소스

CloudFormation은 리소스 블록 없이는 동작하지 않습니다.

리소스는 말 그대로 다른 AWS구성 요소를 표시하며 리소스가 선언되면 서로를 참조할 수 있습니다.

  • 즉 리소스 끼리 연결 가능합니다.

리소스 명명 규칙은 이와 같습니다.

AWS::aws-product-name::data-type-name

docs를 통해서 어떠한 리소스가 있는지 확인 가능합니다.

  • AWS서비스는 너무 방대하기 떄문에 모든 부분을 다룰 수는 없습니다.

리소스를 만들떄에는 반드시 유형과 속성을 가지고 있어야 하며 나머지 부분은 마음대로 커스텀마이징이 가능합니다.

리소스를 작성하는 것은 너무 심화과정이기 떄문에 넘어가겠습니다. 일반적으로 우리가 알고 있는 JSON파일 또는 YAML파일 형태 입니다.

🔨 CloudFormation 매개변수

매개변수는 템플릿에 입력값을 제공하는 방식입니다.

템플릿을 다른 회사나 계정, 리전에서 재사용하기 원한다면 반드시 알아야 하는 사항입니다.

  • 쉽게 말해서 함수를 짜고 input값을 받는 것과 같습니다.

입력값은 미리 결정 불가능 합니다.

🔨 CloudFormation 매핑

상수값 즉 고정 변수를 의미합니다.

하드코딩 되어야 하며 일부 값을 고정하고 할떄 사용이 됩니다.

Mapping을 선언하면서 작성이 됩니다.

Mapping:
	Mapping01:
    	key01 :
        	Name: Value01

맵핑은 사용할 값을 알고 있을떄 주로 사용이 됩니다.

  • 예를들면 AMI ID, AZ, AWS 계정 등등이 있습니다.

🔨 CloudFormation 출력

이 부분은 선택 사항입니다.

기능은 다른 스택에서 값을 불러오는 것을 말합니다.

  • 스택은 CloudFormation을 의미합니다.

즉 이러한 개념에서 접근을 하면 JS기준으로 import또는 require를 통해서 값을 불러오는 것을 의미합니다.

중요한 점은 만약 출력을 사용하고 다른 스택에서 스택에 있는 값을 참조하고 있다면 참조를 당하고 있는 스택은 삭제가 불가능 합니다.

🔨 CloudFormation 조건

조건은 리소스나 어떤 문장에 기반한 출력 생성을 제어할 떄 사용됩니다.

조건은 원하는 방식으로 설정이 가능하며 일반적으로 dev, test, prod모드 일떄 어떤 리소스를 만들거나 못 만들게 합니다.

리전 및 매개변수에 따라 다르게 사용 가능합니다.

쉽게 말하면 if문 또는 ,match와 유사하며 이런식으로 작성이 됩니다.

Conditions :
	CreateProdResources : !Equals [ !Ref EnvType, prod ]
    
해당 구문에서 만약 매개변수 값 = !Ref값이 해당 문자열 값과 같으면 전체가 참이 됩니다.

🔨 CloudFormation 드리프트

CloudFormation이 어떤 일을 하는지는 다음과 같습니다.

코드를 통해 템플릿을 만들어 인프라 구성

굉장히 편리한 기능이지만 반대로 생성한 템플릿을 수동으로 변경하는데에 보호할 수 없습니다.

즉 본인이 아닌 다른 사용자가 콘솔로 접근해 생성된 템플릿의 일부 구성을 바꿀수 있습니다.

이를 드리프트라고 합니다.

해당 드리프트를 감지하는 CLoudFormation drift기능이 있는데 모든 리소스가 지원되는 것은 아닙니다.

  • 하지만 대부분의 리소스는 지원을 합니다.

🔨 느낀점 및 설명

해당 코스는 대부분 YAML파일을 어떻게 작성을 하는지에 대한 내용이었습니다.

저 같은 경우에는 일단 YAML파일을 작성하기 보다는 읽는법에 중점을 두었습니다.

  • 시험을 준비하기 떄문에

실습 또한 후에 자격증을 취득한 뒤에 진행해볼 예정입니다.

profile
Block_Chain 개발자 입니다. 해당 블로그는 네트워크에 관한 내용을 다루고 있습니다.

0개의 댓글