Skip to content

DevOps에 대한 개념 이해와 AWS 개발자 도구를 활용한 실습 및 연구

License

Notifications You must be signed in to change notification settings

mincloud1501/DevOps

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DevOps

DevOps에 대한 개념 이해와 AWS의 개발자 도구를 활용한 실습 및 연구 Sources

Video Label

DevOps 1.0 vs 2.0 Sources

  • DevOps 1.0은 개발, QA, 운영의 상호작용을 조화시키는 데 집중되어 지속적인 전달을 시스템화하는 동시에 보다 유연하고 안정적인 애플리케이션 인프라를 구축하는 것이 1차 목표
  • DevOps 2.0을 통해 성공적인 소프트웨어 릴리즈를 위한 중요한 구성요소로 적응형 기능 제공의 출현을 확인할 수 있다.

devops2.0

  • 조직의 경우 DevOps 2.0은 비기술 팀원에게 DevOps의 힘을 가져다 준다. 실제로 마케팅, 설계 및 비즈니스 팀이 엔지니어링 리소스를 소비하지 않고 목표 가시성과 테스트를 제어할 수 있는 권한을 부여한다.
  • 기능 Rollout이 코드 배포에서 분리되기 때문에 비기술 팀 구성원은 앱의 무결성을 훼손하지 않고, 특정 기능의 가시성을 제어할 수 있다. 이는 주로 기능 플래그 사용자 인터페이스 또는 팀 구성원이 GUI를 통해 사용자를 대상으로 할 수 있는 유사한 제어판을 사용하여 구현된다.

devops2cycle

  • DevOps는 단순히 애플리케이션을 배포하고 유지 관리하는 방법으로만 남아 있는 것이 아니라, 소프트웨어를 더 빠르고 위험 부담이 덜한 상태로 제공할 수 있는 방법이 된다.
  • 지속적인 제공이 증가함에 따라, 증가하는 소비자 기대치에 부합하는 방식으로 소프트웨어를 배치하게 될 것이다.

devops2ucd

  • 사용자 중심 배포는 제품의 최종 사용자의 관점에서 지속적인 제공을 프레임으로 하는 방법이다.
  • 이는 애플리케이션의 무결성을 훼손하지 않으면서 증가하는 소비자 기대치를 만족시키는 방법이다.
  • 단순히 개발 주기를 앞당기는 방식이 아니라, 지속적인 전달을 통해 사용자들의 삶을 더 좋게 만드는 새로운 시대를 맞이하고 있다.

DevOps Tools

  • DevOps 2.0의 중심 과제는 소프트웨어 배포가 소비자 요구에 대응하도록 하기 위한 적절한 도구를 활용하는 것이다.
  • 지난 몇 년 동안, 이전에 상이한 분야들 간의 조정을 용이하게 하기 위해 많은 DevOps 도구들이 등장하였다.
  • DevOps는 하나의 특정 도구를 사용하는 것이 아니라 개발을 가속화하고 위험을 완화하기 위해 올바른 도구 조합을 사용하는 것이다.
  • 하기 목록은 몇 가지 새로운 DevOps 도구를 목적별로 분류하였다.

devopstools


DevOps 모델 정의

  • DevOps는 application과 service를 빠른 속도로 제공할 수 있도록 조직의 역량을 향상시키는 문화 철학, 방식 및 도구의 조합을 의미한다.
  • 기존의 Software 개발 및 Infra 관리 process를 사용하는 조직보다 제품을 더 빠르게 혁신하고 개선할 수 있다.

model

DevOps 작동 방식

  • DevOps Model에서는 개발팀과 운영팀이 더 이상 Silo에 묶여 있지 않고, 이 두 팀이 단일팀으로 병합되어 엔지니어가 Developement/Test/Deploy/Operation의 전체 application Life Cycle에 걸쳐 작업하고 단일 기능에 한정되지 않은 광범위한 기술을 개발한다.
  • 일부 DevOps model에서 품질보증팀과 보안팀 또한 application life cycle에 걸쳐 개발 및 운영과 좀 더 긴밀하게 통합된다. DevOps팀 전체가 보안을 중점으로 두는 경우 DevSecOps라고도 한다.
  • DevOps 방식을 사용하여 속도가 느리고 수동으로 수행되던 프로세스를 자동화하고, 애플리케이션을 안정적으로 빠르게 운영하고 개선하는 데 도움이 되는 기술 스택과 도구를 사용하게 된다. 이러한 도구 덕분에 엔지니어는 이전 같으면 다른 팀의 도움이 필요했을 코드 배포 또는 인프라 프로비저닝과 같이 작업을 독립적으로 수행할 수 있으며, 따라서 팀의 작업 속도가 더욱 빨라지게 된다.

DevOps의 이점

  • 속도 : 작업 속도가 빨라지므로 고객을 위해 더 빠르게 혁신하고, 시장 변화에 더 잘 적응하고, 좀 더 효율적으로 비즈니스 성과를 창출할 수 있다. DevOps 모델을 사용하면 개발자와 운영팀이 이러한 성과를 실현할 수 있는데, 예를 들어 MicroService와 지속적 전달을 사용하면 팀에서 서비스를 주도적으로 운영하여 업데이트를 좀 더 빠르게 릴리스할 수 있다.
  • 신속한 제공 : release의 빈도와 속도를 개선하여 제품을 더 빠르게 혁신하고 개선할 수 있다. 새로운 기능의 릴리스와 버그 수정 속도가 빨라질수록 고객의 요구에 더 빠르게 대응하여 경쟁 우위를 강화할 수 있다. 지속적 통합과 지속적 전달은 빌드에서 배포까지 소프트웨어 릴리스 프로세스를 자동화하는 방식이다.
  • 안정성 : 최종 사용자에게 지속적으로 긍정적인 경험을 제공하는 한편 더욱 빠르게 안정적으로 제공할 수 있도록 애플리케이션 업데이트와 인프라 변경의 품질을 보장한다. 지속적 통합 및 지속적 전달과 같은 방식을 사용하여 각 변경 사항이 제대로 작동하며 안전한지 테스트하고, 모니터링과 로깅 방식을 통해 실시간으로 성능에 대한 정보를 얻을 수 있다.
  • 확장 : 규모에 따라 인프라와 개발 프로세스를 운영 및 관리한다. 자동화와 일관성이 지원되므로 위험을 줄이면서 복잡한 시스템 또는 변화하는 시스템을 효율적으로 관리할 수 있다. 예를 들어 코드형 인프라를 사용하면 개발, 테스트 및 프로덕션 환경을 반복 가능하고 좀 더 효율적인 방식으로 관리할 수 있다.
  • 협업 강화 : 주인의식 및 책임과 같은 가치를 강조하는 DevOps 문화 모델에서 좀 더 효과적인 팀을 구축한다. 개발자와 운영팀은 긴밀하게 협력하고, 많은 책임을 공유하며, 워크플로를 결합한다. 이를 통해 비효율성을 줄이고 시간을 절약한다.
  • 보안 : 제어를 유지하고 규정을 준수하면서 신속하게 진행할 수 있다. 자동화된 규정 준수 정책, 세분화된 제어 및 구성 관리 기술을 사용함으로써 보안을 그대로 유지하면서 DevOps 모델을 도입할 수 있다. 예를 들어 코드형 인프라와 코드형 정책을 사용하면 규모에 따라 규정 준수를 정의하고 추적할 수 있다.

