7. AWS Infra 자동화
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
AWS CloudFormation이란 무엇인가요? - AWS CloudFormation
AWS CloudFormation이란 무엇인가요? AWS CloudFormation은 Amazon Web Services 리소스를 모델링하고 설정하여 리소스 관리 시간을 줄이고 AWS에서 실행되는 애플리케이션에 더 많은 시간을 사용하도록 해 주는
docs.aws.amazon.com
- 간단한 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
Metadata - AWS CloudFormation
CloudFormation은 Metadata 섹션에 포함된 정보를 변환, 수정 또는 삭제하지 않습니다. 이러한 이유 때문에 이 섹션을 사용하여 암호나 보안 암호와 같은 민감한 정보를 저장하지 않는 것이 좋습니다.
docs.aws.amazon.com
2.5.3. Parameter
- 파라미터는 값과 값에 대한 제약 조건을 정의하는 속성 목록 포함
- 유일한 필수 속성은 Type이며 이는 String, Number또는 commaDelimetedList가 될 수 있음
- 사용자에게 어떤 종류의 값을 지정해야 하는지 말해주는 Description 속성 추가 가능
- 사용자가 Create Stack 마법사의 템플릿을 사용하면, 파라미터의 이름과 설명이 Specify Parameters 페이지에 표시
- Cloud Formation 파라미터 상세 내용
파라미터 - AWS CloudFormation
콘솔의 스택 파라미터 탭에서, 또는 describe-stacks나 describe-change-set를 실행해 SSM 파라미터의 해결 값을 확인할 수 있습니다. 현재 해당 시스템 관리자 파라미터 키에 대한 스택 정의에 사용된 값입
docs.aws.amazon.com
- 파라미터 예시
ㅁ 이 예에서는 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
매핑 - AWS CloudFormation
매핑 Mappings 섹션(선택 사항)은 키를 해당하는 명명된 값 세트와 맞춥니다. 예를 들어 리전에 따라 값을 설정하려면 리전 이름을 키로 사용하고 각각의 특정 리전에 대해 지정할 값을 포함하는
docs.aws.amazon.com
- 매핑 예시
ㅁ 이 매핑이 특정 리전 내에서 시작된 인스턴스 유형을 기준으로 AMI를 지정
2.5.5. Condition
- 선택적 Condition 섹션은 리소스가 생성되는 시점 또는 속성이 정의되는 시점을 정의하는 문을 포함
- 한 값이 다른 값과 같은지 비교 가능
- 해당 조건의 결과에 따라 조건부로 리소스를 생성 가능
- 조건이 여러 개일 때 쉼표로 이를 분리
- 리소스를 생성할 수 있는 템플릿을 다른 컨텍스트에서 재사용하고 싶을 때 조건을 사용할 수 있음
- Production 환경에서는 특정 성능의 Amazon EC2 인스턴스를 포함할 수 있으나 테스트 환경에서는 비용 절감을 위해 좀 더 낮은 성능을 사용
- 조건을 사용하면 환경 유형별로 어떤 리소스를 생성하고 어떻게 구성할지 정의 가능
- Condition 생성 및 사용하는 방법 상세 내용
조건 - AWS CloudFormation
스택 업데이트 중에는 조건을 자체적으로 업데이트할 수 없습니다. 조건은 리소스를 추가, 수정 또는 삭제하는 변경 내용을 포함할 때만 업데이트할 수 있습니다.
docs.aws.amazon.com
- Conditions를 사용하여 환경 구축 예시
2.5.6. 리소스
- 필수 Resource 섹션은 Amazon EC2 인스턴스 또는 Amazon S3 버핏과 같이 스택에 포함/생성되는 AWS 리소스를 선언
- 각 리소스를 개별적으로 선언해야 하나 같은 유형의 여러 리소스를 지정할 수 있음
- 리소스를 생성 및 사용하는 방법
리소스 - AWS CloudFormation
리소스 필수 Resources 섹션은 Amazon EC2 인스턴스 또는 Amazon S3 버킷 등 스택에 포함할 AWS 리소스를 선언합니다. 구문 Resources 섹션은 키 이름 Resources로 이루어집니다. 다음 가상 템플릿에는 Resources
docs.aws.amazon.com
- 리소스 선언 예시
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
출력 - AWS CloudFormation
출력 선택적 Outputs 섹션은 다른 스택으로 가져오거나(교차 스택 참조를 생성하기 위해), 응답으로 반환하거나(스택 호출을 설명하기 위해), 또는 AWS CloudFormation 콘솔에서 볼 수 있는 출력 값을 선
docs.aws.amazon.com
2.5.9. 특별 리소스: Wait Condition
- 대기 조건은 스택 생성을 일시 중지하고 계속하기 전에 신호를 기다리는 CloudFormation 특별 리소스임
- 대기 조건을 사용하여 스택 리소스 생성을 스택 생성 외부의 다른 구성 작업과 조정
- 시간 제한 값은 초단위
- 템플릿에서 대기 조건 생성 상세 내용
ㅁ https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/using-cfn-waitcondition.html
템플릿에서 대기 조건 생성 - AWS CloudFormation
이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.
docs.aws.amazon.com
2.5.10. 템플릿에서 생성 정책 사용
스택 생성을 일시 중지하고 계속 진행하기 전에, 지정된 횟수까지 성공 신호를 기다림
- 슬라이드 생성 정책은 Auto Scaling 그룹 생성과 연결됨
- 기본 수는 1이며 기본 제한 시간은 5분
- 수의 값은 정수
- 시간 제한의 값은 ISO8601 기간 형식에 있는 문자열로 “PT#H#M#S”형식에서 #은 각각 시간, 분 및 초를 가리키는 숫자
- 리소스 생성 속성 상세 내용
CreationPolicy 속성 - AWS CloudFormation
CreationPolicy 속성 CreationPolicy 속성을 리소스와 연결하여 AWS CloudFormation에서 지정된 수의 성공 신호를 수신하거나 제한 시간이 초과될 때까지 리소스의 상태가 생성 완료가 되지 않도록 방지합니
docs.aws.amazon.com
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
사용자 지정 리소스 - AWS CloudFormation
사용자 지정 리소스 사용자 지정 리소스를 사용하면 스택을 생성, 업데이트(사용자 지정 리소스를 변경한 경우) 또는 삭제할 때마다 AWS CloudFormation에서 실행하는 템플릿에서 사용자 지정 프로비
docs.aws.amazon.com
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/
Amazon Web Services | Chef
Chef Automate, Chef’s Continuous Automation solution is tightly integrated with Amazon Web Services (AWS). If you’re using AWS now, Chef gives you a single, unified way to automate AWS services and resources.
www.chef.io
ㅁ https://puppet.com/products/managed-technology/aws
AWS | Puppet
Puppet automates away the challenges, complexity, and risk of securing and running global hybrid and cloud-native infrastructure, so you can focus on delivering the next great thing.
puppet.com
ㅁ https://www.ansible.com/integrations/cloud/amazon-web-services
Ansible for Amazon Web Services (AWS)
www.ansible.com
ㅁ https://docs.saltstack.com/en/latest/topics/cloud/aws.html
Getting Started With AWS EC2
Getting Started With AWS EC2 Amazon EC2 is a very widely used public cloud platform and one of the core platforms Salt Cloud has been built to support. Previously, the suggested driver for AWS EC2 was the aws driver. This has been deprecated in favor of th
docs.saltproject.io
4.5. 솔루션 선택 가이드
애플리케이션 관리를 제공하는 다양한 서비스와 이러한 서비스를 구분하는 것은 고객이 필요한 간편성 및 제어의 수준에 따라 달라짐
- AWS Elastic Beanstalk는 널리 사용되는 컨테이너인 Java, PHP, Node.js, Python, Ruby 및 Docker로
웹 애플리케이션을 구축할 수 있는 사용이 간편한 애플리케이션
ㅁ 코드를 업로드하길 원하고, 환경을 사용자 정의할 필요가 없다면, Elastic Beanstalk가 적함
- AWS OpsWorks를 사용하면 애플리케이션을 시작하고 애플리케이션의 아키텍처 및 각 구성 요소의 사양을 정의할 수 있음
ㅁ 구성 요소에는 패키지 설치, 소프트웨어 구성 및 리소스 포함
ㅁ 앱 서버, 데이터베이스 등과 같은 일반 기술용 템플릿을 사용하거나, 자체 템플릿을 작성 할 수 있음