프로필사진

Go, Vantage point

가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.


Github | https://github.com/overnew/

Blog | https://everenew.tistory.com/





티스토리 뷰

반응형

 

 

 

 

 

CodeCommit, CodeBuild, CodeDeploy를 세팅하고 전체를 하나의 플로우로 구성해 주는 CI/CD 서비스인 CodePipeline을 구성해 보자.

 

https://medium.com/@ahmedSalem2020/the-ultimate-guide-to-aws-codepipeline-everything-you-need-to-know-e85913b2e1f4

 

 

 

 

이번 실습에서 업데이트의 대상이 되는 것은 Private subnet에서 autoScaling 되는 Web server에서 동작하는 프로세스이다.

 

 

 

 

 Web Server 생성

AutoScaling group에 속하는 Web Server를 생성해 주자.

 

 

web server ec2를 위한 역할을 생성한다.

 

 

 

 

 

두 가지 권한을 추가하여 생성하자.

SSM으로 연결하고, S3에서 빌드 데이터를 받아오기 위한 권한이다.

 

 

 

 

이제 EC2 시작 템플릿을 생성하자.

 

 

 

t2.micro는 특정 AZ에만 존재할 수 있으므로 t3.micro를 선택한다.

 

 

 

 

세팅한 보안 그룹은 22,80,443 포트를 인바운드한다.

 

 

고급 세부 정보에서 만들어준 역할을 가지도록 설정한다.

 

 

유저 데이터에는 웹서비스를 띄우기 위한 설정과 CodeDeploy 배포를 위한 agent 설치가 필요하다.

아래의 명령어를 넣어주자.

 

yum -y install ruby
wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
chmod +x ./install
./install auto

 

 

 

 

이대로 생성한 시작 템플릿으로 autoscaling group을 만들어주자.

 

 

 

 

네트워크는 VPC의 private subnet을 선택한다.

 

 

생성해 둔 LB와 대상 그룹을 선택한다.

 

 

크기는 최소 2개 ~ 4개로 세팅한다.

 

 

scaling은 60% 이상 때로

 

 

태그는 Auto scaling으로 생성될 Instance의 이름이 된다.

 

 

 

생성되었다.

 

 

 

시작 템플릿 구성과 동일한 인스턴스도 자동으로 시작된다.

 

 

 

 

CodeCommit 생성

 

code commit은 git과 명령어가 호환되는 형상관리 서비스이다.

Github를 쓰는 것과 같이 사용해 주면 된다. 

 

 

이름을 설정하면 바로 생성이 된다.

 

 

 

URL 복사를 선택하면 아래와 같은 링크를 획득한다.

https://git-codecommit.ap-northeast-2.amazonaws.com/v1/repos/cicd-demo-project

 

 

편의상 Code 업로드 Cloud9에서 진행하였다.

자바 코드를 아래의 명령어로 업로드한다.

 

git config --global user.name "user id"   

git config --global user.email "email"

 

cd ~/environment/cicd-web-project      # 코드의 경로

git init -b main

git remote add origin <생성한 repository URL>

 

 

 

리퍼지토리로 push 한다.

 

git add *

git commit -m "Initial commit"

git push -u origin main

 

 

 

commit에서 확인하면 정상적으로 데이터가 업로드되어 있다.

 

 

빌드 파일을 저장하기 위한 s3 버킷 생성도 해두자.

aws s3 mb s3://cicd-lab-bucket

 

 

 

 

 

code build 생성

 

code build에서 프로젝트 생성한다.

 

code commit 말고도 git Hub과 같이 다른 서비스도 build와 연동할 수 있다.

 

 

main 브랜치의 내용이 build 되도록 설정한다.

 

 

빌드 환경은 aws가 제공하는 환경으로 설정한다.

이 환경에는 빌드에 필요한 여러 가지 툴들이 이미 설치되어 AWS가 관리해 준다.

 

 

 

buidspec.yaml이라는 파일이 소스 코드 최상위 경로에 존재해야 한다.

이 파일은 소스 코드들을 어떻게 build 해야 하는지에 대한 명령어가 작성되어 있다.

 

 

빌드 파일 결과물이 저장될 장소로 위에서 생성한 s3를 선택해 주자.

 

이대로 생성해 주자.

 

 

 

 

 

 

리퍼지토리의 최상위 경로에 buildspec 존재하도록 세팅한다.

 

내용은 아래와 같다.

 

 

 

 

code deploy 생성

이미 web server는 codeDeploy agent를 설치하여 만들었기 때문에, code deploy의 명령이 EC2에 전달된다.

우리는 빌드 파일의 저장소를 S3로 설정하였으므로, S3에서 가져와서 배포하게 된다. 

 

 

배포를 정의하는 코드인 appspec.yaml도 최상위 경로에 있어야 한다.

 

 

 

appspec.yaml

 

 

appspec.yaml에서 사용한 shell script들은 아래와 같다.

 

 

 

 

 

 

 

이러한 파일들도 레퍼지토리에 올라가도록 업로드해준다.

 

git add *

git commit -m "add build & deployment files"

git push -u origin main

 

 

code deploy role 생성

EC2에게 Deploy 명령을 내릴 수 있도록 role을 생성해 주자. 

 

아래 권한 확인 후 생성.

 

 

 

 

디플로이 생성

 

 

 

 

 

 

애플리케이션 생성 후 배포 그룹도 생성한다.

 

 

 

바로 위에서 생성한 역할을 연결한다.

 

 

배포 그룹의 대상으로 우리의 Web server auto scaling 그룹을 선택해 주자.

 

 

하나의 인스턴스씩 배포시켜서, 서비스가 중단되지 않도록 만들자.

 

 

 

 

생성이 완료되면 배포를 진행한다.

 

 

 

배포할 빌드 파일을 저장하고 있는 s3의 경로를 넣어주자.

 

 

 

CodePipeline 생성

이제 모든 flow를 연결하여, 코드 변경 감지 시에 자동으로 배포까지 진행하는 code pipeline을 생성하자.

 

역할은 자동 생성으로

 

소스/빌드/배포를 위에서 만든 것을 세팅해 주자.

 

 

 

 

 

이대로 생성하면 파이프라인이 순차적으로 진행된다.

 

 

빌드까지 완료되면, S3에 아래와 같이 빌드 파일이 생성된다.

 

빌드의 로그도 확인이 된다.

 

 

10여분 정도 기다리면 배포가 완료된다.

배포 중에는 작업 노드로는 Traffic 차단도 진행된다.

따라서 무중단 배포가 실현된다.

 

 

 

이런 식으로 v1인 web server가 확인이 된다.

 

 

 

여기서 메인 페이지를 v2로 변경해 주고, 변경사항을 업로드하자.

 

 

 

cd ~/environment/cicd-web-project/

git add *

git commit -m "modify main page"

git push -u origin main

 

 

 

 

git push를 하면 자동으로 pipeline이 실행되면서 완료가 되면, 웹 서버 업데이트가 진행되어 있다.

 

 

 

 

반응형
댓글
반응형
인기글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함