DevOps 모델을 도입하는 방법

  • DevOps로 전환하기 위해서는 문화와 사고방식의 변화가 필요하다.

  • DevOps는 기존에 Silo에 묶여 있던 개발과 운영이라는 두 팀 간의 장벽을 없애주며, 일부 조직에서는 개발팀과 운영팀이 나뉘어 있지 않고 엔지니어가 두 업무를 모두 수행할 수도 있다.

  • DevOps에서는 두 팀이 함께 작업하여 개발자의 생산성과 운영의 안정성을 모두 최적화한다.

  • 조직이 소프트웨어 개발과 인프라 관리 프로세스의 자동화 및 간소화를 통해 더 빠르게 혁신할 수 있도록 지원하는 몇 가지 주요 방식이 있는데, 이러한 방식 대부분은 적절한 도구를 사용해 수행된다.

  • 기본 방식 중 하나는 소규모 업데이트를 자주 수행하는 것으로, 이 방식을 통해 조직은 고객을 위해 더 빠르게 혁신할 수 있다. 소규모로 자주 업데이트하면 각 배포의 위험이 줄어든다. 팀에서 오류의 원인이 되는 최근 배포를 확인할 수 있으므로 더 빠르게 버그를 해결할 수 있고, 업데이트 소요 시간과 규모는 다르지만, DevOps 모델을 사용하는 조직은 기존 소프트웨어 개발 방식을 사용하는 조직보다 훨씬 더 자주 업데이트를 배포하게 된다.

  • 또, microservice architecture를 사용하여 애플리케이션의 유연성과 혁신의 속도를 높일 수 있다. microservice architecture는 복잡한 대규모 시스템을 간단하고 독립적인 프로젝트로 결합 해제하게 된다. 애플리케이션은 많은 개별 구성 요소(서비스)로 분할되며, 각 서비스는 단일 목적 또는 기능으로 한정되고 피어 서비스 및 전체 애플리케이션과는 별개로 운영된다.

  • 그러나, 마이크로 서비스와 릴리스 빈도 증가의 조합은 배포 수를 현저히 늘려 운영 문제로 이어질 수 있다. 따라서 지속적 통합 및 지속적 전달과 같은 DevOps 방식을 사용하면, 이러한 문제를 해결하고 조직이 안전하고 안정적인 방식으로 신속하게 업데이트를 제공할 수 있게 된다.

  • 코드형 인프라 및 구성 관리와 같은 인프라 자동화 방식은 잦은 변경에 대해 컴퓨팅 리소스를 탄력적이고 대응적으로 유지하는 데 도움이 된다. 또한, 모니터링과 로깅의 사용도 엔지니어가 애플리케이션 및 인프라의 성능을 추적하여 문제에 신속하게 대응할 수 있게 하는 데 도움이 된다.


AWS DevOps Development Tool

  • AWS Developer Tools 및 AWS CodeCommit(관리형 소스 제어 서비스), AWS CodeBuild(완전히 관리되는 빌드 서비스), CodePipeline(완전히 관리되는 연속 전송 서비스), CodeDeploy(자동화된 애플리케이션 배포 서비스)와 CodeStar 및 Cloud9에 대해 실습해 본다.

aws architecture

■ CodeCommit Sources

  • 자동화된 빌드 및 테스트가 수행된 후, 개발자가 코드 변경 사항을 중앙 리포지토리에 정기적으로 병합하는 소프트웨어 개발 방식
  • 지속적 통합의 핵심 목표는 버그를 신속하게 찾아 해결하고, 소프트웨어 품질을 개선하고, 새로운 소프트웨어 업데이트를 검증 및 릴리스하는데 걸리는 시간을 단축하는 것이다.

codecommitworkflow

☞ 1단계: CodeCommit 리포지토리 사용을 위한 권한 및 SSH 설정

  • IAM Console에서 기존 정책 직접 연결을 통해 사용자에 AWSCodeCommitPowerUser 권한을 추가해 준다.

addpolicy

  • CodeCommit은 Git 버전 1.7.9 이상을 사용해야 한다.
  • SSH 및 Windows : Git 및 CodeCommit에 대한 퍼블릭 및 프라이빗 키 설정 후, codecommit_rsa.pub 파일 내용을 복사한다.
    • codecommit_rsa : Private Key File
    • codecommit_rsa.pub : Public Key File
$ ssh-keygen
  • IAM Console > 내 보안 자격 증명에서 Upload SSH public key를 Upload한다.

sshkey

  • ~/.ssh 디렉터리에서 config 파일을 생성한다.
$ notepad ~/.ssh/config
  • 파일에 다음 행을 추가한다. User 값은 앞서 복사한 SSH Key ID이고 IdentityFile은 Private Key File의 경로 및 이름 (파일 이름은 파일 확장명 없이 config여야 한다. 그렇지 않으면 SSH 연결 실패)
