Infrastructure as Code(코드형 인프라)
: 작성할 코드를 배포하고 순서대로 업데이트를 생성해 인프라를 삭제한다.
: 모든 리소스에 관한 AWS 인프라 개요를 선언하는 방식으로 대부분 지원
- CloudFormation은 어떤 경우에도 Amazon S3의 템플릿을 참조한다. AWS 콘솔에서 템플릿을 업로드하면 배후에서 Amazon S3에 업로드되고 CloudFormation은 거기에서 해당 템플릿을 참조한다.
Benefits
Infrastructure as code
- 코드형 인프라를 사용해 수동으로 생성되는 리소스가 없어 제어하기 좋다.
- 모든 코드는 Git과 같은 것으로 버전 관리를 할 수 있어 CloudFormation의 버전 관리를 할 수 있다.
- 인프라의 모든 변경 사항은 코드 검토를 통해 검토한다.
Cost
- CloudFormation 자체는 무료히지만 생성한 모든 스택에는 식별자가 있어 손쉽게 스택의 비용을 추적할 수 있다.
- CloudFormation 템플릿으로 리소스 비용을 추산할 수 있다.
- 코드형 인프라이기 때문에 모두 다시 생성할 수 있고 많은 비용을 절약할 수 있다.
Productivity
- 원하는 만큼 즉흥적으로 인프라를 삭제하고 재생성 할 수 있다.
: AWS에 새 버전의 템플릿을 업로드하면 CloudFormation에서 버전1과 2의 차이점을 파악하고 업데이트에 필요한 것을 파악한다.
- 스택을 삭제하면 모든 단일 Artifact와 CloudFormation에서 생성한 모든 스택도 함께 삭제된다.
- 수동으로 템플릿을 수정하거나 CloudFormation designer와 콘솔에 매개변수를 입력한다.
- 자동으로 텍스트 에디터를 사용해 YAML 파일에서 템플릿을 수정하고 템플릿 배포에 Amazon CLI를 사용한다.
Resources
: 리소스를 지정하지 않으면 CloudFormation 템플릿이 실행되지 않는다.
- 동적인 코드 생성을 가질 수 없다.
- 대부분의 AWS 서비스를 지원한다.
Parameters
: 사용자가 템플릿을 참조하도록 템플릿에 요청할 수 있는 동적 입력값
- ClouFormation 리소스 구성이 향후에 바뀔 가능성이 있는 경우 매개변수를 사용한다.
- Fn::Ref 매개변수, 리소스를 참조할 때 사용(리소스를 참조하는 경우 물리적 ID를 반환)
- YAML에서는 참조 함수를 줄여서 !Ref 로 사용
- Fn::GetAtt를 사용하여 리소스의 속성을 얻을 수 있다.
Pseudo Parameters
: AWS에서 제동하는 매개변수로 기본값이 활성화되었을 때 사용 가능하며 필요한 다양한 값을 얻을 수 있다.
Mappings
: 템플릿의 정적 변수
- 사용자 환경에 따라 일부 값을 하드 코딩해야 할 때 유용
- Fn::FindInMap
- !FindInMap [ MapName, TopLevelKey, SecondLevelKey ]
매핑과 파라미터는 언제 사용해야 할까?
사용할 모든 값을 미리 알고 있을 때 매핑을 사용하고 사용자가 입력한 값이 무엇일지 사전에 알 수 없는 경우 파라미터를 사용한다.
Outputs
: 템플릿에서 일부를 내보내면 다른 템플릿에서 참조
- CloudFormation 출력을 사용하고 이들이 다른 CloudFormation 스택에서 참조된다면 다른 곳에서 참조 중인 출력이 있는 스택을 삭제할 수 없다.
- Fn::ImportValue를 사용하여 다른 템플릿의 출려으로 내보내기 된 값들을 가져올 때 사용
Conditionals
: 리소스나 어떤 논리 문장에 기반한 출력의 생성을 제어할 때 사용
- Fn::And, Fn::Equals, Fn::If, Fn::Not, Fn::Or
Additional
- Fn::Join(python의 join 함수 생각하면 됨)
- Fn::Sub(문자열에서 값을 바꿀 때 유용)
Rollbacks
- 스택 생성에 실패하면, 스택을 업로드하는데 스택 생성에 실패하는 경우 기본적으로 모든 항목이 롤백된다.(로그를 보며 상황 파악 가능)
- 스택 업데이트에 실패하면 스택은 알려진 이전 작업 상태로 자동으로 롤백
Stack Notifications
: CloudFormation 스택에 발생하는 이벤트를 지정된 SNS 주제에 알림으로 전송하기 위해서는 스택 옵션으로 가서 SNS 통합 사용을 설정하면 된다.
- Lambda 함수를 사용하면 특정 이벤트만 필터링할 수 있다.
ChangeSet
: 어떤 변경 사항이 발생하는지 알 수 있다.
Nested Stacks
: 반복되는 패턴의 공통 구성 요소를 업데이트하고 이들을 다른 스택에서 호출
Cross vs Nested Stacks
교차 스택은 스택의 수명 주기가 서로 다를 때에 유용하고 중첩 스택은 구성 요소가 재사용 및 재생성되어야 할 때에 유용하다.
StackSets
: 여러 계정과 여러 리전에 스택을 적용할 수 있다.
- StackSet을 업데이트하면 연결된 모든 리전과 계정에 대한 스택 인스턴스 또한 업데이트된다.
Drift
: 본인이 아닌 다른 사용자가 콘솔로 접근하여 CloudFormation으로 생성된 일부 리소스 구성을 변경
Stack Policies
: 스택 또는 스택 일부를 업데이트로부터 보호
- JSON 문서이며 스택 업데이트 중에 특정 리소스에 허용되는 업데이트 작업을 정의