[AWS Devops Discovery] 03. Devops를 위한 Toolkits

leny·2021년 7월 10일
0

AWS Devops Discovery

목록 보기
3/3
post-thumbnail

AWS Devops을 위한 개발 tools

1. Devops 을 위한 CI/CD 방법론

CI/CD란

CI (Continuous Integeration) - 지속적인 통합

CD (Continuous Development) - 지속적인 개발

성공적인 Devops를 위한 AWS의 도구들

AWS는 성공적인 Devops를 수행하기 위해 필요한 매우 강력한 S/W 와 인프라 환경을 제공한다. 이를 통해 S/W와 제품을 안정적이고 신속하게 구축할 수 있는 일련의 유연한 서비스를 사용하여 이를 제공한다.

다양한 서비스들을 한눈에 보기 좋도록 아래와 같이 정리해보았다.

버전관리
CodeCommit

CI/CD
CodeBuild
CodeDeploy
CodePipeline
CodeStar

Monitoring
X-Ray

명령 인터페이스
AWS Command line interface

개발 툴
AWS Cloud9

2. 웹 기반 클라우드 IDE : AWS Cloud9

순서 1. Create environment > “Cloud9test” 라는 named 로 해서 cloud 9 생성하기
Configure settings은 아래와 같이 설정하였다.

<< configure settings >>
Ec2
t2.micro (1 gi ram + 1vCPU)
Amazon Linux
After 30 min (default)
Default

순서 2. AWS Cloud 9 를 활용해서 python 개발과 실행하는 방법,
그리고 AWS SDK for Python을 Cloud 9에서 활용해보기 위해 아래와 같이 명령어를 입력한다.

목적 1. 파이선 버전 확인
Ec2-user $ python —version

목적 2. 업데이트 사항이 있으면, 업데이트 밀기
Ec2-user $ sudo yum -y update

아래와 같은 형식으로 파이썬 개발도 가능한 모습이다.

순서 3.

AWS SDK for Python 의 tutorials 실행을 위해서, 터미널 창에서 아래의 명령어들을 입력한 후 실행해본다.

——————————명령어 ——————————

Curl -O https://bootstrap.pypa.io/get-pip.py
Python get-pip.py
Python -m pip —version
Rm get-pip.py
————————————————————————

이 줄 까지 다하고 나면, 이제 get-pip.py라는 파일이 삭제된다.

이제 본격적으로 boto 3를 설치해보자.

Sudo python -m pip install boto3

3. 프라이빗 Git hosting - AWS Codecommit

AWS Codecommit 이란?

AWS Codecommit은 안전한 git 기반의 repository 를 클라우드로 기반으로 제공하는 완전관리형 소스제어 서비스이다.

즉, codecommit은 관리형 클라우드 서비스이므로 소스코드를 저장하기 위한 Repository를 생성하기만 하면 되며, 프로비저닝 및 확장할 하드웨어나 설치,구성, 운영할 소프트웨어가 없다.

또한, code commit의 가져오기 요청, 분기 및 병합 기능을 활용하면 팀에서 다른 개발자나 구성원과 협업을 할 수 있으며, 이를 통해 보다 효율적으로 소스코드를 관리할 수 있다.
또한 코드 검토를 요청하고, 피드백을 받을 수 있으며, AWS CLI 또는 SDK를 활용하여, Repository를 생성하고 git을 통해 Repository를 사용할 수 있다.

특징 1 ) file transferring available ( HTTPS, SSH 를 활용하여 파일을 송수신할 수 있다)
특징 2) KMS (Key Management Service)을 통해서 저장 중 자동으로 데이터를 암호화한다
특징 3) IAM과 Cloud Trail, Cloud watch 등의 다른 서비스와 연동을 통해 보안 및 관리 효율성을 높인다

  • 프리티어도 최대 5개의 계정까지 사용이 가능하다

Git이란?

스웨덴계 핀란드인 소프트웨어 개발자이자 리눅스 커널과 깃을 초최로 개발한 사람으로 알려진 리누스 토르발스가 2005년 개발한 오픈소스 기반의 관리 툴이다.