Host git-codecommit.*.amazonaws.com
  User SSH Key
  IdentityFile ~/.ssh/codecommit_rsa
  • SSH 구성 테스트
$ ssh git-codecommit.us-east-2.amazonaws.com

You have successfully authenticated over SSH. You can use Git to interact with AWS CodeCommit. Interactive shells are not supported.Connection to git-codecommit.us-east-2.amazonaws.com closed by remote host.
Connection to git-codecommit.us-east-2.amazonaws.com closed.

☞ 2단계: CodeCommit 리포지토리 생성 및 Repository 복제

  • https://console.aws.amazon.com/codecommit/ 에서 CodeCommit 콘솔을 열고 Create repository (MyDemoRepo)

  • Local repository를 설정하려면 console에서 새 리포지토리를 연 상태에서 페이지 오른쪽 상단의 URL 복제를 선택한 후, Clone SSH(SSH 복제)를 선택한다. Git 리포지토리를 복제할 주소는 클립보드에 복사된다.

  • 터미널 또는 명령줄에서 로컬 리포지토리를 저장하고 싶은 로컬 디렉터리로 이동한다. (/tmp)

  • 다음 명령을 실행하여 리포지토리를 복제하여 SSH 주소를 앞 단계에서 복사한 주소로 교체한다. 이 명령을 통해 MyDemoRepo라는 디렉터리가 생성되고 이 디렉터리에 샘플 애플리케이션을 복사한다.

$ git clone ssh://Your-SSH-Key-ID@git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo

☞ 3단계: CodeCommit 리포지토리에 Sample Code 추가

  • SampleApp_Linux.zip 파일을 다운로드하여 앞 단계에서 생성한 my-demo-repo에 파일을 복사한다.
/my-demo-repo
   │-- appspec.yml
   │-- index.html
   │-- LICENSE.txt
   └-- scripts
       │-- install_dependencies
       │-- start_server
       └-- stop_server
  • 모든 파일 Staging, Commit, Push를 수행한다.
$ git add -A
$ git commit -m "Add sample application files"
$ git push

mydemorepo


■ CodePipeline Sources

  • CodePipeline은 소프트웨어 변경 내용을 지속적으로 릴리스하는데 필요한 단계를 자동화한다.
  • 프로덕션에 릴리스하기 위한 코드 변경이 자동으로 빌드, 테스트 및 준비되는 소프트웨어 개발 방식
  • 빌드 단계 이후의 모든 코드 변경 사항을 테스트 환경 및/또는 프로덕션 환경에 배포함으로써 지속적 통합을 확장한다. 지속적 전달이 적절하게 구현되면, 개발자는 언제나 즉시 배포할 수 있고 표준화된 테스트 프로세스를 통과한 빌드 아티팩트를 보유하게 된다.

CodePipeline

☞ 배포 단계 : CodeDeploy Sources

  • CodeDeploy는 Amazon EC2 인스턴스, 온프레미스 인스턴스, 서버리스 Lambda 함수 또는 Amazon ECS 서비스로 애플리케이션 배포를 자동화하는 배포 서비스를 말한다.
  • Code, 서버리스 AWS Lambda 함수, 웹 및 구성 파일, 실행 파일, packages, 스크립트, 멀티미디어 파일의 다양한 애플리케이션 콘텐츠를 거의 무제한으로 배포할 수 있다.

[In-Place Deploy Diagram]

inplacedeploy

