AWS
  • About
  • 수업준비
    • AWS 환경설정
  • 1주차 - EC2
    • 예습
    • 실습
    • AWS Skill Builder
    • 과제
  • 2주차 - ELB & Autoscaling
    • 예습
    • 실습
    • AWS Skill Builder
    • 과제
  • 3주차 - VPC
    • 예습
    • 실습
    • AWS Skill Builder
    • 과제
  • 4주차 - Database
    • 예습
    • 실습
    • AWS Skill Builder
    • 과제
  • 5주차 - Storage
    • 예습
    • 실습
    • AWS Skill Builder
    • 과제
  • 6주차 - IAM & Security
    • 예습
    • 실습
    • AWS Skill Builder
    • 과제
  • 7주차 - Monitoring & Ops
    • 예습
    • 실습
    • AWS Skill Builder
    • 과제
  • 8주차 - DevOps
    • 예습
    • 실습
    • 과제
  • EKS
    • 실습
    • 실습 (AWS Worshop Studio)
  • Serverless
    • 실습
  • FAQ
  • Archive
    • AWS CodeBuild로 애플리케이션 테스트 자동화 시스템 구축
    • AWS CodeDeploy로 애플리케이션 배포 자동화 시스템 구축
      • 배포 실패 수정 방법
Powered by GitBook
On this page
  • Overview
  • 수동으로 애플리케이션 배포
  • 실습에 사용할 리소스 리뷰
  • AWS CodeDeploy 배포 구성
  • AWS CodePipeline 배포 자동화 구성

Was this helpful?

  1. Archive

AWS CodeDeploy로 애플리케이션 배포 자동화 시스템 구축

PreviousAWS CodeBuild로 애플리케이션 테스트 자동화 시스템 구축Next배포 실패 수정 방법

Last updated 3 years ago

Was this helpful?

AWS CodeDeploy는 Amazon EC2, AWS Fargate, AWS Lambda 및 온프레미스 서버와 같은 다양한 컴퓨팅 서비스에 대한 소프트웨어 배포를 자동화하는 완전관리형 배포 서비스입니다. AWS CodeDeploy를 사용하면 새로운 기능을 더욱 쉽고 빠르게 출시할 수 있고, 애플리케이션을 배포하는 동안 가동 중지 시간을 줄이는 데 도움이 되며, 복잡한 애플리케이션 업데이트 작업을 처리할 수 있습니다. AWS CodeDeploy를 사용하여 소프트웨어 배포를 자동화함으로써 오류가 발생하기 쉬운 수동 작업을 제거할 수 있습니다.

Overview

  1. 오픈소스 Python Django Application을 수동으로 EC2에 배포

  2. AWS CodeDeploy를 통해서 애플리케이션 배포

  3. AWS CodePipeline을 통해서 애플리케이션 변경 사항을 자동으로 배포

수동으로 애플리케이션 배포

CI/CD 도구들을 사용해서 애플리케이션의 빌드, 테스트, 배포를 자동화하기전에 수동으로 배포해봄으로써 각 단계별로 필요한 명령어 및 실행순서를 정의합니다.

1. 제공된 AWS 계정으로 로그인 합니다. AWS 관리콘솔 좌측 상단에 있는 [Services] 를 선택하고 검색창에서 EC2를 검색하거나 [Compute] 카테고리에 있는 [EC2] 를 선택

2. 인스턴스 목록에서 locallibrary-dev를 선택하고 Connect를 클릭

3. Session Manager를 선택하고 Connect를 클릭

4. Root 유저로 전환

sudo -i

5. Git 설치

yum install -y git

7. Forking한 리포지토리를 로컬서버로 복제

git clone https://<REPOSITORY_URL>

8. Python 가상 환경 생성

cd django-locallibrary-tutorial && python3 -m venv venv

9. Python 가상 환경 활성화

source venv/bin/activate

10. 애플리케이션 구동에 필요한 라이브러리 설치

pip install -r requirements.txt

11. PostgreSQL 클라이언트 설치

yum install -y 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 데이터베이스로 접속

psql -h <RDS_ENDPOINT> -U postgres
# psql -h locallibrary-dev.xxxxxxxxx.ap-northeast-2.rds.amazonaws.com -U postgres
Password for user postgres:
psql (9.2.24, server 12.8)
WARNING: psql version 9.2, server version 12.0.
         Some psql features might not work.
