Infrastructure as Code
- 수동 작업의 경우 모든 걸 하나하나 만들어서 재생산하기 쉽지 않고
다른 리전, 동일 리전이나 계정에서 모든 데이터가 삭제됐을 경우 작업을 다시 하기 쉽지 않음 - 이를 위해 코드형 인프라를 통해 인프라가 코드로 되어 있어 코드를 항상 배포하고, 생성하고, 업데이트하고, 삭제하는 것으로
인프라를 개선하도록 하며 CloudFormation이 이러한 일을 함
What is CloudFormation
- AWS 인프라를 구성하는 선언형 방식
- 모든 리소스에 대한 AWS 인프라를 선언형으로 구성할 수 있으며 리소스의 대부분은 지원됨
- 예) 보안 그룹을 이용할 EC2 머신 두개가 있으며, 이 머신들이 이용할 두 탄력적 IP, S3 버킷, NLB가 필요한 것을
CloudFormation 템플릿에 이 모든 사항을 지정하고 CloudFormation에서 실행하면
CloudFormation이 모든 인프라를 올바른 순서에 따라 지정한 구성대로 자동으로 생성
Benefits of AWS CloudFormation
- 코드형 인프라이기 때문에 어떤 리소스도 수동으로 만들 필요 없이 제어하기 쉽고 Git 등을 통해 버전을 관리할 수 있음
- 인프라의 변화는 코드를 통해 검토됨
- 스택 내의 각 리소스가 CloudFormation 식별자로 태그되어 전체 CloudFormation 스택의 비용이 얼마나 될지 알 수 있음
- CloudFormation 템플릿을 통해 리소스 비용을 예측하는 기능도 존재
예) 비용 절감 전략을 위해 Dev 내에서 자동으로 모든 템플릿을 오후 5시에 삭제하고 오후 8시에 안전하게 재생성하도록 함 - 재생산으로 그때그때 클라우드에서 인프라를 삭제하고 재생성할 수 있게 되고 템플릿에 대한 도표를 자동 생성할 수 있으므로
PowerPoint 자료를 생성할 때 유용 - 선언형 프로그래밍이 간으해 순서나 오케스트레이션 등이 필요 없음
- 관심 분리도 가능해 원하는 만큼 스택을 생성할 수 있음
예) 보통 애플리케이션에 한 스택과 여러 레이어가 필요한데, VPC 스택, 네트워크 스택, 애플리케이션 스택처럼 여러 스택 생성 - 시간을 낭비할 필요 없이 웹의 기존 템플릿을 활용하거나 참고 자료를 활용할 수 있음
- AWS 프로덕션에 있어 CloudFormation은 아주 유용한 서비스
How CloudFormation Works
- 템플릿을 S3에 업로드한 뒤에 CloudFormation에서 참조하게 되며
템플릿을 업데이트할 때는 이전 것을 편집할 수 없고 템플릿의 새 버전을 AWS에 재업로드해야 함 - CloudFormation 스택은 이름으로 식별됨
- CloudFormation에서 스택을 지우면 그 스택으로 만들어진 모든 것이 삭제되므로 리소스를 깔끔하게 삭제할 수 있음
Deploying CloudFormation templates
- CloudFormation Designer에서 템플릿을 수정하고 콘솔로 매개 변수 등을 넣는 수동 방법과
YAML 파일에서 템플릿을 수정하는 자동 방법이 존재 - 전체 자동화를 원한다면 CLI를 사용해 템플릿을 배포할 수 있음
CloudFormation Building Blocks
- CloudFormation의 구성 요소 (Templates components)
- Resources : 필수 요소인 리소스는 템플릿에서 사용될 AWS 리소스를 선언함
- Parameters : 템플릿에 동적 입력이 필요할 때 쓰이는 파라미터
- Mappings : 템플릿의 정적 변수인 매핑
- Output : 생성된 것에 대한 참조인 출력
- Conditionals : 리소스를 생성할 조건 목록인 조건
- Metadata
- CloudFormation 헬퍼 (Template helpers)
- References : 참조
- Functions : 함수
CloudFormation - StackSets
- 여러 리전과 계정을 통틀어 CloudFormation 스택을 생성, 업데이트, 삭제하게 해주는 고급 기능
- 관리자가 StackSets를 생성한 후 스택 인스턴스를 생성, 업데이트, 삭제할 수 있는 신뢰된 계정을 정하게 됨
- StackSets를 업데이트하면 모든 계정과 리전 내의 관련 스택 인스턴스가 전부 업데이트됨
- 즉, 여러 리전과 여러 계정을 관리하는 CloudFormation의 관리 포털이라고 할 수 있음
- 예) StackSets를 정의한 관리자 계정이 us-east-1의 계정 A와 ap-south-1의 계정 A에 각자 배포할 수 있음
즉, 다른 리전에서도 작동한다는 것으로 글로벌, 계정 간 배포가 가능함
<CloudFormation 실습>
- 스택 생성
CloudFormation은 해당 리전에서만 템플릿을 이용할 수 있게 만들었으므로 버지니아 리전을 선택하고 서비스에 접속
이 후 첫 스택을 만들기 위해서는 세 가지 선택지로
미리 템플릿을 준비하거나 AWS가 제공하는 샘플 템플릿을 이용하거나 Designer에서 그래픽으로 템플릿을 생성할 수 있음
템플릿이 준비되어있을 경우 파일을 S3에 미리 업로드해두거나 직접 파일을 업로드할 수 있음
이를 위해 0-just-ec2 파일로 작업하기 위해 EC2 인스턴스를 생성하는 파일을 업로드를 하면
이 파일은 Designer 안에서 시각 자료로 볼 수 있고 파일의 용도와 목적, 리소스 유형, 리소스 속성을 간략하게 볼 수 있음
이후 스택 이름을 MyDemoTemplate라고 정한 후 파라미터 없이 생성
새로고침을 하면 MyInstance가 CREATE_IN_PROGRESS에 있고 리소스 생성이 시작됐다고 하므로
EC2 콘솔 내 인스턴스로 가게 되면 경과를 확인할 수 있음
이를 보게 되면 AMI ID가 CloudFormation 템플릿에서 지정한 ID, 인스턴스 유형, 리전이 동일함을 볼 수 있음
생성이 완료되고 나면 MyInstance가 CREATE_COMPLETE로 변하게 되고
CloudFormation 스택에서 스택 이름이 생성되고 생성 시간까지 표시됨
또한 EC2의 태그에서 CloudFormation이 추적할 수 있는 키와 값인 템플릿을 기반으로 생성된 MyInstance를 추가해뒀으므로
스택 ID를 볼 수 있고 스택 이름과 리소스의 논리적 ID도 볼 수 있게 됨
- 템플릿 업데이트
스택 업데이트를 누르면 현재 템플릿을 새로 업로드한 파일로 대체할 수 있으므로 1-ec2-with-sg-eip 파일을 업로드
이 파일을 Designer로 보게 되면 EC2 인스턴스가 탄력적 IP(EIP)에 연결되어 있으며 보안 그룹도 두 가지가 있음
즉 탄력적 IP가 MyInstance라는 EC2 인스턴스에 연결돼 있고 이 인스턴스는 두 보안 그룹을 참조한다는 것을 알 수 있음
또한 템플릿을 보게 되면 파라미터에 보안 그룹 설명, 템플릿에 동적으로 정보를 입력할 수 있는 문자열 유형이 있음을 알 수 있음
리소스로는 여전히 EC2 인스턴스가 있는데 보안 그룹 속성이 추가됐고 두 다른 보안 그룹을 참조하고 있음
탄력적 IP도 있는데 이전에 만들어진 MyInstance를 참조하고 있음
보안 그룹이 있고 EC2 유형 보안 그룹이므로 포트 22를 통한 SSH 접속을 활성화하였음
보안 그룹 수신 규칙도 있으며 포트 22에서라면 어떤 IP든 포트 22에 대한 TCP 권한이 있음
두 번째 보안 그룹은 마찬가지로 보안 그룹 설명을 참조하며 포트 80은 어디서든 갈 수 있다는 것고
나머지는 192.168.1.1/32 IP로만 포트 22에 갈 수 있다는 것을 뜻함
마지막으로 수정 사항을 미리 볼 수 있는데 새로운 템플릿으로 인해 EC2 인스턴스는 수정/대체될 것이며
탄력적 IP가 추가될 것이고 SSH 보안 그룹과 서버 보안 그룹이 추가될 것임
이후 파라미터 없이 MyDemoTemplate 수정 업데이트
스택이 업로드되면 UPDATE-IN-PROGRESS 상태가 되며
CloudFormation이 알아서 무엇을 언제 얼마나 빠르게 어떤 순서로 생성하는지 등을 파악하게 되어
보안 그룹 생성이 완료되며 새 인스턴스를 만들기 위해 이전의 MyInstance는 종료됨을 볼 수 있음
즉, 새 인스턴스가 생성되고 업데이트된 후에는 탄력적 IP를 생성하고 새 MyInstance를 연결한 뒤 이전 EC2 인스턴스를 삭제
이를 확인하기 위해 EC2 인스턴스로 가게 되면
이전의 EC2 인스턴스는 삭제되고 새 인스턴스가 생성되며 탄력적 IP 값이 있고 보안 그룹이 두 개 연결되어 있음을 볼 수 있음
또한 보안 그룹 설명으로 가게 되면 아까 입력한 템플릿의 파라미터 값이 인바운드 규칙에 나타나고
CloudFormation에 의해 태그도 되어 있음을 볼 수 있음
이처럼 CloudFormation이 나를 대신하여 모든 것을 관리해준 것
마지막으로 업데이트된 리소스를 보게 되면 이전의 EC2만 있는 것이 아니라 EIP, 보안 그룹 두 개가 있게 됨
'Cloud > AWS' 카테고리의 다른 글
[SAA] EMR (0) | 2022.05.06 |
---|---|
[SAA] Step Function 및 SWF (0) | 2022.05.06 |
[SAA] CICD 소개 (0) | 2022.05.06 |
[SAA] 기타 서비스 (0) | 2022.05.03 |
[SAA] Bastion 호스트 고가용성 (0) | 2022.05.03 |