AWS CodeDeploy를 이용한 EC2 Application 배포

초코칩·2023년 8월 21일
1

AWS Cloud

목록 보기
5/7
post-thumbnail

AWS CodeDeploy란?

CodeDeployArch

이미지 출처: https://aws.amazon.com/ko/codedeploy/

AWS CodeDeploy는 Amazon EC2, AWS Fargate, AWS Lambda, 그리고 온프레미스 서버와 같은 다양한 컴퓨팅 서비스에 대한 애플리케이션 배포를 자동화하기 위한 서비스입니다. 여러 종류의 애플리케이션 콘텐츠를 배포하고 롤백할 수 있는 기능을 제공합니다.

코드, 웹 및 구성 파일, 실행 파일, 패키지, 스크립트, 멀티 미디어 파일 등과 같은 다양한 애플리케이션 콘텐츠를 거의 무제한으로 배포할 수 있습니다.

장점

  • 다양한 소스 지원: AWS S3 버킷, Github Repository, BitBucket 레포지토리 등의 다양한 소스에서 배포할 수 있습니다.
  • 중지 시간 최소화: 애플리케이션 업데이트 중에도 서비스 중단 시간을 최소화하여 사용자에게 지속적인 서비스를 제공합니다.
  • 자동 롤백: 배포 중 실패가 감지되면 이전 버전으로 자동으로 롤백할 수 있어 안정성을 확보합니다.

아키텍처

컴퓨터 네트워크에서 Heartbeat는 한 시스템이 다른 시스템에게 "나는 살아있다"는 것을 알리는 신호입니다. heartbeat 본래 뜻인 심장박동처럼 컴퓨터에서도 심장이 뛰는 것과 비슷한 방식으로 동작하기 때문에 이런 명칭이 붙었습니다.

AWS CodeDeploy를 통해 HeartBeat 애플리케이션을 배포하는 간단한 실습을 진행합니다.

Arch

Architecture

Amazon EC2 인스턴스 2개 생성

EC2에서 이름이 HeartBeat-Instance인 인스턴스를 2개 생성합니다. Amazon Linux와 Ubuntu는 지겨우니, Windows를 선택합니다.

  • Name: HeartBeat-Instance
  • Amazon Machine Image(AMI): Microsoft Windows Server 2019 Base
  • Instance Type: t2.large
  • VPC-required: Lab VPC
  • Subnet: Public Subnet 1
  • Auto-assign public IP: Enable
  • Firewall(Security Group): Create security Group
  • Security Group name: Lab 2 SG

t2.large 과금 주의하시기 바랍니다.


트러블 슈팅

ec2 인스턴스를 micro로 이용할 경우, 메모리가 부족한 현사이 발생할 수 있습니다. 해결 과정을 공유합니다.

https://velog.io/@chocochip/Swap-memory%EB%A5%BC-%ED%86%B5%ED%95%9C-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EB%B6%80%EC%A1%B1-%ED%95%B4%EA%B2%B0


보안 그룹 설정

  • Type: rdp
  • Source type: My IP

EC2 인스턴스의 보안 그룹을 구성하여 특정 IP에서 원격 데스크톱(Remote Desktop Protocol) 접속을 허용합니다. 이 프로토콜은 원격으로 다른 컴퓨터의 데스크톱 환경에 접속하여 조작하고 제어하는 데 사용되는 프로토콜입니다.

  • IAM instance profile: EC2InstanceRole
  • Hostname type: Resource name
  • DNS Hostname: Enable resource-based IPV4 (A record) DNS requests
  • Metadata accessible: Enable

Agent를 설치하고 EC2를 띄웁니다.

사용자 데이터(User Data)는 EC2 인스턴스를 시작할 때 실행할 스크립트나 명령을 지정하는 기능을 가리킵니다.

CodeDeploy 애플리케이션 배포 및 배포 그룹 생성

AWS CodeDeploy Console을 사용하여 CodeDeploy가 소프트웨어 배포할 대상으로 배포 그룹을 생성합니다.

AWS CodeDeploy에 접속하여 Create Application을 선택합니다.

  • Application name: CodeDeploy-Demo
  • Compute platform: EC2/On-Premises

Agent 기반이기에 온프레미스 기반도 접근할 수 있습니다.

배포 그룹 생성

HeartBeat-Deployment이라는 이름의 배포 그룹을 생성합니다.

롤링 업데이트 설정도 가능하며, 다양한 배포 전략을 선택할 수 있습니다.

S3 버킷 생성

소스 코드를 올릴 S3를 생성합니다.

bucketName=heartbeat-codedeploy-artifacts-[your-initials]-[your-postal-code]
aws s3 mb s3://$bucketName

AWS CodeDeploy를 통한 배포 그룹 S3 푸시

cd ~/environment/CodeDeployHeartbeatDemo
aws deploy push --application-name CodeDeploy-Demo --source HeartBeat-App --s3-location s3://$bucketName/HeartBeat-App.zip

aws deploy create-deployment --application-name CodeDeploy-Demo --deployment-group-name HeartBeat-Deployment --deployment-config-name CodeDeployDefault.AllAtOnce --description "Initial Deployment" --s3-location bucket=$bucketName,key=HeartBeat-App.zip,bundleType=zip

  • CP 대신 왜 push를 사용하나요?
    CP를 사용하게 되면 덮어쓰기가 됩니다. push를 하며 버전 관리가 되기 때문입니다.

AWS CodeDeploy 모니터링

배포의 상태를 빠르게 확인할 수 있습니다.

배포 세부 정보에서 특정 배포 작업에 대한 상세한 내용과 결과를 포함하며, 배포가 어떻게 수행되었는지, 성공적으로 완료되었는지 또는 문제가 발생한 경우 어떤 문제가 발생했는지를 파악하는 데 도움을 줍니다.

HeartBeat 서비스 확인

EC2 인스턴스에 접속하여 Windows 기반 서비스를 확인하는 과정을 보여줍니다.

PowerShell을 통해 서비스 로그를 확인하고 관련 정보를 조회합니다.

Service “AWSHeartbeat*”

Content C:\Logs\HeartBeatService.log -last 10

애플리케이션 코드 수정 및 재배포

수정하고 재배포 해봅시다!

cd ~/environment/Updated-HeartBeat-App
echo $bucketName

aws deploy push --application-name CodeDeploy-Demo --source HeartBeat-App --s3-location s3://$bucketName/HeartBeat-App.zip
aws deploy create-deployment --application-name CodeDeploy-Demo --deployment-group-name HeartBeat-Deployment --deployment-config-name CodeDeployDefault.AllAtOnce --description "Updated Deployment" --s3-location bucket=$bucketName,key=HeartBeat-App.zip,bundleType=zip

접속 및 업데이트 확인

Content C:\Logs\HeartBeatService.log -last 10

성공적으로 update한 것을 볼 수 있습니다.

Ref

profile
초코칩처럼 달콤한 코드를 짜자

0개의 댓글