tutorial/AWS클라우드

[AWS] 2. AWS CI/CD 구축하기

민구글 2021. 5. 28. 16:02

[2]. AWS CI/CD 구축하기

  • Codebuild, CodeDeploy, CodePipeLine을 통하여 CI/CD 구축하기
  • CI/CD를 구축해보면서 CodeBuild를 경험해봅시다.

 

실습 내용

Github 레퍼지토리에 push한 이력을 자동으로 체크하여 새로 push될 때마다 호출됩니다.

웹훅(webhook)을 통해 CodeBuild를 실행하여 빌드하고, 빌드가 완료된 파일(아티팩트)를 S3에 자동으로 업로드합니다.

이후 그 업로드 된 아티팩트를 CodeDeploy에 배포하고 서비스 를 실행시킵니다.

 

  1. 깃허브에 푸쉬 → Codebuild가 감지 후 build실행
  2. build된 파일(아티팩트)를 S3에 업로드
  3. 업로드된 빌드파일을 CodeDeploy를 통해 EC2에 배포
  4. 이 모든 과정을 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에 접속

 

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 생성하기