Git은 작업 폴더에서 일어나는 모든 기록들과 각각의 기록들을 추적할 수 있는 정보를 포함하고 있는 저장소 역할을 수행하는 프로그램이며, 깃과 관련된 아주 basic terms(기본적인 용어)를 아래와 같이 정리해보았다.

Repository (리포지토리, 저장소)
Git (Push, 내 local folder에서 파일을 repository에 업로드하는 작업)
Clone (다른 사람이 작성한 이력이 저장된 repository가 있다면, 그 repository 자체를 통째로 복사해서, 내 local 폴더에서 작업 및 개발하기 위해 다운로드 해오는 일)
Pull (여러 사람들이 공유하는 repository에, 다른 사람들이 변경 및 추가한 작업들이 반영된 최신 변경이력에 대해 다운로드 하는 작업)

*Clone 과 Pull은 모두 다운로드 해온다는 의미에서는 공통점이 있지만, 의미가 다르게 쓰이므로 조심해야 한다

Lab 1 :

Credential 생성완료 / credential key 도 당연히 .csv 파일 형식으로 다운로드 받아줘야 한다!

나는 다운로드를 받고 닫았어야 했는데, 창이 빨리 닫아지게 되면서, 다시 다운로드 받기 위해서 재생성하였고, 그래서 아래와 같이 https git credentials가 두개 생겼다.
User1 이라고 기재된 것을 기준으로 사용할 예정이다.

Cloud9 과 codecommit을 활용한 Code 버전 관리 Lab 1

MyRepository라는 이름의 Repository를 만든다.

Cloud 9과의 inter-connection 을 위해 아래와 같이 생성을 진행한다.
참고로, cloud9 기능에 대해서는 해당 AWS Official Docs에 잘 나와있으므로, 참고하면 좋겠다.
https://aws.amazon.com/ko/cloud9/details/

위와 같이 이름을 fill하고 진행한다.

기본옵션으로 선택해서 진행한다

Create environment 선택해서 진행한다

Cloud console 실행 후, aws cli 설치 여부와 git 설치 여부를 확인하기 위해 다음과 같은 명령어를 실행한다.

root $ sudo —s
root $ aws —version
Root $ git —version


iam에서 생성한 계정에 aws cli 설정을 진행하기 위해,aws configure 명령어를 실행하고, 이전 iam 에서 생성했던 “codecommit_user” 계정 생성시 발급받은 was access key id 와 secret access key, region 정보를 다음과 같이 입력한다.

AWS Access key ID [None] : 본인 access key id 입력 =
AWS Secret Access Key [None] : 본인 Secret Access Key 으로 변경
Default region name : ap-northeast-2
Default output format : x

터미널에서 git을 사용하여 git config를 실행힙니다
AWS 자격증명 프로파일로 git 자격증명 헬퍼 사용을 지정하고, git 자격증명 헬퍼가 경로를 repository로 전송할 수 있도록 한다.
그리고 exit명령어를 통해서 Ec2-user 권한으로 돌아온다.

CodeCommit 콘솔 > repository 에 들어가서
“Clone URL/ URL 복제하기”를 눌러서, git URL을 불러온다.

URL을 그대로 복사해서 복붙한다. 지금 하는 작업은 클론을 생성하는 작업을 하는 것이다.

Error 가 나는 것처럼 보이지만, 실제로 ls -al 명령어를 통해 확인해보았을 때, 정상적으로 repository에서 clone이 생성됨을 확인할 수 있다.

다시 cloud9 으로 돌아와서, new file을 add > rename “Index.html”으로 edit >save 해준다.

Contents는 testing 하기 위한 내용이므로, 뭐가 들어가도 상관없지만, 나는 hello world라고 기재하고 test를 진행했다!

