2. 사례1: 콘솔 UI 변경되면
• 인프라 관리 업무를 위한 메뉴얼을 만든다
• 열심히 캡처하고 코멘트 달고..
• 갑자기 UI가 변경되면 메뉴얼을 또 다시 만들어야한다..
2
3. 사례2: 예상치 않은 비용 청구
• “1년동안 프리티어 기간이니까 이것저것 만들고 실습해야지”
• 이것저것 여기저기 만들고
• “이제 과금 안되게 리소스 해제해야지”
• (한 달 후)
• “엥? 이게 왜 과금 된거지?”
• 인프라 리소스에는 계층과 의존 관계가 존재
• VPC를 만들고 보안 그룹을 만들고 서브넷을 만들고 그 위에 EC2를 만듬
• 나중에 이 리소스를 삭제하려면 역순으로 삭제해야함
• 만약 여기저기에 리소스를 만들었으면 삭제하기 쉽지 않다
• 리소스의 계층과 의존 관계가 정리된 설계도를 AWS에서는 스택이라고 함
3
4. 사례3: 중구난방 어수선한 인프라 관리
• AWS 인프라를 관리하는 업무를 인수 받고
• 특정 리소스가 어떤 의존 관계인지도 모르고 지워도 되는지 모름
• 리소스가 전부 따로 놀아서 개별적으로 관리
• 인프라 규모가 커지면 커질수록 수작업으로 인프라를 관리하기 어렵다
• 이제는 인프라를 거시적으로 관리할 필요가 있다
4
5. 사례4: 인프라 재구성
• 서울 Region에서 운영하던 서비스를 다른 Region에 재구성하고 싶다면?
• 직접 VPC, 네트워크, 기타 리소스를 이전과 같이 만드는게 쉽지 않다..
• 어떻게 인프라를 복제할 수 있을까?
5
7. CloudFormation
• 구축해야할 리소스를 템플릿만 작성하면 한번에 AWS 인프라 구축 가능
• 코드로 인프라를 관리
• 스택 단위로 인프라를 생성/업데이트/삭제(atomicity)
• Designer라는 WYSIWYG 편집기로 리소스를 드래그-앤-드롭
• 그냥 바로 코드로 작성하는게 더 나을지도
7
8. 코드로 인프라를 관리한다
• Infrastructure as Code(IaC)
• 코드로 인프라를 설계
• 무료!
• 실제 인프라가 구축되는 요금만 발생
8
9. 템플릿
• JSON이나 YAML 형식으로 작성
• JSON과 YAML은 상호 변환 가능
• 왼쪽의 리소스 유형에서 리소스를 선택하고 오른쪽으로 끌어 당김
9
10. 템플릿 작성
• EC2의 Instance를 끌어 당기면 아래 Resource란에 EC2 리소스가 생성됨
• Properties란에 디테일한 정보를 입력해주어야 함
10
11. 템플릿 작성
• 공식 문서를 읽어나가면서 필요한 옵션들을 추가하자
• 직접 EC2를 시작할 때 Ami를 선택하고 vpc를 선택하고 보안그룹을 추가했던 것처럼
• 모든 일련의 작업을 공식문서를 찾아보며 추가해야함
11
15. Subnet 생성
• EC2 인스턴스를 위한 Public Subnet 1a, 1b, 1c 생성
• DB를 위한 Private Subnet 1a, 1b, 1c 생성
분홍선은 Depend 속성으로, 리소스 생성의 순서를 정의할 수 있음
위 그림의 경우 VPC가 먼저 생성되고 Subnet이 생성됨 15
16. 보안 그룹 생성
• EC2 인스턴스를 위한 보안 그룹 생성
• DB를 위한 보안 그룹 생성
16
25. 클라우드 아키텍처에 따른 방식
• 멀티 클라우드, 크로스 클라우드, 하이브리드 클라우드 아키텍처의 경우
Terraform이 유리
• AWS 서비스 프로바이더만 이용하는 경우 AWS CDK가 유리
• AWS CDK는 CloudFormation을 친숙한 프로그래밍 언어로 제공
• CDK 소스를 컴파일하면 CloudFormation 템플릿이 됨
25
27. 후기
1. CloudFormation이 인프라를 자동으로 구축하는데 유용하다
2. 하지만 수동으로 처리해야할 것도 있다
3. aws-cdk를 사용한다면 CloudFormation보다 더 편리할 것이다
27
- https://github.com/younghoongo/aws-CloudFormation
소스 코드