SSL connection (cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256)
Type "help" for help.

postgres=>

19. 데이터베이스 및 데이터베이스 유저 생성

CREATE DATABASE local_library;
CREATE USER local_library WITH PASSWORD 'asdf1234';
GRANT ALL PRIVILEGES ON DATABASE local_library TO local_library;
ALTER USER local_library CREATEDB;

20. locallibrary/settings.py 파일을 열고 ALLOWED_HOSTS, DATABASES를 아래와 같이 수정

ALLOWED_HOSTS = ['*']

...
...

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'local_library',
        'USER': 'local_library',
        'PASSWORD': 'asdf1234',
        'HOST': '<RDS_ENDPOINT>',
        'PORT': '5432',
    }
}

21. locallibrary/settings.py 파일을 열고 아래와 같은 코드블록을 삭제

# Heroku: Update database configuration from $DATABASE_URL.
import dj_database_url
db_from_env = dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(db_from_env)

22. django 애플리케이션 설정 및 테스트

python manage.py makemigrations
python manage.py migrate
python manage.py collectstatic
python manage.py test

23. django 애플리케이션을 구동

python manage.py runserver 0.0.0.0:80

24. 웹 브라우저를 열고 EC2 인스턴스의 퍼블릭 IP 주소로 접속 가능한지 확인

25. 아파치 웹서버 설치

yum install -y httpd

26. 아파치 mod_wsgi 모듈 설치

{
    yum install -y httpd-devel gcc python3-devel
    pip install mod_wsgi
}

27. mod_wsgi 모듈 경로 확인

mod_wsgi-express module-config

28. 아파치 웹서버 설정파일 /etc/httpd/conf.d/app.conf 생성하고 아래와 같이 수정

LoadModule wsgi_module "/root/django-locallibrary-tutorial/venv/lib64/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so"
WSGIPythonHome "/root/django-locallibrary-tutorial/venv"

<Directory /root/django-locallibrary-tutorial/locallibrary>
    Require all granted
</Directory>

WSGIDaemonProcess locallibrary python-path=/root/django-locallibrary-tutorial:/root/django-locallibrary-tutorial/venv/lib/python3.7/site-packages
WSGIProcessGroup locallibrary
WSGIScriptAlias / /root/django-locallibrary-tutorial/locallibrary/wsgi.py

29. 아파치 웹서버에 애플리케이션 파일 권한 부여

sudo chown -R apache:apache /root/django-locallibrary-tutorial

30. 아파치 웹 서버 구동 및 EC2 인스턴스의 퍼블릭 IP 주소로 접속 가능한지 확인

sudo systemctl enable httpd
sudo systemctl start httpd

31. /etc/httpd/conf.d/app.conf 파일은 /root/django-locallibrary-tutorial 디렉토리로 복사하고 애플리케이션 소스코드 변경 사항을 Git 리포지토리에 반영

cp /etc/httpd/conf.d/app.conf /root/django-locallibrary-tutorial
cd /root/django-locallibrary-tutorial
git add .
git commit -m "update django settings and add apache config"
git push

실습에 사용할 리소스 리뷰

2. 생성되어 있는 오토스케일링 그룹 확인

3. 생성되어 있는 로드밸런서를 확인하고 로드밸런서 DNS로 접속했을때 아파치 기본 페이지가 보이는지 확인

4. 생성되어 있는 RDS 인스턴스 확인

AWS CodeDeploy 배포 구성

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] 클릭

cd /opt/django-locallibrary-tutorial
git add .
git commit -m "upload scripts files and appspec.yml"
git push

AWS CodePipeline 배포 자동화 구성

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로 수정하고 새로운 인스턴스에 애플리케이션이 정상적으로 배포되는지 확인

6. 해당 를 Fork (GitHub 계정 필수)

32.

1. 실습 환경 구성에 사용된 CDK 리뷰

8. 리포지토리에 있는 scripts 디렉토리와 appspec.yaml파일을 []에서 생성한 EC2 인스턴스의 /opt/django-locallibrary-tutorial 디렉터리에 복사한 후, git push를 통해 변경된 부분을 리포지토리에 반영

GitHub 리포지토리
GitHub 토큰 발급받기
코드
codedeploy-lab
수동으로 애플리케이션 배포