본문 바로가기

AWS Architecture Basic/설계 기본

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 파라미터 상세 내용

 ㅁ  https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html

 

파라미터 - 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 생성 및 사용하는 방법 상세 내용

 ㅁ  https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/conditions-section-structure.html

 

조건 - AWS CloudFormation

스택 업데이트 중에는 조건을 자체적으로 업데이트할 수 없습니다. 조건은 리소스를 추가, 수정 또는 삭제하는 변경 내용을 포함할 때만 업데이트할 수 있습니다.

docs.aws.amazon.com

Conditions를 사용하여 환경 구축 예시

 

2.5.6.  리소스

                             

필수 Resource 섹션은 Amazon EC2 인스턴스 또는 Amazon S3 버핏과 같이 스택에 포함/생성되는 AWS 리소스를 선언

각 리소스를 개별적으로 선언해야 하나 같은 유형의 여러 리소스를 지정할 수 있음

리소스를 생성 및 사용하는 방법

 ㅁ  https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/resources-section-structure.html

 

리소스 - 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”형식에서 #은 각각 시간, 분 및 초를 가리키는 숫자

리소스 생성 속성 상세 내용

 ㅁ  https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/aws-attribute-creationpolicy.html

 

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를 사용하면 애플리케이션을 시작하고 애플리케이션의 아키텍처 및 각 구성 요소의 사양을 정의할 수 있음

 ㅁ  구성 요소에는 패키지 설치, 소프트웨어 구성 및 리소스 포함

 ㅁ  앱 서버, 데이터베이스 등과 같은 일반 기술용 템플릿을 사용하거나, 자체 템플릿을 작성 할 수 있음