[구성요소]

  • Application : 배포할 애플리케이션을 고유하게 식별하는 이름

  • Computing Platform : CodeDeploy가 애플리케이션을 배포하는 플랫폼

    • EC2/온프레미스: 물리적 서버의 인스턴스
    • AWS Lambda : 업데이트 버전의 Lambda 함수로 구성된 애플리케이션을 배포하는 데 사용
    • Amazon ECS : 컨테이너화된 Amazon ECS 애플리케이션을 작업 세트로 배포하는 데 사용
  • 배포 구성 : 배포 중 CodeDeploy에서 사용하는 배포 규칙과 배포 성공 및 실패 조건 세트 (Canary/Linear/All-at-once)

  • 배포 그룹 : 개별 인스턴스 세트. 배포 그룹에는 개별적으로 태그가 지정된 인스턴스, Amazon EC2 Auto Scaling 그룹의 Amazon EC2 인스턴스 또는 둘 다 포함

  • 배포 유형 : 배포 그룹의 인스턴스에서 최신 애플리케이션 개정을 사용 가능하게 만드는 방법

    • 실행 중 배포 : 배포 그룹의 각 인스턴스에 있는 애플리케이션이 중지되고 최신 애플리케이션 개정 버전이 설치되며 애플리케이션의 새 버전이 시작되고 유효성이 검사된다.
    • Blue/Green 배포 : 새 애플리케이션 버전의 변경으로 인한 중단을 최소화하면서 애플리케이션을 업데이트하는 데 사용
  • IAM 인스턴스 프로파일 : Amazon EC2 인스턴스에 연결하는 IAM 역할

  • 개정 : AWS Lambda 배포 개정은 배포할 Lambda 함수에 대한 정보를 지정하는 YAML 형식 또는 JSON 형식의 파일

  • 서비스 역할 : AWS 리소스에 액세스할 수 있는 권한을 AWS 서비스에 부여하는 IAM 역할

  • 대상 개정 : 리포지토리에 업로드했고 배포 그룹의 인스턴스에 배포하려는 가장 최신 버전의 애플리케이션 개정

  • EC2 Linux 인스턴스 생성 및 CodeDeploy 에이전트 설치 (free version으로 1$가 결재된다.)

    • sample application이 배포되는 EC2 인스턴스를 생성한다.
    • 이 프로세스의 일부로 EC2 instance에 CodeDeploy agent를 설치한다.
    • CodeDeploy agent는 instance를 CodeDeploy 배포에서 사용할 수 있게 해주는 software package이다.
    • instance에 IAM 역할을 연결하여 CodeDeploy agent가 application 배포에 사용하는 파일을 가져올 수 있게 허용해 준다.
  • 인스턴스 역할을 생성을 위해 IAM > 역할만들기 > AWS서비스/EC2 사용사례 > AmazonEC2RoleforAWSCodeDeploy 권한 추가 > 역할 이름 EC2InstanceRole 으로 생성

  • 인스턴스 시작을 위해 Amazon EC2 콘솔 (https://console.aws.amazon.com/ec2/) 에서 실행중인 인스턴스 선택 후 인스턴스 시작

    • [Step 1] : Amazon Linux 2 AMI (HVM), SSD Volume Type 선택
    • [Step 2] : Choose an Instance Type에서 프리 티어 가능 t2.micro 유형을 선택

    instancetype

    • [Step 3] : Configure Instance Details에서 인스턴스 수 1, 퍼블릭 IP 자동 할당 활성화, IAM role EC2InstanceRole 선택
    • [Step 4] : Add Storage 항목은 패스, Add Tag에서 [Key]에 Name을 입력하고 [Value]에 MyCodePipelineDemo를 입력한다.
    • [Step 5] : Configure Security Group에서 [SSH] 행의 [Source]에서 [My IP]를 선택 후, 규칙 추가하여 [HTTP] [Source]에서 [My IP]를 선택
    • [Step 6] : Launch 후, key pair를 다운로드 하고 인스턴스를 시작한다.

    createkeypair instancestatus

  • EC2에 CodeDeploy Agent 설치하기

    • [Step 1] : PuTTY를 통한 EC2 Instance에 접속하기 Sources (ID: ec2-user)
    • [Step 2] : Instance 설정하기, 하기와 같이 설정
$sudo yum -y update
$sudo yum install -y ruby
$sudo yum install -y aws-cli
$cd /home/ec2-user
$sudo aws configure # AWS 접속을 위한 Access Key, Secret Access Key, region name, output format :json
$wget https://aws-codedeploy-ap-northeast-2.s3.amazonaws.com/latest/install # Agent 설치파일을 다운로드
$chmod +x ./install # 실행권한을 추가
$sudo ./install auto # 설치 진행
$sudo service codedeploy-agent status # Agent가 실행중인지 확인

The AWS CodeDeploy agent is running as PID 6683

$sudo vim /etc/init.d/codedeploy-startup.sh # EC2 인스턴스가 부팅되면 자동으로 AWS CodeDeploy Agent가 실행될 수 있도록 /etc/init.d/에 쉘 스크립트 파일을 생성

#!/bin/bash 
echo 'Starting codedeploy-agent' 
sudo service codedeploy-agent restart

$sudo chmod +x /etc/init.d/codedeploy-startup.sh # 스크립트 파일을 저장한뒤, 실행권한을 추가
  • CodeDeploy에서 application 생성하기

    • [Step 1] 서비스 역할 생성 : CodeDeploy 서비스 역할 생성을 위해 IAM Console에서 Create Role하여 사용 사례 선택에서 CodeDeploy를 선택한 후, 역할 이름(CodeDeployRole)을 입력한 후 역할 생성
    • [Step 2] 애플리케이션 생성 : CodeDeploy 콘솔에서 application을 생성한다. (name: MyDemoApplication, 컴퓨팅 플랫폼: EC2/온프레미스)

    createapplication

    • [Step 3] 배포 그룹 생성 : 배포 그룹명 MyDemoDeploymentGroup, 서비스 역할명 CodeDeployRole, 배포유형 현재 위치, 환경 구성 Amazon EC2 인스턴스에서 Key값 MyCodePipelineDemo, 배포 구성 CodeDeployDefault.OneAtaTime, 로드 밸런싱 비활성화, 경보구성 무시
  • CodePipeline에서 첫 번째 파이프라인 생성하기

    • [Step 1] 파이프라인 설정 : 파이프라인명 MyFirstPipeline, 새 서비스역할 선택
    • [Step 2] 소스 스테이지 설정 : 소스 공급자 AWS CodeCommit, 리포지토리 이름 MyDemoRepo, 브랜치명 master
    • [Step 3] 빌드 스테이지 설정 : 본 실습에서는 빌드 서비스가 필요 없는 코드를 배포하므로 이 단계는 skip한다.
    • [Step 4] 배포 스테이지 설정 : 배포 공급자 AWS CodeDeploy, 애플리케이션명 MyDemoApplication, 배포그룹 MyDemoDeploymentGroup 설정 후 파이프라인 생성

    pipelineresult

    coderesult


☞ Build 단계 : CodeBuild Sources

  • CodeBuild는 Source Code를 Compile하고 단위 테스트를 실행하며 배포할 준비가 완료된 Artifact를 생성한다.
  • CodeBuild에서는 자체 빌드 서버를 프로비저닝, 관리 및 확장할 필요가 없고, Apache Maven, Gradle 등과 같은 널리 사용되는 프로그래밍 언어 및 빌드 도구에 맞게 사전 패키지된 빌드 환경을 제공한다.
  • CodeBuild는 최대 빌드 요청 수에 맞게 자동으로 확장된다.

codebuild

  • Console을 사용하여 AWS CodeBuild 시작하기

    • [Step 1] : 두 개의 S3 버킷 생성 (입력 : codebuild-region-ID-account-ID-input-bucket, 출력 : codebuild-region-ID-account-ID-output-bucket)
    • [Step 2] : 소스 코드 생성, MessageUtil.java 및 TestMessageUtil.java, pom.xml 파일 생성 (Source는 GitHub 및 CodeCommit, Bitbucket의 Repository를 연동하여 가져올 수도 있다)
    • [Step 3] : buildspec.yml 파일 생성 후, 소스 코드 및 빌드 사양 파일을 입력 버킷에 추가 (MessageUtil.zip 파일을 생성)

    inputbucket

    • [Step 4] : 빌드 프로젝트 생성, CodeBuild Console (https://console.aws.amazon.com/codesuite/codebuild/home) 에 접속하여, 빌드 프로젝트명(codebuild-demo-project) 입력 후
      • 소스의 소스 공급자 Amazon S3, 버킷 codebuild-region-ID-account-ID-input-bucket, S3 object key(S3 객체 키) MessageUtil.zip, 환경 이미지 관리형 이미지
      • 운영 체제 Amazon Linux 2, 런타임 표준, 이미지 aws/codebuild/amazonlinux2-x86_64-standard:2.0, 서비스 역할 New service role(새 서비스 역할)
      • Buildspec(빌드 사양) Use a buildspec file(빌드 사양 파일 사용), 결과물 유형 Amazon S3, 버킷 이름 codebuild-region-ID-account-ID-output-bucket

    buildproject

    • [Step 5] : 빌드 실행 후, 단계별 빌드 정보를 확인할 수 있다.

    buildprojectresult buildinfo

    • [Step 6] : 빌드 출력 artifact 가져오기, Amazon S3 콘솔에서 출력 버킷을 선택하여 target 폴더에서 빌드 출력 결과물을 확인한다.

    buildprojecttarget


■ CodeStar Sources

  • AWS CodeStar는 AWS에서 소프트웨어 개발 프로젝트를 생성, 관리, 작업하기 위한 클라우드 기반 서비스
  • AWS CodeStar 프로젝트를 통해 AWS에서 애플리케이션을 빠르게 개발, 빌드, 배포할 수 있다.
  • AWS CodeStar 프로젝트는 프로젝트 개발 도구 체인에 대한 AWS 서비스를 생성 및 통합한다.
  • 선택한 AWS CodeStar 프로젝트 템플릿에 따라, 도구 체인에 소스 제어, 빌드, 배포, 가상 서버 또는 서버리스 리소스 등이 포함될 수 있다.
  • AWS CodeStar는 (팀원이라고 하는) 프로젝트 사용자에 필요한 권한을 관리한다. 프로젝트 소유자는 사용자를 프로젝트에 팀원으로 추가하여 각 팀원의 역할에 따라 프로젝트 및 리소스에 대한 액세스 권한을 쉽고 빠르게 부여할 수 있다.

AWS CodeStar로 할 수 있는 작업 Sources

  • 웹 애플리케이션, 웹 서비스 등에 대한 템플릿을 사용하여 AWS에서 몇 분 이내에 새 소프트웨어 프로젝트를 시작
  • 팀에 대한 프로젝트 액세스 관리
  • 한 곳에서 프로젝트에 대한 시각화, 운영 협업
  • 필요한 모든 도구로 신속하게 반복

codestarworkflow

☞ CodeStar 설정 단계

  • AWS CodeStar 서비스 역할 만들기

    • [Step 1] : 서비스 역할 생성

    servicerole

    • [Step 2] : IAM 사용자에 대한 권한 구성, IAM 콘솔에서 AWSCodeStarFullAccess 관리형 정책을 프로젝트 생성에 사용한 IAM 사용자에 연결
    • [Step 3] : 연합된 사용자를 위해 권한 구성하기, 연합된 사용자는 사용자가 AWS CodeStar API를 사용하고 프로젝트(예: Amazon EC2 또는 AWS Lambda)에서 사용하는 모든 리소스에 액세스하게 하는 IAM 권한이 있어야 한다.
    • [Step 4] : AWS CodeStar 프로젝트에 대한 Amazon EC2 키 페어 만들기 Sources

☞ Serverless Project 생성 및 관리

  • AWS CodeStar를 사용하여 AWS SAM을 통해 Python 기반 웹 서비스를 빌드 및 배포하는 프로젝트를 생성할 수 있다.

    • [Step 1] : 프로젝트 생성, 애플리케이션 범주 웹 서비스, 프로그래밍 언어 Python, AWS 서비스 AWS Lambda 선택, 프로젝트명 My SAM Project, "AWS CodeStar는 사용자 대신 AWS 리소스를 관리할 수 있는 권한이 필요합니다" 선택 후 Welcome to My SAM Project!가 표시될 때까지 대기 (my-sam-project-Pipeline, awscodestar-my-sam-project-lambda-HelloWorld가 자동 생성된다.)

    mysamproject

    • [Step 2] : CodeCommit에서 소스 코드 리포지토리를 탐색, AWS CodeStar 콘솔에서 프로젝트를 열어 둔 상태로 측면 탐색 모음에서 코드를 선택
      • buildspec.yml : CodePipeline는 CodeBuild가 빌드 단계에서 AWS SAM을 사용하여 웹 서비스를 패키징하도록 지시한다.
      • index.py : Lambda 함수에 대한 로직을 포함하며, 이 함수는 ISO 형식의 문자열 Hello World와 타임스탬프를 출력힌다.
      • README.md : 리포지토리에 대한 일반 정보를 포함힌다.
      • template-configuation.json : 프로젝트 ID로 리소스에 태그를 지정하는 데 사용되는 자리 표시자와 함께 프로젝트 ARN을 포함한다.
      • template.yml : AWS SAM이 웹 서비스를 패키징하고 API 게이트웨이에서 API를 만드는 데 사용힌다.

    mysamprojectcode

    • [Step 3] : 웹 서비스 테스트, 이전 단계의 프로젝트를 열어 둔 상태로 측면 탐색 모음에서 대시보드를 선택 (연속 배포 타일에서 소스, 빌드 및 배포 단계에 대해 Succeeded 확인)한 후, 애플리케이션 엔드포인트 링크를 선택 (https://API_ID.execute-api.REGION_ID.amazonaws.com/Prod/)

    mysamprojecttest

☞ 프로젝트 코드를 편집하기 위한 로컬 워크스테이션 설정

  • 로컬 워크스테이션을 설정하여 AWS CodeStar 프로젝트의 소스 코드를 편집한다.

    • [Step 1] : Visual Studio가 설치되어 있으면, Visual Studio 및 리포지토리 복제 URL에서 HTTPS를 선택한 후, 지침보기를 선택
    • [Step 2] : AWS Toolkit for Visual Studio 설치 후, Visual Studio에 연결 AWS Explorer에서 Add a Region 선택
    • [Step 3] : 로컬 워크스테이션에 Git을 설정하고, IAM 사용자에 대한 Git 자격 증명을 생성

    httpsgit

    • [Step 4] : 프로젝트의 CodeCommit 리포지토리를 로컬 워크스테이션에 복제 후, VS Code에 Git Extension Pack 설치
$ git clone ssh://git-codecommit.us-east-2.amazonaws.com/v1/repos/My-SAM-Project

☞ 웹 서비스에 로직 추가

  • 로컬 워크스테이션을 사용하여 웹 서비스에 로직을 추가하고, Lambda 함수를 추가한 다음 API 게이트웨이의 API에 연결해 본다.
  • hello.py 파일 추가 및 template.yml 파일에 내용 추가
$ git add .

$ git commit -m "Added hello.py and updated template.yaml."
[master 328ab7c] Added hello.py and updated template.yaml.
 2 files changed, 27 insertions(+), 1 deletion(-)
 create mode 100644 hello.py

$ git push
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 4 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 565 bytes | 141.00 KiB/s, done.
Total 4 (delta 2), reused 0 (delta 0)
To ssh://git-codecommit.us-east-2.amazonaws.com/v1/repos/My-SAM-Project
   da5ccd4..328ab7c  master -> master
  • AWS CodeStar는 Push를 감지한 후, CodePipeline가 CodeBuild 및 AWS SAM을 사용하여 자동으로 웹 서비스를 다시 빌드 및 배포하도록 지시한다. 프로젝트 대시보드에서 배포 진행 상황을 볼 수 있다.

projectdashboard

{"output": "Hello mincloud"}

☞ CodeStar로 Team 작업하기

teamproject

  • AWS CodeStar 콘솔 (https://console.aws.amazon.com/codestar/) 에서 Team을 선택하여 팀원 (IAM 사용자)을 추가한다.
  • 팀원 추가 탭의 프로젝트 역할에서 이 사용자의 AWS CodeStar 역할(소유자, 기고자 또는 최종 사용자)을 선택한다.
  • 새 팀원에게 다음 정보를 제공한다.
    • AWS CodeStar 프로젝트의 연결 정보
    • 소스 코드가 CodeCommit에 저장되어 있는 경우 로컬 컴퓨터에서 Git 자격 증명으로 CodeCommit 리포지토리에 대한 액세스를 설정하는 지침
    • AWS CodeStar 사용자 프로필 작업 에 설명된 대로 사용자가 표시 이름, 이메일 주소, 퍼블릭 Amazon EC2 SSH 키를 관리하는 방법에 대한 정보
    • 일회용 암호와 연결 정보(사용자가 AWS를 처음 사용하며 해당 사용자의 IAM 사용자를 만든 경우) 암호는 사용자가 처음 로그인하면 만료되며, 사용자는 새 암호를 선택해야 한다.

Cloud9 Sources

  • AWS Cloud9은 코드를 작성, 실행 및 디버깅하는 데 사용하는 클라우드 기반 통합 개발 환경(IDE)

  • AWS Cloud9를 사용하면 소프트웨어를 코드화, 빌드, 실행, 테스트, 디버그 및 릴리스할 수 있다.

    • 여러 프로그래밍 언어로 된 코드 및 AWS 클라우드 개발 키트 사용 (AWS CDK)
    • 실행 중인 도커 컨테이너에서 코드 작업
    • 온라인 코드 리포지토리 사용
    • 실시간으로 다른 사람과 협업
    • 다양한 데이터베이스 및 웹 사이트 기술과 상호 작용
    • AWS Lambda, Amazon API Gateway 및 AWS Serverless Applications 대상 지정
    • Amazon Lightsail, AWS CodeStar 등 기타 AWS 제품 활용 AWS 코드파이프라인
  • Individual User Setup procedures를 통해 Cloud9을 사용해 보자.

    • [Step 1] : Cloud9 console (https://console.aws.amazon.com/cloud9) 접속하여, 환경 생성 (환경명 my-demo-environment)
    • [Step 2] : Environment type EC2, Instance type t2.micro, Platform Amazon Linux, Cost-saving setting After 30 minutes (default)

    cloud9review createcloud9

    • [Step 3] : 오른쪽 Remote Function 창에서 이전 my-sam-project를 import해 보자.

    cloud9console

    • [Step 4] : 오른쪽 위 Share를 통해 다른 사용자와 IDE를 공유하여 사용할 수 있다.

    shareconsole


Atlassian JIRA(통합) 설정

addurl

  • [Step 3] : Jira에서 Application Link 생성, Jira 애플리케이션 링크 메뉴에서 생성된 AWS CodeStar 프로젝트 URL을 연결, 애플리케이션명 AWS CodeStar-my-sam-project 입력
    • Jira가 경고를 표시하면 계속을 선택합니다. 이는 인증이 설정되지 않았기 때문에 표시되는 일회성 경고로 계속 진행한다.

addurl

  • [Step 4] : Jira에서 들어오는 인증 구성에서 사용자 키, 이름 및 퍼블릭 키 정보를 복사하여 Jira의 해당 필드에 입력

createlink oauth

  • [Step 5] : AWS CodeStar 프로젝트를 Jira에 연결, [연결]을 선택 후, 메시지가 나타나면 [허용]을 선택하면 연결 완료되고 CodeStar Dashboard에서 연결됨을 확인할 수 있다.

connectjira


AWS X-Ray 설정

  • AWS X-Ray는 애플리케이션이 처리하는 요청에 대한 데이터를 수집하는 서비스로, 해당 데이터를 보고, 필터링하고, 통찰을 얻어 문제와 최적화 기회를 식별할 수 있는 도구를 제공

  • 애플리케이션에 대한 모든 트레이스된 요청에서, 요청 및 응답뿐 아니라 애플리케이션이 다운스트림 AWS 리소스, 마이크로서비스, 데이터베이스 및 HTTP 웹 API에 대해 하는 호출에 대해서도 상세한 정보를 확인할 수 있다.

  • X-Ray SDK는 다음을 제공한다.

    • 인터셉터 : 수신 HTTP 요청을 트레이스하는 코드에 추가된다.
    • 클라이언트 핸들러 : 애플리케이션이 다른 AWS 서비스를 호출하는 데 사용하는 AWS SDK 클라이언트를 구현한다.
    • HTTP 클라이언트 : 다른 내부 및 외부 HTTP 웹 서비스에 대한 호출을 구성하는 데 사용된다.

xrayarchitecture


■ Elastic Beanstalk Sources

  • 애플리케이션을 실행하는 인프라에 대한 염려 없이 AWS 클라우드에서 애플리케이션을 신속하게 배포 및 관리할 수 있다.
  • 애플리케이션을 업로드하기만 하면 Elastic Beanstalk에서 용량 프로비저닝, 로드 밸런싱, 조정, 애플리케이션 상태 모니터링에 대한 세부 정보를 자동으로 처리해 준다.
  • 애플리케이션을 배포할 때, Elastic Beanstalk가 선택된 지원 가능 플랫폼 버전을 구축하고 Amazon EC2 인스턴스 등의 AWS 리소스를 하나 이상 프로비저닝하여 애플리케이션을 실행한다.
  • 애플리케이션을 생성 및 배포한 후에는 애플리케이션 정보(측정치), 이벤트 및 환경 상태 등을 Elastic Beanstalk 콘솔, API 또는 통합된 AWS CLI 등 명령줄 인터페이스에서 확인할 수 있다.

elasticbeanstalk

☞ 애플리케이션 및 환경 생성

  • [Step 1] : 애플리케이션 생성을 위해 Elastic Beanstalk 콘솔 (https://console.aws.amazon.com/elasticbeanstalk/home#/gettingStarted?applicationName=getting-started-app) 에서 Node.js 플랫폼을 선택 후 (본 실습에서는 Node.js를 선택) [애플리케이션 생성]을 선택하면, 하기 리소스가 GettingStartedApp-env 환경으로 생성된다.
    • Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스(가상 머신)
    • Amazon EC2 보안 그룹
    • Amazon Simple Storage Service(Amazon S3) 버킷
    • Amazon CloudWatch 경보
    • AWS CloudFormation 스택
    • 도메인 이름

gettingstartedapp

  • [Step 2] : 새 버전의 애플리케이션 배포, 실행 버전 항목을 업로드 및 배포를 통해 다운로드한 샘플 application을 업로드 한다. (본 실습에서는 nodejs-v1.zip 사용)

upload uploadresult

  • [Step 3] : 환경 구성 (환경 용량 변경), 구성>용량>편집에서 Auto Scaling 그룹 섹션에서 환경 유형을 로드 밸런싱 수행, 인스턴스 행에서 최대 4, 최소 2로 변경 후 적용, 이 업데이트가 현재 인스턴스를 모두 대체한다는 경고가 표시되면 [Confirm] 선택

status

  • [Step 4] : AWS Elastic Beanstalk 명령줄 인터페이스(EB CLI) 설치 (on Windows) Sources
    • 일상적인 개발 및 테스트 사이클에서 Elastic Beanstalk 콘솔 대신 EB CLI를 사용한다.
C:\Windows\System32> python --version
Python 3.7.3

C:\Windows\System32> pip --version
pip 9.0.1 from c:\users\myname\appdata\local\programs\python\python37\lib\site-packages (python 3.7)

C:\Windows\System32> pip install awsebcli --upgrade --user

C:\Windows\System32> eb --version
EB CLI 3.18.1 (Python 3.7.3)
  • [Step 5] : EB CLI로 신규 환경 구성 하기
C:\Windows\System32> eb init
Select a default region
14) us-east-2 : US East (Ohio)
(default is 3): 14

Select an application to use
1) getting-started-app
2) [ Create new Application ]
(default is 2): 2

Enter Application Name
(default is "eb-dev"):
Application eb-dev has been created.
Select a platform.
1) .NET on Windows Server
2) Docker
3) GlassFish
4) Go
5) Java
6) Node.js
7) PHP
8) Packer
9) Python
10) Ruby
11) Tomcat
(make a selection): 6

