지난 포스팅에서 프로젝트에 사용할 VPC를 생성했습니다. 이번 포스팅에서는 EC2를 생성하고 code deploy를 통해 github 과 연동한 배포를 진행해보겠습니다.

Code Deploy를 위한 EC2 Role 만들기

code deploy를 사용하기 위해서는 배포할 EC2가 사용할 Role이 필요합니다.

  1. 서비스에서 IAM을 클릭하여 들어갑니다.
  2. 역할탭에서 역할 만들기를 클릭합니다.
  3. 이 역할을 수행할 서비스로 AWS의 EC2를 선택합니다.
  4. 아래 네개의 권한을 연결합니다.
    • AmazonS3FullAccess
    • AWSCodeDeployFullAccess
    • AWSCodeDeployRole
    • CloudWatchLogsFullAccess
  5. 태그로 Name:(원하는 이름)을 설정합니다.
  6. 알맞은 이름을 적은 후 역할을 생성합니다.

EC2 만들기

이전에 만든 VPC와 subnet, 그리고 Role을 가지는 EC2를 생성합니다.

  1. 서비스에 EC2 클릭하여 인스턴스 시작을 클릭합니다.
  2. 원하는 AMI 및 인스턴스 유형을 선택합니다.
  3. 인스턴스 세부 정보 구성에서 아래의 내용을 설정합니다.
  • 네트워크를 이전 포스트에서 생성한 vpc로 설정
  • 서브넷을 이전 포스트에서 생성한 public subnet으로 설정
  • 퍼블릭 아이피 자동 할당 활성화
  • IAM 역할을 위에서 만든 역할로 설정
  1. 스토리지는 30GB까지 프리티어입니다. 필요한만큼의 스토리지를 설정합니다.
  2. Name tag로 원하는 이름을 설정합니다.
  3. 보안그룹에 기본 설정되어있는 SSH외에 HTTP를 추가합니다.
  4. 키페어 설정 완료후 인스턴스를 시작합니다.

EC2 설정하기

EC2에 웹서버를 설치해서 인터넷이 연결되었는지 확인해보겠습니다.

  1. 터미널에서 아래 명령어를 입력하여 ssh 접속합니다.
    ssh -i keypair.pem ec2-user@[public-ip]
  2. 아래 커맨드를 입력해서 웹서버인 nginx를 설치합니다.
    sudo yum install nginx
  3. 그다음 아래 커맨드로 nginx 를 실행시킵니다.
    sudo service nginx start
  4. 브라우저에서 public ip 로 접속했을때 nginx 화면이 뜬다면 인터넷 연결이 완료된 EC2가 생성된 것입니다.

AWS CLI를 위한 사용자 추가

code deploy가 AWS CLI를 사용할 수 있도록 사용자를 하나 만들어야합니다.

  1. 서비스 대시보드에서 IAM을 클릭하여 하위메뉴로 그룹에 들어갑니다.
  2. 새로운 그룹 생성을 클릭합니다.
  3. 적당한 그룹 이름을 입력합니다. 다음 단계에서는 아무 정책도 연결하지 않고 그룹을 생성합니다.
  4. 생성된 그룹을 선택해보면 권한에 인라인 정책이라는 탭이 있습니다. 해당 탭을 열고 새로 생성하기를 클릭합니다.
  5. 사용자 지정 정책을 클릭하여 아래 내용을 입력합니다.
    {
     "Version": "2012-10-17",
     "Statement": [
         {
             "Effect": "Allow",
             "Action": [
                 "autoscaling:*",
                 "codedeploy:*",
                 "ec2:*",
                 "lambda:*",
                 "elasticloadbalancing:*",
                 "s3:*",
                 "cloudwatch:*",
                 "logs:*",
                 "sns:*"
             ],
             "Resource": "*"
         }
     ]
    }
  6. 정책 생성이 완료되면 사용자를 추가합니다. 왼쪽 대쉬보드에서 사용자를 클릭하고 사용자 추가를 선택합니다.
  7. 이름을 설정한 후 프로그래밍 방식 엑세스를 선택합니다.
  8. 그룹에 사용자 추가탭을 선택하고 위에서 만든 그룹을 선택합니다.
  9. 사용자 생성이 성공하면 꼭 CSV 파일을 다운로드합니다.

EC2에 code deploy agent 설치하기

code deploy event를 ec2가 사용하기 위해서는 code deploy agent를 ec2 에 설치해야 합니다.

  1. EC2에 접속해서 먼저 aws-cli 를 설치합니다.
    sudo yum install -y aws-cli
  2. home으로 이동해서 cli 설정을 진행합니다.
    cd /home/ec2-user
    sudo aws configure
  • Access Key, Secret Access Key : csv 파일에 있는 내용을 입력합니다.
  • region name : 서울이라면 ap-northeast-2를 입력합니다.
  • output format : json
  1. agent 파일을 다운로드 받습니다.
    wget https://aws-codedeploy-ap-northeast-2.s3.amazonaws.com/latest/install
  2. 실행권한을 추가한 뒤 설치를 진행합니다.
    chmod +x ./install
    sudo ./install auto
  3. 아래 명령어를 통해 Agent가 실행중인지 확인합니다.
    sudo service codedeploy-agent status
  4. 재부팅시 자동으로 code deploy agent가 실행될 수 있도록 아래 스크립트를 생성합니다.
    sudo vim /etc/init.d/codedeploy-startup.sh
    #!/bin/bash 
    echo 'Starting codedeploy-agent' 
    sudo service codedeploy-agent restart
    sudo chmod +x /etc/init.d/codedeploy-startup.sh

Code deploy용 Role 생성하기

이제 code deploy가 EC2에 접근할 수 있도록 Role을 만들어보겠습니다.

  1. IAM에서 역할 만들기를 클릭합니다.
  2. AWS 탭의 code deploy를 선택합니다.
  3. AWSCodeDeployRole 정책이 연결된 상태로 생성을 완료합니다.

code deploy 만들기

  1. 서비스에 codedeploy를 클릭합니다.
  2. 배포탭의 애플리케이션을 선택한 후 애플리케이션 생성을 클릭합니다.
  3. 적당한 이름과 컴퓨팅 플랫폼은 EC2/온프레미스를 선택합니다.
  4. 생성이 완료되면 애플리케이션의 그룹생성탭을 선택합니다.
  5. 배포 그룹 이름을 입력합니다.
  6. 서비스 역할은 위에서 생성한 code-deploy 용 역할을 선택합니다.
  7. 배포 유형은 현재 위치를 선택합니다.
  8. 환경 구성은 EC2를 선택하고 사용할 EC2의 tag를 입력합니다.
  9. 배포 그룹을 생성합니다.
  10. 배포할 프로젝트를 깃헙에 준비합니다. 이때 반드시 appspec.yml파일이 루트디렉토리에 있어야합니다. 루트디렉토리에 있는 모든 소스를 /home/ec2-user/build 디렉토리로 배포하겠다는 뜻입니다
    codedeploy1
  11. 배포 그룹에서 배포 생성을 클릭합니다.
  12. 애플리케이션을 GitHub에 저장을 클릭합니다.
  13. github 아이디를 입력하고 oauth 를 진행한 후에 배포할 레포지토리 이름과 커밋 아이디를 입력합니다.
  14. 간단한 배포 설명을 적은 후에 배포 만들기를 클릭합니다.
  15. 배포가 완료되면 EC2에 접속해서 잘 옮겨졌는지 확인합니다.