AWS(Amazon Web Service)

[AWS] 대규모 배포 및 인프라 관리

yunseohhe 2024. 9. 2. 22:08

Deployment(배포)

CloudFormation

- Infrastructure as Code를 가능하게 하며 거의 모든 AWS 리소스와 호환된다는 특징이 있다. 

- 템플릿을 제작하고 이를 이용하여 AWS에 인프라를 배포하는 데 사용할 수 있다.

- AWS 인프라의 모든 리소스에 대해 윤곽을 잡아주는 선언적인 방식이기 때문에 AWS에서 중요한 기술이다.

- 비용을 절약 할 수있다. 

   → 예시 : 어떤 환경에서 오후 5시에 모든 템플릿을 자동으로 삭제할 수 있습니다. 그럼 템플릿과 연결된 모든 리소스를 삭제하고 오전 9시나 8시에 안전하게 다시 만듭니다. 따라서 오후 5시와 오전 8시 사이에 리소스가 없기 때문에, 비용을 절약할 수 있게됩니다. 

- 밑의 이미지 설명 : 도식을 만들 만큼 똑똑하고 모든 구성 요소 간 모든 관계를 만들 수 있다.

 

cf ) CloudFormation Templates(템플릿)

  - JSON 또는 YAML 형식의 텍스트 파일이다.

  - 스택을 구성하는 AWS 리소스의 선언이다.

 

 

 

(출처 : 구글 이미지)

 

 

Elastic Beanstalk

- 관리형 서비스이다. 즉, 모든 EC2 인스턴스 구성과 운영 체제는 Beanstalk가 자체적으로 처리한다.

- AWS에 애플리케이션을 배포하는 개발자 중심의 관점이다.

- 클라우드 관점에서는 "서비스형 플랫폼", 즉 PssS로 특정 프로그래밍 언어 또는 Docker 로 제한된다.

- 환경의 상태를 모니터링하고 확인할 수 있다.

    : Beanstalk내의 각 EC2 인스턴스에는 CloudWatch에 지표를 보내는 상태 에이전트가 있다. 그래서 Beanstalk 내에서 이러한 측정 항목을 확인하고 모니터링 등을 수행할 수 있다.

- 개발자 입장에서는 애플리케이션 코드만 책임지면 되므로 Beanstalk은 매우 친화적인 서비스이다.

 

-  3가지의 architecture model(아키택처 모델)

  1. 개발 환경에 적합한 단일 인스턴스 배포
  2. LB + ASG(로드밸런서 + ASG)
  3. 독립형 자동 스케일링 그룹만

 

Elastic Beanstalk - Health Monitoring 예시 (출처 : 구글 이미지)

 

 

CodeDeploy

- 하이브리드 유형의 서비스이다. (= 배포 + 개발자 서비스)

- EC2 인스턴스와 온프레미스 서버의 하이브리드 혼합에 대한 소프트웨어 배포를 자동화 할 수 있다.

- 모든 서버에서 실행되지만 서버를 미리 프로비저닝 해야 하고 업그레이드를 지원하는 CodeDeploy 에이전트를 설치하도록 구성해야 한다.

- 어떤 애플리케이션도 서버로 배포하고 업그레이드 할 수 있다.

    :  예를 들어 AWS에서 EC2 인스턴스에 적용할 수도 있지만 회사의 사내 인프라에도 적용이 가능하다.

 

Systems Manager

- 하이브리드 서비스이다.

- 모든 서버에서 규모를 조정해 가면서 패치, 환경설정, 그리고 명령 실행이 가능하다.

- AWS의 인프라에 대한 가시성과 제어 기능을 제공한다.

- 대규모 시스템 패치에 사용된다.

 

 

 

 

Developer Services(개발자 서비스)

CodeCommit

- AWS 내의 버전 제어 저장소에 코드를 저장하는 방법이다.(= Git 기반 저장소가 되는 것이다)

- 이를 통해서 version control(버전 관리)가 되는 코드 리포지토리를 가질 수 있다.

 

