1. 인프라 환경 자동화
1.1 수동 구성의 문제점
- 관리 콘솔을 통해 AWS 서비스와 리소스를 생성 및 구성하는 것이 수동 프로세스
- 수동 프로세스의 문제점과 우려 사항
ㅇ 안정성
ㅇ 재현 가능성
1.2. 환경 자동화 모범 사례
안티 패턴 |
모범 사례 |
|
|
- 수동 프로세스를 제거하면 시스템의 확장성 및 일관성과 조직의 효율성을 개선할 수 있음
1.3. 삭제 가능한 리소스 사용
안티 패턴 |
모범 사례 |
시간이 지나면서 여러 서버가 서로 다른 구성을 갖게 됨 |
동일한 구성으로 새 리소스 배포를 자동화 함 |
필요 없을 때도 리소스가 실행 됨 |
미사용 리소스를 종료 |
하드코딩된 IP 주소로 유연성이 감소 |
새로운 IP 주소로 자동 전환 |
사용 중인 하드웨어에 새로운 업데이트를 테스트하기 어렵고 불편함 |
새 리소스에 대한 업데이트를 테스트한 후, 이전 리소스를 업데이트된 리소스로 대체 |
1.4. 코드형 인프라란?
- 재사용, 유지 관리, 확장 및 테스트 가능한 인프라를 생성하는 데 적용되는 소프트웨어 개발 기술, 사례 및 도구
- 인프라를 소프트웨어처럼 구축 및 운영
1.5 인프라를 코드로 취급할 때의 이점
1.5.1. 반복성 및 재사용성
- 인프라를 코드형으로 구축하는 경우, 환경을 구축하면서 반복성과 재사용성의 이점을 활용 가능
- 템플릿 하나로 복잡한 동일 환경을 반복해서 구축할 수 있음
- AWS에서 이를 사용하는 경우, 조건에 따라 다른 환경을 생성할 수 있음
- 즉 생성했던 환경의 컨텍스트에 맞게 환경이 구축되도록 할 수 있음.
- 예: 템플릿이 개발 환경 또는 프로덕션 환경에서 시작되었는지에 따라 서로 다른 AMI가 사용되도록 템플릿을 설계할 수 있음.
1.5.2. 유지 관리성, 일관성 및 병렬화
- 인스턴스 스택에 새로운 보안 그룹을 추가하도록 템플릿이 업데이트 됨
- 환경을 시작하는데 사용된 템플릿 하나만 변경하면, 모든 네 개의 환경에 새로운 보안 그룹 리소스가 추가됨
- 이 작업은 리소스의 간편한 유지 관리성 뿐만 아니라 뛰어난 일관성과 병렬화를 통한 필요한 작업 감소라는 이점 제공
2. AWS의 코드형 인프라
2.1. CloudFormation 개요
- JavaScript Object Notation (JSON), YAML 형식의 템플릿을 통해 AWS 리소스를 시작, 구성 및 연결할 수 있음
2.2. CloudFormation 템플릿 사용 방법
docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/Welcome.html
- 간단한 JSON 텍스트 편집기
- VisualOps.io
ㅁ APN 파트너 도구
ㅁ CloudFormation 템플릿 용 WYSIWYG 편집기
- CloudFormation Designer
ㅁ AWS Management Console을 통해 사용 가능
ㅁ 디자인 영역으로 리소스를 끌어서 놓는 방법으로 JSON 형식의 CloudFormation 템플릿을 자동으로 생성할 수 있음
ㅁ 같은 페이지에서 JSON 템플릿의 속성을 수정
ㅁ CloudFormation Designer 도구를 사용하여 기존 CloudFormation 템플릿을 열고 수정 가능
2.3 템플릿을 통한 리소스 그룹화
- 소유권과 애플리케이션 수명 주기를 기준으로 CloudFormation 템플릿에 리소스를 지정
- 최소화: 네트워크 리소스, 보안 리소스 및 애플리케이션 리소스를 자체 템플릿으로 분리해야 함
- 의도적으로 해당 리소스 유형을 중앙에서 제어하려는 것이 아닌 한, 같은 유형의 리소스에 대한 단일 템플릿을 애플리케이션 전체에서 공유하면 안됨
ㅁ 예: 하나의 템플릿을 사용하여 애플리케이션 10개의 보안 그룹을 정의하지 말 것
- 보안 리소스가 포함된 템플릿을 다른 템플릿과 별도의 저장소에 저장해야 함.
2.4. CloudFormation 그룹 예시
- 5개의 템플릿, 즉 프런트 엔드, 백엔드 서비스, 공유 서비스, 기본 네트워크 서비스, 자격 증명 리소스로 그룹화됨.
- CloudFormation 템플릿으로 번들링하는 방법 고민 시 리소스를 소프트웨어인 것처럼 구성하는 것이 좋은 지침
- 인프라에서 밀접하게 연결된 구성 요소를 생각해 보고, 이러한 구성 요소를 같은 템플릿에 넣음
2.5. CloudFormation 템플릿 구조
2.5.1. Description
- Cloud Formation 템플릿 구조 상세 내용
2.5.2. 메타데이터
- AWS::CloudFormation::Init
ㅁ Cfn-init 헬퍼 스크립트에 대한 구성 작업 정의
ㅁ 이 스크립트는 EC2 인스턴스에 애플리케이션을 구성 및 설치하는 데 유용
- AWS::CloudFormation::Interface
ㅁ 입력 파라미터가 AWS CloudFormation 콘솔에 표시될 때의 순서와 그룹을 정의
ㅁ 기본적으로 AWS CloudFormation 콘솔은 파라미터를 논리적 ID에 따라 알파벳순으로 정렬
- AWS::CloudFormation::Designer
ㅁ 리소스가 AWS CloudFormation Designer에 어떻게 배치되는지 정의
ㅁ Designer는 사용자가 이를 사용하여 템플릿 생성 및 업데이트하려고 할 때 해당 정보를 자동으로 추가
- Cloud Formation 메타데이터 상세 내용
ㅁ https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/metadata-section-structure.html
2.5.3. Parameter
- 파라미터는 값과 값에 대한 제약 조건을 정의하는 속성 목록 포함
- 유일한 필수 속성은 Type이며 이는 String, Number또는 commaDelimetedList가 될 수 있음
- 사용자에게 어떤 종류의 값을 지정해야 하는지 말해주는 Description 속성 추가 가능
- 사용자가 Create Stack 마법사의 템플릿을 사용하면, 파라미터의 이름과 설명이 Specify Parameters 페이지에 표시
- Cloud Formation 파라미터 상세 내용
- 파라미터 예시
ㅁ 이 예에서는 InstanceTypeParameter가 기본 Amazon EC2 인스턴스 유형을 t2.micro로 지정
ㅁ 사용자가 템플릿을 호출할 때 t2.micro, m1.small 또는 m1.large 인스턴스 유형 중 선택할 수 있도록 허용
ㅁ 템플릿을 시작할 때 CloudFormation 콘솔에 표시되는 설명을 제공
2.5.4. Mapping
- 매핑을 사용하면 특정 조건에 따라 리소스의 속성을 사용자 정의 가능하며 이를 통해 템플릿이 시작되는 방법에 대한 세분화된 제어가 가능
- 매핑 상세 내용
ㅁ https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/mappings-section-structure.html
- 매핑 예시
ㅁ 이 매핑이 특정 리전 내에서 시작된 인스턴스 유형을 기준으로 AMI를 지정
2.5.5. Condition
- 선택적 Condition 섹션은 리소스가 생성되는 시점 또는 속성이 정의되는 시점을 정의하는 문을 포함
- 한 값이 다른 값과 같은지 비교 가능
- 해당 조건의 결과에 따라 조건부로 리소스를 생성 가능
- 조건이 여러 개일 때 쉼표로 이를 분리
- 리소스를 생성할 수 있는 템플릿을 다른 컨텍스트에서 재사용하고 싶을 때 조건을 사용할 수 있음
- Production 환경에서는 특정 성능의 Amazon EC2 인스턴스를 포함할 수 있으나 테스트 환경에서는 비용 절감을 위해 좀 더 낮은 성능을 사용
- 조건을 사용하면 환경 유형별로 어떤 리소스를 생성하고 어떻게 구성할지 정의 가능
- Condition 생성 및 사용하는 방법 상세 내용
- Conditions를 사용하여 환경 구축 예시
2.5.6. 리소스
- 필수 Resource 섹션은 Amazon EC2 인스턴스 또는 Amazon S3 버핏과 같이 스택에 포함/생성되는 AWS 리소스를 선언
- 각 리소스를 개별적으로 선언해야 하나 같은 유형의 여러 리소스를 지정할 수 있음
- 리소스를 생성 및 사용하는 방법
- 리소스 선언 예시
2.5.7. 리소스 속성: DependsOn
- DependsOn 속성은 특정 리소스가 다른 리소스 다음에 생성되도록 지정
- DependsOn 속성이 필요한 경우
다음 리소스는 퍼블릭 IP 주소에 연결되고 VPC 내에 있을 때 VPC 게이트웨이 연결에 종속
ㅁ Auto Scaling 그룹
ㅁ Amazon EC2 인스턴스
ㅁ Elastic Load Balancing 로드 밸런서
ㅁ 탄력적 IP 주소
ㅁ Amazon RDS 데이터베이스 인스턴스
ㅁ 인터넷 게이트웨이가 포함된 Amazon VPC 라우팅
2.5.8. Outputs
- 출력은 템플릿에서 제공하는 모든 논리적 식별자의 문자열 출력을 지정
- Outputs를 생성 및 사용하는 방법에 대한 상세 내용
ㅁ https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/outputs-section-structure.html
2.5.9. 특별 리소스: Wait Condition
- 대기 조건은 스택 생성을 일시 중지하고 계속하기 전에 신호를 기다리는 CloudFormation 특별 리소스임
- 대기 조건을 사용하여 스택 리소스 생성을 스택 생성 외부의 다른 구성 작업과 조정
- 시간 제한 값은 초단위
- 템플릿에서 대기 조건 생성 상세 내용
ㅁ https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/using-cfn-waitcondition.html
2.5.10. 템플릿에서 생성 정책 사용
스택 생성을 일시 중지하고 계속 진행하기 전에, 지정된 횟수까지 성공 신호를 기다림
- 슬라이드 생성 정책은 Auto Scaling 그룹 생성과 연결됨
- 기본 수는 1이며 기본 제한 시간은 5분
- 수의 값은 정수
- 시간 제한의 값은 ISO8601 기간 형식에 있는 문자열로 “PT#H#M#S”형식에서 #은 각각 시간, 분 및 초를 가리키는 숫자
- 리소스 생성 속성 상세 내용
2.5.11. CloudFomration 사용자 정의 리소스
- CloudFormation의 사용자 정의 리소스 기능을 사용하여 자체 로직을 스택 생성의 일부로 추가
ㅁ 예1: 타사 애플리케이션 구독을 프로비저닝하고, 인증키가 필요한 Amazon EC2 인스턴스에 인증 키 전달
ㅁ 예2: AWS Lambda 함수를 사용하여 새 VPC와 다른 VPC를 피어링함.
- CloudFormation 사용자 정의 리소스 상세 내용:
ㅁ https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/template-custom-resources.html
3. AWS Elastic Beanstalk
3.1. AWS Elastic Beanstalk 개요
- AWS Elastic Beanstalk는 웹 애플리케이션용 자동 배포 및 조정 서비스
- AWS Elastic Beanstalk
ㅁ Java, .Net, PHP, Node.js, Python, Ruby, Go 또는 Docker 코드 수용
ㅁ Apache, Nginx, Passenger 및 IIS 서버에 배포
- AWS Elastic Beanstalk로 배포하면 다음을 자동으로 처리 가능
ㅁ 로드 밸런싱
ㅁ 상태 모니터링
ㅁ Auto Scaling
ㅁ 애플리케이션 플랫폼 관리
ㅁ 코드 배포
3.2. AWS Elastic Beanstalk 기반 블루 그린 배포
- 실제 프로덕션 환경이 “블루”이고 대응하는 환경은 “그린”
- 그린은 새로운 배포를 말함
- 업데이트를 그린 배포하고 로드 밸런서에 연결
- 배포가 완료되고 그린이 작동하면 블루 배포를 중단하거나 업그레이드 시작 가능
- 이러한 접근 방식은 그린 환경으로 전환한 후 시스템이 제대로 작동하지 않을 경우 블루 배포로 다시 전환하여 신속하게 롤백 할 수 있는 기회 제공
3.3. AWS CloudFormation 기반 블루 그린 배포
4. 추가 자동화 솔루션
4.1. AWS OpsWorks
AWS OpsWorks는 Puppet 또는 Chef를 사용하여 모든 형태와 규모의 애플리케이션을 구성하고 운영하도록 지원하는 구성 관리 서비스
- 다음을 이용하여 애플리케이션의 전체 아키텍처와 사양을 정의
ㅁ 패키지 설치
ㅁ 소프트웨어 구성
ㅁ 리소스(컴퓨팅, 스토리지 등)
- 앱 서버, 데이터베이스 등과 같은 일반 기술용 템플릿으로 시작하거나, 자체 템플릿을 구축
- AWS OpsWorks를 수명주기 도구로 사용하여 다음을 수행
ㅁ 애플리케이션 관리를 간소화
ㅁ 배포 주기 수 감소
4.2. Amazon EC2 Run Command
Amazon EC2 실행 명령을 사용하면 Amazon EC2 인스턴스의 구성을 안전하게 관리할 수 있음
- 다음과 같은 일반 관리 업무를 자동화하는 간단한 방법 제공
ㅁ Linux에서 Shell 스크립트 및 명령 실행
ㅁ Windows에서 PowerShell 명령 실행
ㅁ 소프트웨어 또는 패치 설치
ㅁ 문서 관리 및 공유
- 여러 인스턴스 전체에서 명령 실행 가능
- 결과에 대한 가시성 제공
4.3. Amazon EC2 Systems Manager
- 규모에 따른 시스템의 자동 구성 및 지속적인 관리를 가능하게 하는 기능 집합
ㅁ 모든 Windows 및 Linux 워크로드에서 사용할 수 있음
ㅁ Amazon EC2나 온프레미스에서 실행
- 소프트웨어 인벤토리 자동 수집
- OS 패치 적용
- 시스템 이미지 생성
- 명령 실행
4.4. Amazon EC2 기반 타사 자동화 옵션
- Amazon EC2에서 Chef, Puppet, Ansible 및 Salt를 비롯한 자동화 솔루션을 시작 및 실행
- 각 솔루션 사용 상세 내용
ㅁ https://www.chef.io/partners/aws/
ㅁ https://puppet.com/products/managed-technology/aws
ㅁ https://www.ansible.com/integrations/cloud/amazon-web-services
ㅁ https://docs.saltstack.com/en/latest/topics/cloud/aws.html
4.5. 솔루션 선택 가이드
애플리케이션 관리를 제공하는 다양한 서비스와 이러한 서비스를 구분하는 것은 고객이 필요한 간편성 및 제어의 수준에 따라 달라짐
- AWS Elastic Beanstalk는 널리 사용되는 컨테이너인 Java, PHP, Node.js, Python, Ruby 및 Docker로
웹 애플리케이션을 구축할 수 있는 사용이 간편한 애플리케이션
ㅁ 코드를 업로드하길 원하고, 환경을 사용자 정의할 필요가 없다면, Elastic Beanstalk가 적함
- AWS OpsWorks를 사용하면 애플리케이션을 시작하고 애플리케이션의 아키텍처 및 각 구성 요소의 사양을 정의할 수 있음
ㅁ 구성 요소에는 패키지 설치, 소프트웨어 구성 및 리소스 포함
ㅁ 앱 서버, 데이터베이스 등과 같은 일반 기술용 템플릿을 사용하거나, 자체 템플릿을 작성 할 수 있음
'AWS Architecture Basic > 설계 기본' 카테고리의 다른 글
9. Serverless Architecture Design for Web (0) | 2021.02.09 |
---|---|
8. Microservice Architecture 인프라 결합 해제 (0) | 2021.02.09 |
6. AWS 고가용성 환경 (0) | 2021.02.09 |
5. AWS 환경 설계 (0) | 2021.02.09 |