Select a platform branch.
1) Node.js 12 running on 64bit Amazon Linux 2
2) Node.js 10 running on 64bit Amazon Linux 2
3) Node.js running on 64bit Amazon Linux
(default is 1): 1

Cannot setup CodeCommit because there is no Source Control setup, continuing with initialization
Do you want to set up SSH for your instances?
(Y/n): Y

Select a keypair.
1) my_instance
2) [ Create new KeyPair ]
(default is 1): 1
  • [Step 6] : EB CLI를 사용하여 Elastic Beanstalk 환경 관리
    • Eb create/status/health/events/logs/open/deploy/config/terminate

■ CloudTrail Sources

  • AWS CloudTrail은 계정의 거버넌스, 규정 준수, 운영 및 위험 감사를 활성화하도록 도와주는 서비스로 지원되는 AWS 서비스의 모든 관리 이벤트에 대한 지난 90일간의 계정 활동을 무료로 보고 필터링하고 다운로드할 수 있다.
  • 사용자, 역할 또는 AWS 서비스가 수행하는 작업들은 CloudTrail에 이벤트로 기록된다.
  • CloudTrail은 Amazon S3 버킷에 로그 파일을 저장한다.

[Step 1] : 이벤트 기록에서 AWS 계정 활동 검토

  • CloudTrail 콘솔 (https://console.aws.amazon.com/cloudtrail/home) 에 접속하여, 이벤트 기록을 확인
  • 결과를 CSV 또는 JSON 형식으로 다운로드 가능하지만, 콘솔의 이벤트 보기는 로그인한 AWS 리전으로 제한된다.

[Step 2] : 첫 번째 추적 생성

  • 모든 AWS 리전에 대한 정보를 캡처하는 AWS 계정의 지속적인 활동 레코드를 생성하려면 추적을 생성해야 한다.
  • 추적 생성을 선택하여 추적 이름 My-Management-Events-Trail, 데이터 이벤트에서 아무것도 변경하지 않고, S3 버킷명 mincloud-bucket-for-cloudtrail-logs (글로벌에서 고유한 값이어야 한다.)
  • 태그에서 하나 이상의 사용자 정의 태그(키-값 페어)를 추적에 추가한다.

createtrail

[Step 3] : 로그 파일 보기와 경보 설정 및 분석

  • 생성된 S3 버킷을 선택하면, 사용 중인 모든 리전이 표기된다.

  • 리전별 날짜별로 정리된 이벤트 기록을 확인 가능하다.

  • 추적을 생성하면 CloudTrail에서 일정 수준의 보안이 자동으로 적용(Amazon S3 관리형 암호화 키(SSE-S3)를 사용하는 서버 측 암호화)되지만 데이터의 보안을 유지하기 위해 추가 조치 ( AWS KMS 관리형 키(SSE-KMS)로 서버 측 암호)가 가능하다.

  • 특정 이벤트가 발생할 때 알리도록 CloudWatch Logs 경보를 설정 모니터링할 수 있으며, 정교한 분석을 위해 Amazon Athena를 사용할 수 있다.

logattribute


■ Athena Sources

  • Amazon Simple Storage Service(Amazon S3)에서 표준 SQL을 사용하여 데이터를 쉽게 바로 분석할 수 있는 대화형 쿼리 서비스이다.
  • JDBC 또는 ODBC 드라이버를 통해 연결된 비즈니스 인텔리전스 도구 또는 SQL 클라이언트로 데이터를 탐색할 수도 있다.

[Step 1] : 관리형 정책 연결

  • IAM 계정에 Athena의 두 가지 관리형 정책으로 AmazonAthenaFullAccess, AWSQuicksightAthenaAccess을 연결한다.

[Step 2] : 데이터베이스 생성

  • 상단의 set up a query result location in Amazon S3을 클릭하여 쿼리 결과 저장 위치를 설정한다. (s3://mincloud-query-results/folder/)
  • CREATE DATABASE 문을 입력하여, 데이터베이스를 생성한다.

createdb

[Step 3] : 테이블 생성

  • s3://athena-examples-aws-region/cloudfront/plaintext/ 위치의 Athena 샘플 데이터를 활용한다.
  • s3://athena-examples-myregion/path/to/data/의 myregion을 Athena를 실행하는 리전 식별자로 바꿔준다.
CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_logs (
  `Date` DATE,
  Time STRING,
  Location STRING,
  Bytes INT,
  RequestIP STRING,
  Method STRING,
  Host STRING,
  Uri STRING,
  Status INT,
  Referrer STRING,
  os STRING,
  Browser STRING,
  BrowserVersion STRING
  ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
  WITH SERDEPROPERTIES (
  "input.regex" = "^(?!#)([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+[^\(]+[\(]([^\;]+).*\%20([^\/]+)[\/](.*)$"
  ) LOCATION 's3://athena-examples-us-east-2/cloudfront/plaintext/';

createtable

[Step 4] : 데이터 쿼리

SELECT os, COUNT(*) count
FROM cloudfront_logs
WHERE date BETWEEN date '2014-07-05' AND date '2014-08-05'
GROUP BY os;

dataquery

AWS Glue Sources

  • AWS Glue는 완전 관리형 ETL(추출, 변환 및 로드) 서비스로 데이터를 분류, 정리, 보강하고 다양한 데이터 스토어 간에 안정적으로 이동할 수 있다.
  • AWS Glue는 데이터 세트에서 데이터베이스 및 테이블 스키마를 자동으로 크롤링하여 관련 메타데이터를 AWS Glue 데이터 카탈로그에 저장한다.
  • AWS Athena에서는 기본적으로 AWS Glue 데이터 카탈로그에 등록된 데이터 세트 및 데이터 원본의 쿼리를 지원한다.
  • Data Catalog를 사용하여 Athena에서 데이터 조작 언어(DML) 쿼리를 소스로 실행하면, Data Catalog 스키마를 사용하여 기본 데이터 세트에서 통찰력을 추출한다.
  • 데이터 정의 언어(DDL) 쿼리를 실행할 때 정의하는 스키마는 AWS Glue 데이터 카탈로그에 정의된다.
  • Athena 내의 데이터 원본에서 AWS Glue 크롤러를 실행하여 AWS Glue 데이터 카탈로그에서 스키마를 생성할 수도 있다.

glue_architecture


■ QuickSight Sources

  • Amazon QuickSight는 데이터를 사용하여 시각적 객체를 구축하고, 애드혹 분석을 수행하고, 사업과 관련된 통찰을 빠르게 얻을 수 있는 신속한 비즈니스 분석 서비스
  • 강력한 인 메모리 엔진(SPICE)을 사용하여 AWS 데이터 원본을 완벽하게 검색하고, 조직이 수십만 명의 사용자까지 규모를 조정할 수 있도록 하며, 속도와 응답성이 뛰어난 쿼리 성능을 제공한다.

[Step 1] : 샘플 데이터를 사용하여 단일 시각적 객체가 포함된 분석 만들기

quicksightaccount

  • 샘플 데이터 다운로드 (web-and-social-analytics.csv) 후, 새 분석 > 새 데이터 세트 > 파일 업로드 > 시각화

fileupload

  • 필드 목록 창에서 Date, Mailing list adds 선택하면, Auto Graph 창에 자동으로 생성된다.

visualizer

[Step 2] : 준비된 데이터 세트 만들기

  • 우측 상단 [데이터 관리] > [새 데이터 세트] > 기존 데이터 원본에서 웹 및 소셜 미디어 분석 Amazon S3 데이터 원본 > 데이터 세트 편집
  • [Fields] 창에서 [Twitter followers cumulative] 및 [Mailing list cumulative] 필드를 선택 해제
  • [Events] 필드에 텍스트 문자열을 0-length 문자열 값으로 대체하는 계산된 필드를 추가 (계산된 필드명 populated_event)
  • 함수 목록에서 ifelse 선택 후, 동식에 추가 함수 및 파라미터 입력 후 생성 (ifelse(strlen({Events})=0,'Unknown',{Events}))
  • 데이터 세트명을 Marketing으로 저장

addfield

[Step 3] : 분석 만들기

  • 분석 페이지의 Fields list 창에서 DateReturn visitors를 선택
  • 좌측 상단의 [시각적 객체 추가], [시각적 객체 유형] 산점도 선택
  • 필드 목록의 X축에 [Desktop Uniques], Y축에 [Mobile Uniques], 그룹/색상에 [Date] 선택

makeanalysys

[Step 4] : 대시보드 만들기

  • 우측 상단 [공유] > [대시보드 게시], 대시보드명 Marketing Dashboard 으로 대시보드 생성
  • 대시보드 공유를 통해 타 사용자와 공유가 가능하다.