AWS CodeDeploy로 애플리케이션 배포 자동화 시스템 구축
Last updated
Last updated
AWS CodeDeploy는 Amazon EC2, AWS Fargate, AWS Lambda 및 온프레미스 서버와 같은 다양한 컴퓨팅 서비스에 대한 소프트웨어 배포를 자동화하는 완전관리형 배포 서비스입니다. AWS CodeDeploy를 사용하면 새로운 기능을 더욱 쉽고 빠르게 출시할 수 있고, 애플리케이션을 배포하는 동안 가동 중지 시간을 줄이는 데 도움이 되며, 복잡한 애플리케이션 업데이트 작업을 처리할 수 있습니다. AWS CodeDeploy를 사용하여 소프트웨어 배포를 자동화함으로써 오류가 발생하기 쉬운 수동 작업을 제거할 수 있습니다.
오픈소스 Python Django Application을 수동으로 EC2에 배포
AWS CodeDeploy를 통해서 애플리케이션 배포
AWS CodePipeline을 통해서 애플리케이션 변경 사항을 자동으로 배포
CI/CD 도구들을 사용해서 애플리케이션의 빌드, 테스트, 배포를 자동화하기전에 수동으로 배포해봄으로써 각 단계별로 필요한 명령어 및 실행순서를 정의합니다.
1. 제공된 AWS 계정으로 로그인 합니다. AWS 관리콘솔 좌측 상단에 있는 [Services] 를 선택하고 검색창에서 EC2를 검색하거나 [Compute] 카테고리에 있는 [EC2] 를 선택
2. 인스턴스 목록에서 locallibrary-dev를 선택하고 Connect를 클릭
3. Session Manager를 선택하고 Connect를 클릭
4. Root 유저로 전환
5. Git 설치
6. 해당 GitHub 리포지토리를 Fork (GitHub 계정 필수)
7. Forking한 리포지토리를 로컬서버로 복제
8. Python 가상 환경 생성
9. Python 가상 환경 활성화
10. 애플리케이션 구동에 필요한 라이브러리 설치
11. PostgreSQL 클라이언트 설치
13. RDS 인스턴스 목록에서 locallibrary-dev를 선택
14. Connectivity & security 탭 아래에 있는 Endpoint를 메모합니다.
15. AWS 관리콘솔 좌측 상단에 있는 [Services] 를 선택하고 검색창에서 secrets manager 검색하거나 [Security, Identity, & Compliance] 카테고리에 있는 [Secrets Manager] 를 선택
16. Secrets 목록에서 devDatabaseSecret로 시작하는 Secret을 선택합니다.
17. Retrieve secret value를 클릭해서 username과 password의 값들을 메모합니다.
18. PostgreSQL 데이터베이스로 접속
19. 데이터베이스 및 데이터베이스 유저 생성
20. locallibrary/settings.py
파일을 열고 ALLOWED_HOSTS
, DATABASES
를 아래와 같이 수정
21. locallibrary/settings.py
파일을 열고 아래와 같은 코드블록을 삭제
22. django 애플리케이션 설정 및 테스트
23. django 애플리케이션을 구동
24. 웹 브라우저를 열고 EC2 인스턴스의 퍼블릭 IP 주소로 접속 가능한지 확인
25. 아파치 웹서버 설치
26. 아파치 mod_wsgi 모듈 설치
27. mod_wsgi 모듈 경로 확인
28. 아파치 웹서버 설정파일 /etc/httpd/conf.d/app.conf
생성하고 아래와 같이 수정
29. 아파치 웹서버에 애플리케이션 파일 권한 부여
30. 아파치 웹 서버 구동 및 EC2 인스턴스의 퍼블릭 IP 주소로 접속 가능한지 확인
31. /etc/httpd/conf.d/app.conf
파일은 /root/django-locallibrary-tutorial
디렉토리로 복사하고 애플리케이션 소스코드 변경 사항을 Git 리포지토리에 반영
32. GitHub 토큰 발급받기
1. 실습 환경 구성에 사용된 CDK 코드 리뷰
2. 생성되어 있는 오토스케일링 그룹 확인
3. 생성되어 있는 로드밸런서를 확인하고 로드밸런서 DNS로 접속했을때 아파치 기본 페이지가 보이는지 확인
4. 생성되어 있는 RDS 인스턴스 확인
1. AWS Management Console 좌측 상단에 있는 [Services] 를 선택하고 검색창에서 CodeDeploy를 검색하거나 [Developer Tools] 밑에 있는 [CodeDeploy] 를 선택
2. 왼쪽 패널 Deploy 섹션 아래에 있는 [Applications]를 선택하고 [Create application] 클릭
3. Application name = library, Compute platform = EC2/On-premises → [Create application]
4. 생성된 CodeDeploy 애플리케이션 설정에서 [Deployment groups] 탭을 선택하고 [Create deployment group] 클릭
5. Deployment group name = EC2-ASG, Service role = CodeDeployLabRole
6. Deployment type = In-place, Environment configuration = Amazon EC2 Auto Scaling groups, Dropdown 목록에서 locallibrary-prod 선택
7. 로드밸런서 설정에서 Target Group = locallibrary-prod 선택하고 [Create deployment group] 클릭
8. codedeploy-lab 리포지토리에 있는 scripts
디렉토리와 appspec.yaml
파일을 [수동으로 애플리케이션 배포]에서 생성한 EC2 인스턴스의 /opt/django-locallibrary-tutorial
디렉터리에 복사한 후, git push를 통해 변경된 부분을 리포지토리에 반영
1. AWS Management Console 좌측 상단에 있는 [Services] 를 선택하고 검색창에서 CodePipeline를 검색하거나 [Developer Tools] 밑에 있는 [CodePipeline] 를 선택
2. 왼쪽 패널 Pipeline 섹션 아래에 있는 [Pipelines]를 선택하고 [Create pipeline] 클릭
3. Pipeline name = library, Service role = New service role → [Next]
4. Source provider = GitHub (Version 2) → [Connect to GitHub]
5. Connection name에 GitHub ID를 입력하고 [Connect to GitHub] 클릭
6. [Authorize AWS Connector for GitHub] 클릭
7. [Install a new app] 클릭
8. Only select repositories를 선택하고 이전 단계에서 Forking한 django-locallibrary-tutorial 리포지토리 선택하고 [Install] 클릭
9. GitHub 계정의 비밀번호를 입력하고 [Confirm password] 클릭
10. 새로운 GitHub Apps가 생성됐으면 [Connect] 클릭
11. Repository name = 위에서 연결한 리포지토리, Branch name = master, Start the pipeline on source code change = ✅ → [Next]
12. Add build stage 단계에서 [Skip build stage] 클릭 -> [Skip] 클릭
13. Deploy provider = AWS CodeDeploy, Region = Asia Pacific (Seoul), Application name = library, Deployment group = EC2-ASG → [Next]
14. CodePipeline 구성을 확인하고 [Create pipeline] 클릭
15. 배포 파이프라인 생성 후 자동으로 배포가 실행되지만 CodeDeploy에서 에러 발생
16. 코드를 수정하고 리포지토리에 반영 후 배포가 완료되는지 확인하고 계속 에러 발생시 로그를 확인해서 코드 수정
17. catalog/templates/index.html
파일을 수정하고 리포지토리에 반영 후 변경사항이 정상적으로 배포 되는지 확인
18. 오토스케일링 그룹의 최소 인스턴스 갯수를 2로 수정하고 새로운 인스턴스에 애플리케이션이 정상적으로 배포되는지 확인