CodeBuild

- 코드를 빌드하고 테스트를 실행하는데 사용할 수 있는 서버리스 서비스이고 완전 관리형 이다.

- AWS에서 코드를 서버 없이 구축하고 테스트하도록 해준다.

- 지속적으로 확장 가능하고 고가용성이며 안전하면서 종량 과금제이다.

    :  종량 과금제란, 코드 설계 시간에 대한 비용을 지불하는 것이다.

CodeBuild 예시 (출처 : 구글 이미지)

 

CodeDeploy

- 서버에 코드를 배포할 수 있도록 한다.

- (배포와 개발자 서비스에서 두유형 모두 볼수 있기때문에 두군데에 적어놓았습니다.)

 

CodePipeline

- 코드가 자동으로 프로덕션에 푸시 되도록 다른 단계를 조정하는 방식이다. 즉, 코드를 가져오는 파이프라인을 정의하고 설계와 테스트를 하고 일부 서버를 프로비저닝 해서 해당 서버에 애플리케이션을 배포하는 것이다.

- 완전 관리형 지속적 전달 서비스이다.

- AWS 내부에서 파이프라인을 조직하기 위하여 필요하다.(= AWS내의 CICD서비스의 핵심이다)

- 코드를 짜는 것부터 구축, 테스트, 배포, 그리고 공급까지 모든 곳에 쓰인다.

 

cf ) CICD

  - 지속적 통합과 지속적 전달이라는 뜻이다.

  - 전체 개념은 개발자가 리포지토리로 코드를 푸시할 때마다 구축되어 테스트 되며 일부 서버에 배포되는 것이다.

 

(출처 : 구글 이미지)

 

 

CodeArtifact

- AWS에서 소프트웨어 패키지와 종속성을 저장할 때 필요하다.

- Artifact 관리 : 종속성을 저장하고 검색하는 것이다.

 

CodeStar

- 통합적 관점을 제공한다.

- OneStopShop은 개발자에게 CI/CD(지속적 통합/배포)와 직접 코딩이 가능케 해준다.

- AWS에서 애플리케이션을 빠르게 개발, 구축 및 배포하는데 사용된다.

(출처 : 구글 이미지)

 

Cloud9

- 클라우드 IDE(Integrated Development Environment, 통합 개발 환경)이다.

- 웹 브라우저에서 직접 코드를 수정할 수 있고, 콜라보레이션 기능을 일부 가지고 있어 페어프로그래밍 등을 할 수가 있다.

- 어떤 설정도 없이 사무실이나 집 또는 인터넷에 액세스 가능한 모든 곳에서 프로젝트 작업을 할 수 있고, 빠르게 작업을 돌아올 수 있다는 의미이다.

- 또한 실시간으로 코드 협업을 하고 페어(pair) 프로그래밍도 가능하다.

 

AWS CDK(Cloud Development Kit)

- 프로그래밍 언어를 이용하여 클라우드 인프라를 정의하는 데 사용된다.

- 친숙한 프로그래밍 언어를 사용하여 클라우드 애플리케이션 리소스를 정의하는 오픈 소스 소프트웨어 개발 프레임워크이다.

- 예시 : JavaScript, TypeScript 또는 Python이나 Java나 .NET을 사용하여 인프라르 작성하면 CDK를 통해 코드가 JSON 또는 YAML 형식으로 CloudFormaion 템플릿에 컴파일 된다.

- 인프라와 애플리케이션의 런타임 코드를 함께 배포할 수 있다.

- ECS와 EKS의 도커 컨테이너에 유용하다.

- 밑의 이미지 설명 : JavaScript 또는 TypeScript을 사용한 예시이다. 정의된 VPC와 ECS 클러스터가 있고 Fargate 서비스용 ALB도 있다. 밑의 네모박스 3가지가 CDK CLI로 사용 가능한 CloudFormation 템플릿에 컴파일 되어 업로드와 배포를 할 수 있다.

(출처 : ccp 강의)