Cd MyRepository (해설 : repository 로 이동)
Git add . (해설 : git add .
Git status (해설 :

Git add에 대한 용어 설명

Git add means a change in working directory to staging area, but doesn’t really affect the repository in any significant way - changes are not actually recoreded “until you run git commit”

$ git commit -m “Uploading New File to Codecommit”
$ git push
이제 git commit 명령어를 활용해서, 변경된 사항을 MyRepository로 commit을 수행하고, 전체 내용을 CodeCommit으로 push하기 위해, 위와 같은 명령어를 입력합니다.

Codecommit > repository에 들어와서 확인해보면, 정상적으로 git push 가 된 모습을 확인할 수 있다.

이제, cloud 9의 codecommit 로컬 repository 에서 필요내용을 작성하고, 등록을 진행할 수 있다.

Lab 3 - Github의 소스를 Codecommit으로 Migration 하는 방법

실습 의의(목적) : github에서 관리하던 source을 codecommit으로 migration 하는 방법을 알아본다.

즉, github의 소스를 C9 codecommit으로 옮기는 작업을 뜻한다.

이제 소스를 이전할 github에서 “clone with HTTPS”에서 URL을 아래와 같이 복사해놓는다.

아래와 같이 첫번째 케이스처럼 warning이 나와도 상관이 없고, 두번째 케이스처럼 successfully push 되었다고 떠도 정상적으로 작업을 수행한 것이므로, 실망할(?) 필요가 없다

그 다음, 다시 c9 terminal로 돌아가서, 임시로 소스를 다운로드 할 폴더를 생성하기 위해 아래와 같이 명령어를 수행한다

Mkdir git-migration
Git clone —mirror https://github.com/awsdocs/aws-lambda-developer-guide.git git-migration

Git-migration이라는 폴더를 생성하고,
git clone 명령어는 원격의 Git 저장소를 로컬에 복제해오는 명령어로, 즉, develoer-guide.git 을 git-migration 으로 복제해오겠다라는 의미이다

혹시 모르니까 해당 url이 유효한지 먼저 접속해서 확인해보고, 정상적으로 접속이 가능한 것을 확인한 후에,

아래와 같이 clone 이 완료되면 done.이라고 출력해준다!

그 다음, 다시 Git-migration 이라는 동기화된 폴더로 이동해서,
Cd git-migration
Git push https://git-codecommit.ap-northeast-2.amazonaws.com/v1/repos/aws-lambda-sample -all
을 입력해서 aws-lamba-sample 폴더로 developer-git 내용을 push 해준다.

즉, git-migration을 매개체로서 이용하는 것!

Git push를 해서 최종적으로 반영을 해줘야 한다

실제 레포지토리에 들어가서 확인해보면 아래와 같이 반영된 것을 확인할 수 있다.


<정리>

즉, AWS Codecommit을 이용해서 1차 / 2차(최종) 동기화 작업을 수행한다고 했는데,
1차 : Branch(메인 저장소와 격리된 별도의 저장소, “가지” 라고도 함)에 Push 하고 원본 소스에 대한 것은 아직 미반영상태이다.
Ex) 위에서 한 작업들은 branch를 git-migration 이라는 폴더(diretory) 로 만들어서, push(git)한 것이다.
2차 : 메인 저장소 Repos에다가 최종적으로 push 하는 것을 merge한다고 하고, 이건 원본 소스에 대한 반영이 들어간다.
Ex) 최종적으로 push g

  • Additionally, 태깅(Tagging) 에 대한 개념에 대해서도 설명하자면, 개발 이력 (record 이자 History)을 남기는 것을 뜻한다.

4. 코드 빌드 및 테스트 : AWS CodeBuild

이론적인 개념은 읽으면서 정리한 후에 여기에 옮겨 적고,
그 후에 laboratory 실습들은 아래에 화면과 함께 정리한다.

AWS Codebuild 란?

  • 정의
    소스코드를 컴파일하는 단계에서부터 테스트 후 sw 배포까지의 단계를 지원하는 완전 관리형 지속적 통합(Continuous Integration) 서비스이다.

즉, compile ~ deploy 까지 관리해주는 툴이다.

  • 이점
    코드빌드를 사용하면, 자체 빌드 서버가 필요하지 않게되며, 빌드 서버를 프로비저닝하거나, 운영/관리 및 확장을 수행할 수 필요가 없다.
    또한 빌드를 수행할 볼류에 따라 인프라가 자동으로 확장 및 축소를 지원하여, 제출되는 빌드에 대해 즉각적으로 처리되므로, 여러 빌드를 동시에 처리할 수 잇기 때문에 빌드를 위해 대기하지 않고 빠르고 효율적으로 빌드작업을 수행할 수 있다. --> autoscaling function

