[AWS] 2. AWS CI/CD 구축하기
[2]. AWS CI/CD 구축하기
- Codebuild, CodeDeploy, CodePipeLine을 통하여 CI/CD 구축하기
- CI/CD를 구축해보면서 CodeBuild를 경험해봅시다.
실습 내용
Github 레퍼지토리에 push한 이력을 자동으로 체크하여 새로 push될 때마다 호출됩니다.
웹훅(webhook)을 통해 CodeBuild를 실행하여 빌드하고, 빌드가 완료된 파일(아티팩트)를 S3에 자동으로 업로드합니다.
이후 그 업로드 된 아티팩트를 CodeDeploy에 배포하고 서비스 를 실행시킵니다.
- 깃허브에 푸쉬 → Codebuild가 감지 후 build실행
- build된 파일(아티팩트)를 S3에 업로드
- 업로드된 빌드파일을 CodeDeploy를 통해 EC2에 배포
- 이 모든 과정을 CodePipeLine으로 연결
실습
[1]. 프로젝트 생성 및 github에 올리기
- IAM의 경우 사용자 별로 (EC2, RDS, S3 등..) 권한을 줄 수 있을 뿐만 아니라
서비스별 각각의 인스턴스들도 권한을 가질 수 있으며 IAM 설정이 가능합니다.
□ EC2 IAM Role 생성
□ CodeDeploy 그룹 생성
□ EC2 IAM Role 생성
1. EC2 IAM Role 생성하기
- AWS IAM 대시보드 → 역할 탭 → 역할 만들기
- AWS 서비스 선택 → 일반 사용 사례 EC2 선택 → [다음:권한] 버튼 클릭
2. Role 체크하기
- AmazonEC2RoleforAWSCodeDeploy 검색 후 체크
- AmazonS3FullAccess 검색 후 체크
- AWSCodeDeployFullAccess 검색 후 체크
- AWSCodeDeployRole 검색 후 체크
- CloudWatchLogsFullAccess 검색 후 체크
→ [다음:태그] 버튼 클릭
- [다음:검토] 버튼 클릭
역할 이름 'aws-tutorial-ec2-iam'으로 입력 → [역할 만들기] 버튼 클릭
최종적으로 1개의 역할이 정상적으로 생성이되었는지 확인합니다.
□ CodeDeploy 그룹 생성
- □ IAM의 사용자를 생성합니다.
- □ CodeDeploy 그룹에 사용자 추가하기 → 자신의 계정을 추가합니다.
사용자 그룹을 만듭니다.
AWS IAM 대시보드 → 사용자그룹 탭 → 그룹 생성
그룹의 정책을 JSON 형식으로 추가합니다. (참고)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"autoscaling:*",
"codedeploy:*",
"ec2:*",
"lambda:*",
"elasticloadbalancing:*",
"s3:*",
"cloudwatch:*",
"logs:*",
"sns:*"
],
"Resource": "*"
}
]
}
[2]. EC2 인스턴스에 IAM Role 설정하기
- □ EC2 인스턴스에 IAM Role 부여하기
- □ CodeDeploy-agent 설치하기
□ EC2 인스턴스에 IAM Role 부여하기
AWS EC2 대시보드 → 인스턴스 오른쪽 마우스 → 보안 → IAM 역할 수정 버튼 클릭
생성한 'aws-tutorial-ec2-iam' 선택 후 [저장] 버튼
정상적으로 해당 인스턴스 IAM역할이 할당되었는지 확인합니다.
□ EC2 내부에 접속하여 CodeDeploy-agent 설치하기
- □ EC2에 접속 ( mingu.pem, 퍼블릭 IPv4 주소 필요 )
-> [1]. EC2 서비스 배포 참고 - □ EC2 IAM Role 생성
□ EC2에 접속
ssh -i mingu.pem ec2-user@13.231.74.5 -p 22
터미널을 이용하여 다음 명령어를 이용하여 설치합니다.
⇒ 아마존 리눅스 환경 세팅 참고
sudo yum update
sudo yum install ruby
sudo yum install wget
#!/bin/bash CODEDEPLOY_BIN="/opt/codedeploy-agent/bin/codedeploy-agent" $CODEDEPLOY_BIN stop
yum erase codedeploy-agent -y
# 참고 : 도쿄리젼 : ap-northeast-1
sudo aws configure
Access Key : [본인IAM계정] csv파일의 AccessKey등록
Secret Access Key : [본인IAM계정] csv파일의 SecretAccessKey
region name : ap-northeast-1
output format : json
wget https://aws-codedeploy-ap-northeast-1.s3.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto
# 에이전트가 제대로 설치되었는지 확인
sudo service codedeploy-agent status
완료 후 다음과 같이 'The AWS CodeDeploy agent is running ~ '이라는 문구가 나옵니다.
[3]. AWS CodeDeploy Agent 자동실행하기
- □ .[sh파일 생성] 쉘 스크립트 작성
-> vi 명령어로 수정하겠습니다. ( wq:저장 q:나가기 i: 수정 )
□ .[sh파일 생성] 쉘 스크립트 작성
sudo vi /etc/init.d/codedeploy-startup.sh
// i 버튼누르고 복사 붙여넣기
#!/bin/bash
echo 'Starting codedeploy-agent'
sudo service codedeploy-agent restart
// esc-> :wq 저장
// vi 편집기에서 나온 뒤
// 실행권한 추가
sudo chmod +x /etc/init.d/codedeploy-startup.sh
[4]. CodeBuild 설정하기
- □ 프로젝트에 buildspec.yml 작성하기 (루트경로에 작성)
□. buildspec.yml 파일 추가하기
- □ 프로젝트 루트경로에 yml파일을 추가합니다.
프로젝트 루트경로에 yml파일을 추가합니다.
version: 0.2
phases:
install:
runtime-versions:
nodejs: 12
commands:
- npm install
- pwd
run-as: root
artifacts:
files:
- "**/*"
cache:
paths:
- "node_modules/**/*"
[5]. EC2 CodeDeploy 설정하기
- □ 프로젝트에 appspec.yml 파일추가하기 (루트경로에 작성)
- git pull을 받으셨다면 이미 있습니다.
- 직접 프로젝트를 만들었다면 추가 후 ec2 내부로 접속하여 git pull를 하여 소스를 업데이트하세요. - □ AWS CodeDeploy 대시보드 → CodeDeploy 생성하기
□. 프로젝트 루트경로에 yml파일을 추가합니다.
- □ 프로젝트 루트경로에 yml파일을 추가합니다.
- □ EC2 내부에 접속하여 build 폴더를 생성합니다.
EC2 내부에 접속하여 build 폴더를 생성합니다.
version: 0.0
os: linux
files:
- source: /
destination: /home/ec2-user/build/
# CodeDeploy가 배포하게 될 위치가 build폴더입니다.
EC2 내부에 접속하여 build 폴더생성
mkdir /home/ubuntu/build
□. CodeDeploy 생성하기
- □ EC2 인스턴스 태그 생성하기
- □ AWS CodeDeploy 대시보드 → CodeDeploy 생성
EC2 인스턴스 태그 생성하기
- CodeDeploy 생성 후 EC2와 연결을 할 때 태그를 참고합니다.
AWS CodeDeploy 대시보드 → CodeDeploy 생성하기