Cloud9을 활용하여 소스코드를 작성하고, CodeCommit을 활용하여 소스 코드의 버전을 관리하고 CodeDeploy를 통해 EC2에 소스를 배포하는 프로세스, CodePipeline를 이용해 프로세스를 자동화하는 방법에 대해 알아보자
서비스 역할 및 IAM 인스턴스 프로파일 생성
1. [서비스]-[보안자격증명 및 규정준수]-[IAM]을 클릭합니다. [사용자] 메뉴를 선택하고 [사용자 추가]버튼을 클릭합니다.
2. [사용자 추가] 화면에서 '사용자 이름'에 'DevOpsUser'입력 후 '엑세스 유형'에 '프로그래밍 방식 엑세스'를 선택하고 [다음] 버튼을 클릭합니다.
3. [사용자 추가] 페이지에서 [기존 정책에 직접 연결] 버튼을 클릭합니다. '정책' 필터에 'AWScode'를 입력후 'AWSCodeCommitFullAccess'와 'AWSCodePipelineFullAccess'를 체크하고 [다음] 버튼 클릭, [태그]페이지에서 [다음]을 클릭합니다.
4. [사용자만들기] 버튼을 클릭합니다.
5. [사용자추가] 페이지에서 AWS CLI연결에 사용할 엑세스 키 ID와 비밀 엑세스 키를 PC에 저장하기 위해 [CSV다운로드] 버튼을 클릭하여 자격 증명을 PC로 다운로드 합니다.
6. 사용자 계정 생성 후 [사용자] 메뉴에 생성된 계정을 클릭하여 설정화면으로 이동합니다.
7. 자격증명 설정을 변경하기 위해 [보안자격증명] 메뉴를 클릭합니다.
8. 'AWS CodeCommit에 대한 HTTPS Git 자격 증명' 항목에서 [자격 증명 생성] 버튼을 클릭합니다.
9. HTTPS Git 자격 증명 등록을 위해 [자격 증명 다운로드] 버튼을 눌러 사용자 이름과 비밀번호를 다운로드 합니다.
10. CodeDeploy 서비스를 위한 역할과, IAM 인스턴스 프로파일 생성을 위한 정책은 '배포 자동화-AWS CodeDeploy'실습 진행시 생성된 역할 과 정책을 그대로 사용하겠습니다.
(CodeDeploy-ServiceRole, CodeDeployEC2-Permissions)
Cloud9과 CodeCommit 설정 및 소스 등록
1. [서비스]-[개발자도구]-[Cloud9]을 클릭합니다. [Cloud9]-[Your environment]메뉴를 클릭하여 이전 실습에서 사용했던 Cloud9 개발자 환경을 선택하고 'OpenIDE'를 클릭합니다. 이전에 작성된 Cloud9 콘솔이 없다면 [Create environments] 버튼을 클릭하여 신규로 생성합니다.
2. 이전 IAM에서 생성한 계정에 AWS CLI에 대한 설정을 진행하기 위해 AWS Configure 명령어를 실행하고, 이전 IAM에서 'DevOpsUser'계정 생성 시 발급받은 AWS Access Key ID, Secret Access Key, Region 정보를 다음과 같이 입력합니다.
ec2-user:~/environment $ sudo aws configure
AWS Access Key ID [None]: AKIAXX-------ANEH
AWS Secret Access Key [None]: 7KdvCab4d------------fvJkCoS8
Default region name [None]: us-east-1
Default output format [None]:
3. 터미널에서 Git을 사용하여 git config를 실행합니다. 이때 AWS 자격 증명 프로필로 Git 자격 증명 헬퍼가 경로를 리포지토리로 전송할 수 있도록 합니다.
ec2-user:~/environment $ sudo git config --global credential.helper '!aws codecommit credential-helper $@'
ec2-user:~/environment $ sudo git config --global credential.UseHttpPath true
4. CodeCommit 리포지토리 생성하기 위해 CodeCommit 콘솔로 이동 후 [리포지토리 생성] 버튼을 클릭합니다.
5. [리포지토리생성] 페이지에서 '리포지토리 이름'에 'devops-sample'입력 후 [생성] 버튼을 클릭합니다.
6. 리포지토리가 생성된 후 [URL 복제] 버튼을 클릭하고 [HTTPS 복제] 버튼을 클릭합니다.
7. 다시 Cloud9 콘솔로 이동하여 다음과 같이 명령어를 입력하여 CodeCommit 리포지토리를 복제합니다.
$git clone https://git-codecommit.us-east-1.amazonaws.com/v1/repos/devops-sample
8. 메뉴에서 'devops-sample' 폴더에 마우스 오른쪽 버튼 클릭 후 'New File'을 클릭하여 파일명을 'index.html'로 생성하고 다음의 HTML 소스를 Cloud9 작성 창에 입력 후 저장합니다.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Sample Deployment</title>
<style>
body {
color: #ffffff;
background-color: #0188cc;
font-family: Arial, sans-serif;
font-size: 14px;
}
h1 {
font-size: 500%;
font-weight: normal;
margin-bottom: 0;
}
h2 {
font-size: 200%;
font-weight: normal;
margin-bottom: 0;
}
</style>
</head>
<body>
<div align="center">
<h1>Congratulations</h1>
<h2>This application was deployed using AWS CodeDeploy.</h2>
<p>For next steps, read the <a href="http://aws.amazon.com/documentation/codedeploy">AWS CodeDeploy Documentation</a>.</p>
</div>
</body>
</html>
9. devops-sample 폴더에 appspec.yml 파일을 생성하고 appspec 정보를 등록하여 저장합니다.
version: 0.0
os: linux
files:
- source: /index.html
destination: /var/www/html/
hooks:
BeforeInstall:
- location: scripts/install_dependencies
timeout: 300
runas: root
- location: scripts/start_server
timeout: 300
runas: root
ApplicationStop:
- location: scripts/stop_server
timeout: 300
runas: root
10. 'devops-sample'폴더 하위에 'scripts'폴더를 생성합니다. 다음의 내용을 참조하여 'start_server', 'stop_server', 'install_dependencies' 파일을 생성하고 저장합니다.
파일명: ./scripts/install_dependency
#!/bin/bash
yum install -y httpd
파일명: ./scripts/start_server
#!/bin/bash
service httpd start
파일명: ./scripts/stop_server
#!/bin/bash
isExistApp = `pgrep httpd`
if [[ -n $isExistApp ]]; then
service httpd stop
fi
11. 작성된 소스 파일을 CodeCommit에 등록하기 위해 'git add'와 'git status'를 통해 등록상태를 확인합니다.
ec2-user:~/environment $ cd /home/ec2-user/environment/
ec2-user:~/environment $ cd devops-sample
ec2-user:~/environment/devops-sample (master) $ git add .
ec2-user:~/environment/devops-sample (master) $ git status
12. 'git commit', 'git push'명령을 통해 소스를 CodeCommit으로 전송합니다.
ec2-user:~/environment/devops-sample (master) $ git commit -m "devops sample source commit"
ec2-user:~/environment/devops-sample (master) $ git push
13. CodeCommit 콘솔로 이동하여, 리포지토리에서 'devops-sample'을 클릭하여 Cloud9에서 작성된 코드가 정상적으로 CodeCommit으로 전송됨을 확인합니다.
EC2생성과 CodeDeploy 배포 그룹 생성
1. EC2 인스턴스로 이동 후 [인스턴스] 메뉴를 선택하고 [인스턴스 시작] 버튼을 클릭합니다.
2. [AMI 선택] 페이지에서 'Amazon Linux AMI'의 선택 버튼을 클릭합니다.
3. [인스턴스 유형 선택]페이지에서 't2.micro' 타입 선택 후 [다음] 버튼을 클릭합니다.
4. [인스턴스 세부정보 구성]페이지에서 '네트워크', '서브넷'을 Default로 설정하고, IAM 약할을 이전 IAM에서 생성한 인스턴스 프로파일 역할인 'CodeDeployEC2-permissions'를 선택하여 하단으로 이동합니다.
5. '고급 세부 정보'에서 CodeDeploy Agent 자동 설치를 위해 '사용자 데이터' 항목에 다음의 내용을 등록하고 [다음] 버튼을 클릭합니다. 선택한 리전이 다른 경우 본인의 서비스 리전을 확인하여 다운로드 주소를 수정하기 바랍니다.
#!/bin/bash
yum -y update
yum install -y ruby //루비로 어플리케이션을 올릴거라서 인스톨을 초기화 과정에서 돌립니다.
cd /home/ec2-user
curl -O https://aws-codedeploy-ap-northeast-2.s3.amazonaws.com/latest/install -k //CodeDeploy 플러그인을 설치하는 과정입니다.
chmod +x ./install
sudo ./install auto
6. [스토리지 추가] 페이지에서 [다음] 버튼을 클릭합니다.
7. [태그 추가] 페이지에서 '키'에 'Name', '값'에 'CodeDeploy' 입력 후 [다음] 버튼을 클릭합니다.
※ 쿠버네티스에서 테인트 같은 역할의 환경변수 이다.
8. [보안 그룹 구성] 페이지에서 [규칙 추가] 버튼을 클릭하고 '포트 범위'에 '80', '원본'에 '위치무관'을 선택하여 [검토 및 시작] 버튼을 클릭합니다.
9. [기존 키 페어 선택] 페이지에서 '기존 키 페어 선택' 후 이전에 생선한 키 페어를 선택하고 체크하여 [인스턴스 시작] 버튼을 클릭합니다.
10. AWS Console에 접속 후 메뉴에서 [서비스]-[개발자도구]-[CodeDeploy]를 클릭합니다. [애플리케이션] 메뉴를 선택하고 [애플리케이션 생성] 버튼을 클릭합니다.
11. [애플리케이션 생성] 페이지에서 '애플리케이션 이름'에 'devops-codedeploy-sample' 입력하고 '컴퓨팅 플랫폼'은 'EC2/온프레미스'를 선택 후 [애플리케이션 생성] 버튼을 클릭합니다.
12. '배포그룹' 탭에서 [배포 그룹 생성] 버튼을 클릭합니다.
13. [배포 그룹 생성] 페이지에서 '배포 그룹 이름'에 'devops-codedeploy-sampledg'입력하고, '서비스 역할'은 이전에 생성한 IAM 서비스 역할명인 'CodeDeploy-ServiceRole'선택, '배포 유형'을 '현재 위치(In-Place)'로 선택하고 하단 페이지로 이동합니다.
14. '환경 구성' 항목에서 배포 대상으로 'Amazon EC2 인스턴스'를 선택하고 '태그 그룹 1'항목의 '키'에 'Name', '값'에 'CodeDeploy' 입력 후 [배포그룹생성] 버튼을 클릭합니다.
※ 앞서 정의한 EC2인스턴스의 태그가 해당 환경변수에 해당되어 대상이 된다.
CodePipeline과 CodeDeploy 배포를 활용한 배포 파이프라인 구현
1. [개발자 도구] - [CodePipeline]을 클릭하여 'CodePipeline'으로 이동합니다. [파이프라인] 메뉴를 선택하고 [파이프라인생성] 버튼을 클릭합니다.
2. [파이프라인 설정 선택] 페이지에서 '파이프라인 이름'에 'devops-codepipeline-sample' 입력 후 '서비스 역할'은 '새서비스 역할'을 선택하고 하단의 [다음] 버튼을 클릭합니다.
3. [소스 스테이지 추가] 페이지에서 '소스 공급자'에 'AWS CodeCommit', '리포지토리 이름'에 'devops-sample', '브랜치 이름'에 'Master' 선택 후 [다음] 버튼을 클릭합니다.
4. [빌드 스테이지 추가] 페이지에서 [빌드 스테이지 건너뛰기] 버튼을 클릭하고 팝업창에서 [건너뛰기]를 클릭합니다.
5. [배포 스테이지 추가] 페이지에서 '배포 공급자'에 'AWS CodeDeploy', '애플리케이션 이름'에 'devops-codedeploy-sample', '배포 그룹'에 'devops-codedeploy-sample-dg'선택후 [다음]을 클릭합니다.
6. 등록된 파이프라인의 전체 내용을 검토 후 [파이프라인 생성] 버튼을 클릭합니다.
7. 파이프라인이 정상적으로 등록되고 단계별로 작업 수행을 완료한 후 다음과 같이 완료 메시지가 출력됩니다.
8. EC2 인스턴스로 이동 후 이전에 생성한 인스턴스의 'IPv4 퍼블릭 IP'를 확인하여 IP를 복사합니다.
9. 웹브라우저를 통해 EC2인스턴스의 IP로 호출하면 웹 페이지가 출력되을 확인할 수 있습니다.
10. 변경된 소스의 자동 반영 확인을 위해 Cloud9으로 이동후 index.html파일에 수정을 합니다.
11. 그리고 CodeCommit으로 Push 진행 후 Codepipeline으로 이동하면 코드가 자동으로 배포 진행됨을 확인할 수 있습니다.
※ 아래와 같이 Push로 변경사항이 발생하면 자동으로 Pipeline이 수행됩니다.
'IaaS > 퍼블릭클라우드' 카테고리의 다른 글
(AWS) ELB를 적용해 로드벨런싱 하는방법 (0) | 2021.06.17 |
---|---|
AWS Professional DevOps 시험준비 (0) | 2021.06.14 |
(AWS) CodePipeline 이란? (0) | 2021.06.12 |
(AWS) CI/CD를 위한 AutoScaling, Cloud9과 CodeDeploy로 구현 (0) | 2021.06.12 |
(AWS) AWS CodeDeploy 란? (0) | 2021.06.08 |