AWS Codebuild는 apache maven, gradle과 같이 널리 사용되는 프로그래밍 언어 및 빌드 도구에 맞게 사전 패키지된 빌드 환경을 제공한다. 또한 KMS(Key Management Service)을 이용하여 Build Artifact 가 암호화되며, AWS IAM을 통해 권한을 관리할 수 있다. AWS Code 서비스와의 연동을 통해 CI/CD를 위한 완전 자동화 Software release workflow 를 생성하거나, 기존 CI/CD workflow에 통합하는 것이 가능하다.

AWS Codebuild는 빌드를 완료할 때 까지 소요된 시간을 기준으로 비용이 청구되며, 사용하지 않는 빌드서버에 대해서는 비용을 지불하지 않는다.

AWS Codebuild를 사용했을 때 주요 기능과 기대효과는 아래와 같다.

  • 주요 기능/ 기대 효과

1. 빌드와 테스트 (Build & Test)
BUild - AWS Codebuild는 코드를 빌드하고, Artifact 는 Amazon S3 Bucket에 저장하거나, Artifact 저장소에 업로드한다.

Test - Docker 이미지 또는 퍼블릭 Docker Hub에 업로드하거나, Amazon ECR을 관리하기 위해 런타임과 도구를 패키징하여 자신만의 빌드 환경을 구성할 수 있다.

2. 구성 설정 (Config)
단위 테스트, 코드 패키지 및 Build-To-Package설치와 같은 명령어를 정의할 수 있으며, 수행단계별로 실행하도록 구성할 수 있다.

빌드 사양파일 (buildspec.yml) YAML로 구성하여, 각 단계에서 수행할 명령어를 정의할 수 있으며, 수행 단계별로 실행하도록 구성할 수 있다.

3. 지속적인 통합과 배포 (CI/CD)

개발자는 더욱 자주 소스를 배포할 수 있으며, 소스코드의 컴파일 단계부터 테스트 후 배포단계까지를 지속적으로 지원하는 완전관리형 지속적 통합서비스를 사용함으로서 효율성을 높일 수 있다.
또한, 기존에 사용되던 다양한 tool과의 연동을 통해 기존 워크플로우에 손쉽게 통합할 수 있다.

4. 빌드 프로세스에 대한 모니터링 (Monitoring)

AWS Codebuild는 AWS Management Console, SDK, AWS CLI 및 API 에서 빌드에 대한 상세내역을 확인할 수 있으며, BUild ARN, Build Project, 리포지토리, 시작 및 종료시간, 빌드 상태 등의 빌드 정보를 손쉽게 확인할 수 있다.

  • AWS Code Build 의 실행방법과 동작 방식 \

AWS Codebuild를 실행하는 방법은 AWS Codebuild 콘솔을 사용하거나, AWS Codepipeline콘솔을 사용하여 실행할 수 있고, command line interface 또는 AWS SDK 를 사용하여 codebuild를 실행할 수 있다.

code buildsms AWS Management console , AWS CLI, AWS SDKs, AWS Codepipeline에서 실행이 가능하며, 아래와 같이 전반적으로 compile~deploy의 과정들이 aws 서비스를 통해 이루어진다고 생각하면 된다.

그리고 AWS Codebuild는 다음과 같은 방식으로 동작한다.

1. Source Control codecommit Github S3
2. Build Project Source Control Build Environment Output Location
3. Build Environmnet Create Environment Download Source code RUn commands in spec
4. S3 DEployable Aritfacts
5. Notifications SNS cloudwatch
6. Destory Build Environment & Cleanup

AWS Codebuild의 빌드 사양

profile
행복과 성장에 대해 고민하는 사람🤓 , 포스팅 주기가 잦지 않을 수 있습니다만, 항상 좋은 내용을 담고자 합니다🙇🏼

0개의 댓글