DevOps 이론 : CI/CD
AWS Cloud9
AWS CodeCommit
AWS CodeBuild
1~2교시
신입으로 들어가면 구축되어 있는 인프라 관리, 연차가 좀 쌓이면 구축 업무에 투입될 것.
- CI(Continuous Integration)
자동화 프로세스를 통해 새로운 코드 개발과 코드의 변경 사항이 정기적으로 빌드 및 테스트되고, 공유 저장소에 병합되어 여러 명의 개발자가 동시에 앱 개발과 관련된 코드를 작업할 경우에도 서로 충돌 없이 원하는 개발 작업을 수행하고 문제를 해결해 나가는 것.
각 개발자가 개발 -> 공유 저장소 업로드/병합 -> CI 서버에서 빌드/테스트 -> 결과를 보고 다시 개발 -> 저장소 업로드
저장소 역할을 하는 것이 Github, CI 서버 역할을 하는 것이 젠킨스.
- 구성 요소
1. 저장소 관리
-> 버전 관리 솔루션/개발 내역 관리/모든 변경 사항을 기록
2. 빌드 자동화
-> 한 번의 빌드 실행으로 전체 시스템에 대한 빌드 작업 수행
-> 빌드 자동화(소스 코드 통합, 코드 컴파일, 유닛/통합 테스트, 환경 배포 포함)
-> 이전 빌드의 백업본 유지
-> 빌드 중 오류 발생 시 이전 버전으로 복구 및 소스코드 비교를 통해 원인 분석 작업 수행
3. 셀프 테스트
-> 오류에 대한 신속한 대응을 위해 테스트 자동화 필요.
4. 반영(Commit)을 통한 빌드
-> 정기적으로 소스 반영
-> 잦은 반영을 통해 더 많은 테스트 빌드 누적
* 효과
개발자 생산성 향상 : 수동 작업에 대한 부담 감소
버그를 더 빠르게 발견/해결 : 버그의 조기 해결 가능
업데이트를 빠르게 제공 : 고객에게 더 빠르고 자주 업데이트 제공 가능
- CD(Continuous Delivery & Deployment)
지속적인 서비스 전달과 배포를 통해 최소한의 노력으로 새로운 코드에 대한 배포를 자동화할 수 있다. 이로 인해 신속한 전달과 배포가 이루어지며, 앱 제공 속도도 빨라진다. 수동 프로세스로 인한 운영팀의 프로세스에 대한 과부하 문제를 해결할 수 있도록 도움을 준다.
CI 과정에 테스트-스테이징-배포를 자동화하고, 그 결과를 개발자에게 전달하는 것까지가 CD
AWS CodeCommit : 버전 관리 도구. 소스 코드를 개인 Git 저장소에 안전하게 저장
-> 소스 코드 개발 및 커밋
AWS CodeBuild : CI/CD 도구. 연속적인 스케일링으로 코드 빌드 및 테스트에 사용
-> 실제 앱으로 만들기 위한 빌드
(ThirdParty Testing Tools : 테스트 도구)
AWS CodeDeploy : CI/CD 도구. 소스 코드의 자동 배포 지원
-> 실제 서버로 배포
AWS CodePipeline : CI/CD 도구. 지속적인 통합과 배포 서비스
-> 위 과정을 엮어서 운영하는 것. 각 과정을 합치는 것이 목표.
AWS CodeStar : CI/CD 도구. 템플릿 기반의 신속한 앱 개발/구축/배포
- 소스 코드 개발을 위한 도구 - AWS Cloud9
웹 브라우저만으로 코드의 개발 및 실행 디버깅을 수행할 수 있는 클라우드 기반 통합 개발 프로그램(IDE)
서버리스 앱을 개발할 수 있는 원활한 환경 제공 -> 서버리스 앱의 리소스 정의/디버깅/로컬 실행과 원격 실행 간의 전환 가능
이 자체만으로는 추가적인 비용 없음. 구동을 위해 필요한 EC2 인스턴스와 EBS에 대한 비용만 발생.
3교시
서비스 탭에서 Cloud9을 찾아서 진입 > Create environment > 이름 작성 > 환경 타입은 새로운 EC2 인스턴스 생성, 인스턴스 타입은 t2.micro, 플랫폼은 아마존 리눅스2, 나머지는 기본값, 네트워크 세팅에서 가용 영역 a로 지정 > 생성
생성을 기다리는 동안 EC2 인스턴스 화면으로 가보면 작업이 이루어지는 인스턴스가 생성된다.
Cloud9이 생성되고 하단에 보면 자동으로 인스턴스에 접속된 터미널 창이 있다.
-> 파이썬 개발/실행 방법과 AWS SDK를 Cloud9에서 사용하는 방법 실습
Cloud9에 있는 터미널 창에서 파이썬 버전 확인(python --version)과 업데이트(sudo yum -y update)
좌측 목록에 폴더 우클릭 > 새로운 파이썬 파일 생성 후 더블클릭 > 우측 화면에 코드 작성 화면이 뜬다.
코드 작성 후 저장하고 Run 클릭(매개변수 있으면 하단 터미널에 있는 Command에 파일명과 매개변수 입력)
파이썬 AWS SDK 사용을 위해서는 boto 라이브러리 필요
-> 파이썬 모듈 다운로드는 pip(pip3.7) : curl -O https://bootstrap.pypa.io/get-pip.py
-> 다운받은 파일 설치 : python get-pip.py
-> 파이썬용 SDK인 boto3 설치 : sudo python3.7 -m pip install boto3
EC2 내의 파이썬 코드로 S3 버킷을 생성하는 코드를 작성하자.
-> AWS API와 통신할 방법 필요 = AWS SDK
-> 사용자 권한 필요. 역할을 만들어서 Cloud9 인스턴스에 부여
AWS에 접속하는 방법 3가지
1. AWS 콘솔 : 콘솔에 접속 가능한 사용자 생성하기 - 패스워드 접속
2. AWS CLI : 사용자 생성 후 - 키 2가지로 접속
3. SDK
IAM > 역할 > 역할 생성 > 사용 사례는 EC2 > AmazonS3FullAccess 정책 연결 > 이름 작성 후 생성
인스턴스의 작업 > 보안 > IAM 역할 수정 > 방금 만든 역할 적용
Cloud9으로 돌아와서
이제 New Run Configuration을 열어서 S3.py 버킷명 리전명 <- Command에 입력하고 Run
1. S3.py [버킷명] [리전명] : 버킷 생성 후 삭제된다
2. S3.py [버킷명] [리전명] --keep_bucket : 버킷 생성 후 보존
4교시
실습을 위해 싹 삭제하고 다시
EC2 인스턴스라면 역할 부여로 AWS API와 통신이 가능하지만(+ boto3 설치), 온 프레미스 환경이라면 AWS CLI 설치, IAM 사용자 등록으로 AWS Configure 등록을 통해 통신.
AWS 내부의 여러 CI/CD 도구와 소스코드를 통합하는 서비스인 AWS CodePipeline 실습이 목표.
Cloud9은 했고, 이번에는 CodeCommit
- AWS CodeCommit
안전한 Git 기반의 저장소를 클라우드 기반으로 제공하는 완전 관리형 소스 제어 서비스.
일반적인 Application 개발을 진행하며 개발된 소스를 저장/제어할 수 있는 기능을 제공.
관리형 클라우드 서비스이므로 소스 코드 저장을 위한 저장소를 생성만 하면 된다. 프로비저닝, 확장할 HW나 설치, 구성, 운영할 SW가 없다.
가져오기 요청, 분기 및 병합 기능을 활용해 다른 구성원과 효과적인 협업이 가능하다.
HTTPS, SSH를 활용해 파일을 송수신할 수 있으며, 소스 저장에 사용되는 저장소는 Key Management Service를 통해 저장 중 자동으로 데이터를 암호화한다.
IAM/CloudTrail/CloudWatch와 연동하여 누가 접근할 수 있는지, 어떻게 액세스 할 것인지, 언제/어디서 접근할지 모니터링하거나 제어할 수 있다. -> 데이터에 대한 보안과 접근 제어 가능
- Git
오픈소스 기반 소스 관리 도구. 작업 폴더에서 일어나는 모든 기록들과 각각의 기록을 추적할 수 있는 정보를 포함하고 있는 저장소의 역할을 수행하는 프로그램.
동시에 2명이 하나의 파일을 수정하려고 할 때, 한쪽에 Lock을 걸어 혼선을 막는다.
Github가 Git을 응용해 만든 사이트.
CodeCommit 실습 순서
1. 계정 생성 및 Git HTTP 접속을 위한 IAM 자격 증명 생성
2. Cloud9과 CodeCommit의 저장소에 접속 및 서비스 이용에 대한 방법
3. 간단한 Git 명령어를 활용해 소스를 CodeCommit으로 동기화하는 방법
4. Github에서 관리하던 소스를 CodeCommit으로 Migration 하는 방법
5교시
CodeCommit 실습 순서
1. 코드커밋 실행을 위한 계정 생성, Github 계정 생성, Git HTTP 접속을 위한 자격 증명 생성
2. 클라우드9, 코드커밋의 저장소에 접속 및 서비스 이용에 대한 방법 진행
3. 간단한 깃 명령을 활용하여 소스를 코드커밋으로 동기화하는 방법 진행
4. 깃허브에서 관리하던 소스를 코드커밋으로 Migration 하는 방법 진행
일단 Github에 계정을 생성하고 퍼블릭 저장소를 하나 생성. 클라우드9으로 코드를 생성해서 코드커밋에 등록할 것이다.
코드커밋에 연결할 때 HTTP/SSH 방식 중 HTTP를 사용할 것이다. 그리고 사용자에게 HTTP 접속을 위한 자격 증명을 부여.
- 1단계 + IAM 사용자를 만들자.
IAM > 사용자 추가 > 이름 작성, 증명 유형은 액세스 키 방식 > 권한은 기존 정책 직접 연결 - AWSCodeCommitFullAccess 체크 > 생성 후 .csv 파일 받아놓기
생성한 사용자 클릭 > 보안 자격 증명 탭 > AWS ComdeCommit에 대한 HTTTPs Git 자격 증명 생성 > 자격 증명 다운로드 or 사용자 이름/비밀번호 복사
- 2단계
서비스에서 CodeCommit을 찾아 들어가서 리포지토리 생성 > 이름 작성(이름으로 접근해야 하니 적어두기) > 생성
생성한 레포지토리의 '연결 단계'에 있는 주의사항 한번 보기
클라우드9으로 가서 이전과 같은 방식으로 새로운 환경 생성 > root 계정으로 변경 > aws --version/git --version으로 버전 확인 > aws configure 실행해서 생성했던 IAM 사용자 정보로 자격 증명
> git config --global credential.helper '!aws codecommit credential-helper $@' 실행
(Git으로 저장소에 접근 시 자격 증명은 codecommit 관련 credential로 대체한다는 의미)
> git config --global credential.UseHttpPath true 실행해서 자격 증명 완료
- 3단계
여러 사람이 함께 개발한다고 가정할 때, 코드커밋에 있는 저장소에 클라이언트가 바로 보내는 것이 아니다.
1. 코드커밋 저장소를 클라이언트 저장소에 동기화
2. 클라이언트에서 작성한 것을 코드커밋 저장소로 push(git push)해서 업로드
클라우드9 터미널에서 ec2-user로 돌아와서 git clone [CodeCommit 저장소 URL] > 로컬(인스턴스)과 코드커밋 동기화 완료 > 좌측 목록에 저장소 폴더가 생긴다 > 여기에 새 파일 생성해서 아무거나 작성 후 저장 > 복제해온 저장소 폴더로 이동 > git add로 코드커밋 저장소에 업로드할 목록에 추가 > git status로 기존 코드커밋 저장소와의 변동사항(차이점) 확인 후 > git commit -m "코멘트" 실행해서 커밋 목록에 올린다 > git push로 저장소에 업로드
6교시
- 4단계
코드커밋으로 돌아와서 저장소 하나 더 생성 > URL 복사 > 클라우드9으로 돌아와서 git clone으로 동기화
Github에 파일 아무거나 올리고(커밋) 저장소 URL 복사
Cloud9이 Github와 CodeCommit의 중개점 역할을 하게 될 것이다.
클라우드9에 디렉터리 하나 생성. 깃허브 내용을 여기에 넣을 것이다
> git clone --mirror [Github URL] [방금 만든 디렉터리명] : 디렉터리에 깃허브 저장소 동기화
> 디렉터리로 이동 후 git push [아까 만든 코드커밋 저장소 URL]
이러면 코드커밋 저장소에 깃허브 저장소 내용이 들어가 있다.
실습 끝났으니 코드커밋 저장소들 삭제
코드커밋은 저장 도구, 빌드 도구는 CodeBuild. 배포 도구는 CodeDeploy, 통합 도구는 CodePipeline
이번에는 CodeBuild 실습. 서비스에서 찾아서 들어가기
- AWS CodeBuild
SW 개발에 필요한 소스코드를 컴파일하는 단계에서부터 테스트 후 SW 배포까지의 단계를 지원하는 완전 관리형 지속적 통합(CI) 서비스.
자체 빌드 서버가 필요하지 않으며, 빌드 서버를 프로비저닝 하거나 운영/관리/확장을 수행할 필요가 없다.
빌드를 수행할 규모에 따라 인프라가 자동으로 확장/축소를 지원하며, 빌드를 제출하면 즉각적으로 처리된다.
-> 여러 빌드를 동시에 처리할 수 있어 효율적인 빌드 작업이 가능하다.
- CodeBuild 실습 순서
1. Cloud9, CodeCommit을 활용해 Vue.js 설치 및 프로젝트 생성
2-1. vue.js의 소스를 S3 정적 호스팅에 필요한 설정으로 수행
2-2. S3 버킷 생성과 정적 호스팅 실행
2-3. 외부 접근 설정을 위한 권한 설정
3-1. Vue.js의 소스로 S3 정적 호스팅을 위해 CodeBuild 설정 진행
3-2. cloud9에서 작성된 Vue.js 소스가 S3 정적 웹 페이지에 빌드되고 배포되는지 확인
클라우드9 만들어서 aws configure 실행, AWS IAM 사용자 자격 증명(CodeCommitFullAccess 정책)
+ CodeCommit Https Access 자격 증명받기
-> git config --global credential.helper '!aws codecommit credential-helper $@'
-> 'git config --global credential.UseHttpPath true' 실행
클라우드9 터미널에서
-> sudo npm install vue : npm은 Java 관련 패키지 인스톨러
-> sudo npm install --global vue-cli : 우리가 GUI 환경이 아니니까 설치
-> 이제 vue를 쳐보면 명령어가 보인다.
코드커밋으로 이동해서 저장소 생성 > URL 복사
클라우드9에 git clone으로 동기화(동기화로 생성된 디렉터리명 : codebuild-sample)
> vue init webpack codebuild-sample/ 실행
실행하면 나오는 선택지들은 위처럼 진행
7교시
그러면 웹 프레임워크로 만들어진 웹 페이지의 코드들이 저장소 디렉터리(codebuild-example)에 들어가게 된다.
저 디렉터리로 이동해서 파일 목록을 보면 볼 수 있다.
git add .
git status
git commit -m "메시지"
git push
를 실행해서 저장소에 업로드(저장)
이제 CodeCommit으로 가서 해당 저장소를 보면 파일들이 올라간 것을 볼 수 있다.
아직은 소스코드만 있으니 빌드를 거쳐야 한다.
그다음은 S3 버킷의 정적 호스팅 기능을 사용해서 S3 버킷을 웹 서버로 사용하게 될 것이다.
S3 들어가서 버킷 생성
> 속성 탭에서 정적 웹 사이트 호스팅 편집 > 활성화 체크 > 정적 웹 사이트 호스팅 체크, 인덱스 문서 지정 > 변경 사항 저장
권한 탭 > 편집 > 퍼블릭 액세스 차단 해제 > 변경 사항 저장
권한 탭 > 버킷 정책 > 편집 > 아래 내용 작성(codebuild-sample-705jul은 버킷명) > 변경 사항 저장
이제 S3 버킷이 정적 웹 사이트를 서비스할 수 있다.
마지막 단계. 빌드해보자.
CodeBuild 페이지로 가서 빌드 프로젝트 생성 > 이름 작성 > 소스 탭의 소스 공급자는 AWS CodeCommit, 리포지토리는 아까 만든 저장소 이름(codebuild-sample), 참조 유형은 브랜치, 브랜치는 master > 환경 탭에서 환경 이미지는 관리형 이미지, 운영 체제는 Amazon Linux 2, 런타임은 Standard, 이미지는 ~2.0, 서비스 역할은 새 서비스 역할 > Buildspec 탭에서 빌드 사양은 buildspec 파일 사용 > 생성
CodeBuild 생성 시 생성된 기본 역할에 정책을 몇 가지 연결해줘야 한다.
IAM > 역할 > 코드빌드 생성 시 만들어진 역할 검색 > 정책 연결 > AmazonS3FullAccess 체크 후 정책 연결
클라우드9으로 돌아와서 저장소 디렉터리(codebuild-sample)의 test 디렉터리에 새로운 파일 생성(buildspec.yml)
이 내용 작성. 마지막 라니의 codebuild-sample-705jul은 저장소명이다.
추가했으니
git add . > git status > git commit -m "메시지" > git push
실행해서 저장소에 업로드
만들었던 코드빌드 프로젝트로 가서 빌드 시작 클릭 > 끝나고 아래에 보면 빌드 로그가 보인다.
단계 세부 정보에서도 각종 정보를 볼 수 있다. 이제 S3 버킷으로 이동
-> 메인 페이지와 디렉터리 등이 보인다.
버킷의 속성 탭 > 정적 웹 사이트 호스팅 부분 > 버킷 웹 사이트 엔드포인트 링크 클릭 > 만든 웹 페이지가 보인다.
만들어진 페이지를 커스텀해보자. 클라우드9으로 돌아가자.
codebuild-sample(저장소명) > src > components > HelloWorld.vue 이게 메인 설정 파일.
대충 내용을 끼워 넣자. 저장
저장했으니 git add . > git status > git commit -m "메시지" > git push
실행해서 저장소에 업로드. 내용이 변경되었으니 다시 빌드해야 한다. 코드빌드로 돌아가서 빌드 시작.
8교시
오늘 실습은 여기까지.
codeBuild 빌드 내역 삭제 > 프로젝트 삭제
S3 버킷 내부 파일들 삭제 > 버킷 삭제
CodeCommit 레포지토리 삭제
Cloud9 환경 삭제
정책이나 역할은 삭제해도 좋고, 둬도 상관없다.
CodeDeploy, CodePipeline, CodeStar는 월요일에 마무리 예정.
1~2교시 CI/CD 설명 훑기
4교시(12:40~12:50) 실습 설명 다시 듣기
5교시부터 녹화영상 보고 공부
'교육' 카테고리의 다른 글
[65일 차] 21.10.26 : DevOps 6 (0) | 2021.10.26 |
---|---|
[64일 차] 21.10.25 : DevOps 5 (0) | 2021.10.25 |
[62일 차] 21.10.21 : DevOps 3 (0) | 2021.10.21 |
[61일 차] 21.10.20 : DevOps 2 (0) | 2021.10.20 |
[60일 차] 21.10.19 : DevOps 1 (0) | 2021.10.19 |
댓글