2. 본 강연에서 다룰 내용
• AWS CloudFormation을 사용한 인프라 설계
• AWS CodePipeline의 파이프라인 설정을 위한 AWS
CloudFormation 사용 방법
• AWS CloudFormation 템플릿을 변경하면서 변경 사항을
지속적으로 스택에 전달 방법
• 데모
4. 릴리스 프로세스의 4가지 주요 단계
소스 빌드 테스트 프로덕션
• 다른
시스템과
통합 테스트
• 부하 테스트
• UI 테스트
• 모의 침투
시험
• 소스 코드
체크-인
(예: .java파일)
• 새 코드에
대해 상호
검토
• 코드 컴파일
• 유닛 테스트
• 스타일 체커
• 코드 메트릭
• 컨테이너
이미지 만들기
• 프로덕션
환경에 배포
5. 릴리스 프로세스 레벨
소스 빌드 테스트 프로덕션
지속적 통합 (Continuous Integration)
지속적 전달 (Continuous Delivery)
지속적 배포 (Continuous Deployment)
6. 릴리스 프로세스 레벨
소스 빌드 테스트 프로덕션
지속적 통합 (Continuous Integration)
지속적 배포 (Continuous Deployment)
오늘의 주제
지속적 전달 (Continuous Delivery)
8. 인프라 지속적 전달을 위해 필요한 것은
무엇인가요?
• 인프라를 코드로 취급하는 방법
• 인프라 리소스를 생성하고 업데이트하는 워크플로를
관리할 수 있는 도구
• 변경 사항을 적절히 테스트하고 결함 및 잠재적 문제가
있는지 검사하는 도구
9. 인프라 지속적 전달을 위해 필요한 것은
무엇인가요?
버전 제어와 지속적 통합과 같은
코드 및 소프트웨어 개발 기술을
사용하여 인프라를
프로비저닝하고 관리하는 방식
직접 정의한 릴리스 프로세스
모델을 기반으로 코드가 변경 될
때마다 코드를 빌드, 테스트 및
배포함으로써 변경 사항을
신속하고 안정적으로 제공
코드형 인프라 워크플로
16. 스택을 생성하거나 업데이트하기 전에 CloudFormation이
사용자를 대신하여 수행할 액션 집합을 미리 보여줌
CloudFormation 변경 집합(change set)
원본 스택
변경 집합 변경 집합 AWS CloudFormation이
스택 업데이트
1. 변경 집합
생성
2. 변경 집합
보기
3. 변경 집합
실행
변경 집합은 어떤 리소스가 생성, 업데이트 또는 대체될지
보여주며, 이를 통해서 기대하는 작업만 실행할 수 있음
17. 크로스-스택 참조 (Cross-Stack Reference)
Network Stack
Outputs:
VPC
Description: reference VPC
Value: !Ref VPC
Export:
Name: ProdVPC
App Stack
Resources:
myTargetGroup:
Type: AWS::ELBV2::TargetGroup
Properties:
VpcId:
Fn::ImportValue: ProdVPC
• 독립적인 스택간에 정보 공유 가능
• 스택 출력값(Output)을 내보내기(Export)하면, 동일 계정 및 리전내의 다른
스택에서 내보낸 값을 가져올 수 있음
18. 내포된 스택 (Nested stack)
Application
Resources:
NetworkResources:
Type: AWS::CloudFormation::Stack
Network Resources
Resources:
MyVPC
Type: AWS::EC2::VPC
ECS Service
Resources:
MyService:
Type: AWS::ECS::Service
• 여러개의 템플릿으로 구성된 단일
스택 생성
• 자주 사용되는 리소스가 있는
템플릿들을 작성하고 재사용
19. 내포된 스택과 크로스-스택 참조 비교
내포된 스택 크로스-스택 참조 (Export)
권장 사용 사례
장점
고려 사항
• 템플릿 재사용
• 여러 개의 템플릿들을
사용하지만 단일 스택으로
관리
• 범용 리소스 공유
• 리소스 수명주기나 소유권한에
기반한 독립적인 스택들 허용
• 편리한 관리 – 하나의
스택으로 모든 리소스 관리
• 생성 순서와 종속성이 관리됨
• 이해관계 및 영역 분리
• DB 및 VPC 공유
• 폭파 반경을 안전 장치로 제한
• 넓은 범위의 업데이트 및
롤백
• 커스텀 리소스 이름이 있는
템플릿 재사용
• 업데이트를 대체하려면
가져오기하는 스택에서 변경이
필요함
• 생성 순서를 직접 관리해야 함
21. Amazon ECS기반의 마이크로서비스
애플리케이션
ECS 서비스 (웹사이트-서비스 및 프로덕트-서비스)로
배포 된 상호 연결된 두 개의 마이크로 서비스
자동 확장 기능을 통해 여러 가용 영역에 배포 된 고
가용성 ECS 클러스터에서 애플리케이션 실행
Github에서 다운로드 가능: github.com/awslabs/ecs-refarch-cloudformation
22. 참조 아키텍처
퍼블릭 서브넷
프라이빗 서브넷
가용 영역 #1
인터넷
게이트웨이
퍼블릭 서브넷
프라이빗 서브넷
가용 영역 #2
애플리케이션 로드 밸런서
NAT 게이트웨이NAT 게이트웨이
ECS 클러스터
CloudWatch Logs (컨테이너 로그)
ECS 호스트 ECS 호스트 ECS 호스트 ECS 호스트자동 확장 그룹
github.com/awslabs/ecs-refarch-cloudformation
23. 샘플 애플리케이션 살펴 보기
1 애플리케이션을 필요한 AWS 리소스에 맞게 분해
2 관리 요구 사항에 따라 CloudFormation 템플릿 생성
지속적인 전달 파이프라인 모델링3
아키텍처를 반복하면서 지속적으로 인프라 변경 사항을 전달4
파이프라인에 대한 변경을 모델링, 프로비저닝 및 관리하기 위해 CloudFormation 사용!
24. AWS 리소스 유형으로 분해
NAT
게이트웨이
Elastic IP
디폴트
퍼블릭 라우트
퍼블릭 서브넷#1프라이빗 서브넷#1
디폴트
프라이빗
라우트
프라이빗
라우팅
테이블
NAT
게이트웨이
Elastic IP
퍼블릭 서브넷#2프라이빗 서브넷#2
디폴트
프라이빗
라우트
프라이빗
라우팅
테이블
가용영역#1가용영역#2
VPC
인터넷
게이트웨이
퍼블릭
라우팅 테이블
로드 밸런서
보안 그룹
ECS 호스트
보안 그룹
애플리케이션
로드 밸런서
로드 밸런서
리스너
로드 밸런서
디폴트 타겟그룹
ECS 클러스터
자동 확장 그룹
자동 확장
시작 구성
ECS (IAM) 역할
IAM
인스턴스 프로파일
ECS 서비스
ECS 작업 정의
CloudWatch
로그 그룹
타겟그룹
리스너 규칙
서비스 역할
ECS 서비스
ECS 작업 정의
CloudWatch
로그 그룹
타겟그룹
리스너 규칙
서비스 역할
네트워크 보안 로드 밸런싱
프런트-엔드
서비스
ECS
클러스터
백-엔드
서비스
25. 논리적인 그룹 기반으로 CloudFormation
템플릿 작성
템플릿 설명
네트워크 VPC, AZ, 서브넷, 라우팅, NAT 및 인터넷 게이트웨이
보안 그룹 애플리케이션을 위한 보안 그룹
로드 밸런서 퍼블릭 서브넷에 배포된 ALB
ECS 클러스터 프라이빗 서브넷에 배포된 ECS 클러스터
백-엔드 서비스 백-엔드 애플리케이션에 대한 ECS 서비스 및 작업 정의
프런트-엔드 서비스 웹페이지에 대한 ECS 서비스 및 작업 정의
26. 구성이 상호 연결되도록 템플릿 설정
네트워크
템플릿
보안
템플릿
로드 밸런싱
템플릿
프런트-엔드
템플릿
ECS 클러스터
템플릿
백-엔드 서비스
템플릿
출력
(Output)
로드 밸런서
리스너
로드 밸런서
DNS 이름
ECS 클러스터
ECS 호스트
보안 그룹
로드 밸런서
보안 그룹
VPC
퍼블릭
서브넷
프라이빗
서브넷
29. 인프라에 지속적 전달 적용
빠르고 신뢰성 있는 애플리케이션 및 인프라 업데이트를
위한 지속적 전달 서비스
코드 변경이 있을 때마다 빌드, 테스트 및 배포
AWS CloudFormation을 위한 내부 액션들
AWS
CodePipeline
30. 이것이 어떻게 릴리즈 단계와 결합될까요?
소스 테스트 배포
CloudFormation
템플릿을 위한 소스
단계로 AWS
CodeCommit, S3 및
GitHub 가능
실행하기 앞서
CloudFormation의 변경
집합을 사용하여
배포 검증
스택 또는 변경
집합을 생성,
업데이트 및 삭제
31. 파이프라인 모델링 하기
애플리케이션과 인프라 코드에서 더
자주 반복
개발환경에서 새 버전을 시작해보고
프러덕션에서 실행
자신의 영역마다 네트워크 리소스를
별도로 관리
샌드 박스와 프러덕션 네트워크
환경을 반영하고 따로 관리
프러덕션
VPC, 보안 그룹, 로드
밸런싱
샌드 박스
VPC, 보안 그룹, 로드
밸런싱
프러덕션
ECS 클러스터 ,
애플리케이션 프런트-
엔드 & 백-엔드
개발
ECS 클러스터 ,
애플리케이션 프런트-
엔드 & 백-엔드
애플리케이션 파이프라인네트워크 리소스 파이프라인
32. 네트워크 리소스용 파이프라인
소스 레포지토리
샌드박스/개발 환경을 위한
네트워킹 리소스
개별 스택. 종속성을 고려한
순서
프러덕션 환경의 변경을 미리보기 위한
변경 집합
변경이 프러덕션에 적용되기 전에
수동 승인
프러덕션에 변경 적용
1
2
3
4
5
33. 애플리케이션용 파이프라인
새 버전이 게시되는 즉시 실행되는
파이프라인
테스트를 실행하고, 완료되면
개발 환경을 제거. 사용하지
않는 인스턴스에 대한 요금이
부과되지 않음
리소스 수정 또는 교체가 예상대로
이루어지는지 검토
프러덕션에 변경 사항을 지속적으로
전달
1
2
3
4
34. CloudFormation을 이용하여 파이프라인 생성
및 관리
파이프라인 아티팩스 저장소
S3 버킷
파이프라인 알림
SNS 이메일 알림
파이프라인 IAM 역할
파이프라인을 설정하기 위한 CloudFormation 템플릿
크로스-스택 참조를
사용해서 별도의 스택
안에서 IAM 리소스
프로비저닝 가능
35. CloudFormation을 이용하여 파이프라인 생성
및 관리
CloudFormation를 제공자로 선택하여 ‘배포’
작업 선택
CloudFormation의 여러 액션 모드 활성화
– REPLACE_ON_FAILURE는 스택이 없을 경우 새로 생성하거나,
있으면 업데으트하고, 실패 상태에 있으면 그것을 대체한다
템플릿 구성 파일을 사용하거나 파이프라인을
정의하는 템플릿 내에서 매개 변수 지정 가능
스테이지
액션
액션 구성
CloudFormation 템플릿 이름
38. FIN, ACK
소프트웨어 릴리스 프로세스를 통해서 코드형 인프라를
작성하고 지속적으로 전달하는 방법을 살펴보았습니다:
• 인프라를 템플릿과 스택으로 분해하는 다양한 방법
• 인프라를 위한 지속적인 전달 파이프라인 생성 및 관리
• 빠른 속도와 높은 품질로 변경 사항을 환경에 전달
39. 본 강연이 끝난 후…
읽을 만한 자료!
• 지속적 전달: https://aws.amazon.com/devops/continuous-delivery/
• CodePipeline: https://aws.amazon.com/documentation/codepipeline/
• CloudFormation 스택을 위한 지속적 전달:
http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/continu
ous-delivery-codepipeline.html
• CloudFormation 샘플 템플릿:
https://aws.amazon.com/ko/cloudformation/aws-cloudformation-templates/