지난 포스팅에서 프로젝트에 사용할 VPC를 생성했습니다. 이번 포스팅에서는 EC2를 생성하고 code deploy를 통해 github 과 연동한 배포를 진행해보겠습니다.
Code Deploy를 위한 EC2 Role 만들기
code deploy를 사용하기 위해서는 배포할 EC2가 사용할 Role이 필요합니다.
- 서비스에서 IAM을 클릭하여 들어갑니다.
- 역할탭에서 역할 만들기를 클릭합니다.
- 이 역할을 수행할 서비스로 AWS의 EC2를 선택합니다.
- 아래 네개의 권한을 연결합니다.
- AmazonS3FullAccess
- AWSCodeDeployFullAccess
- AWSCodeDeployRole
- CloudWatchLogsFullAccess
- 태그로 Name:(원하는 이름)을 설정합니다.
- 알맞은 이름을 적은 후 역할을 생성합니다.
EC2 만들기
이전에 만든 VPC와 subnet, 그리고 Role을 가지는 EC2를 생성합니다.
- 서비스에 EC2 클릭하여 인스턴스 시작을 클릭합니다.
- 원하는 AMI 및 인스턴스 유형을 선택합니다.
- 인스턴스 세부 정보 구성에서 아래의 내용을 설정합니다.
- 네트워크를 이전 포스트에서 생성한 vpc로 설정
- 서브넷을 이전 포스트에서 생성한 public subnet으로 설정
- 퍼블릭 아이피 자동 할당 활성화
- IAM 역할을 위에서 만든 역할로 설정
- 스토리지는 30GB까지 프리티어입니다. 필요한만큼의 스토리지를 설정합니다.
- Name tag로 원하는 이름을 설정합니다.
- 보안그룹에 기본 설정되어있는 SSH외에 HTTP를 추가합니다.
- 키페어 설정 완료후 인스턴스를 시작합니다.
EC2 설정하기
EC2에 웹서버를 설치해서 인터넷이 연결되었는지 확인해보겠습니다.
- 터미널에서 아래 명령어를 입력하여 ssh 접속합니다.
ssh -i keypair.pem ec2-user@[public-ip]
- 아래 커맨드를 입력해서 웹서버인 nginx를 설치합니다.
sudo yum install nginx
- 그다음 아래 커맨드로 nginx 를 실행시킵니다.
sudo service nginx start
- 브라우저에서 public ip 로 접속했을때 nginx 화면이 뜬다면 인터넷 연결이 완료된 EC2가 생성된 것입니다.
AWS CLI를 위한 사용자 추가
code deploy가 AWS CLI를 사용할 수 있도록 사용자를 하나 만들어야합니다.
- 서비스 대시보드에서 IAM을 클릭하여 하위메뉴로 그룹에 들어갑니다.
- 새로운 그룹 생성을 클릭합니다.
- 적당한 그룹 이름을 입력합니다. 다음 단계에서는 아무 정책도 연결하지 않고 그룹을 생성합니다.
- 생성된 그룹을 선택해보면 권한에 인라인 정책이라는 탭이 있습니다. 해당 탭을 열고 새로 생성하기를 클릭합니다.
- 사용자 지정 정책을 클릭하여 아래 내용을 입력합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"autoscaling:*",
"codedeploy:*",
"ec2:*",
"lambda:*",
"elasticloadbalancing:*",
"s3:*",
"cloudwatch:*",
"logs:*",
"sns:*"
],
"Resource": "*"
}
]
}
- 정책 생성이 완료되면 사용자를 추가합니다. 왼쪽 대쉬보드에서 사용자를 클릭하고 사용자 추가를 선택합니다.
- 이름을 설정한 후 프로그래밍 방식 엑세스를 선택합니다.
- 그룹에 사용자 추가탭을 선택하고 위에서 만든 그룹을 선택합니다.
- 사용자 생성이 성공하면 꼭 CSV 파일을 다운로드합니다.
EC2에 code deploy agent 설치하기
code deploy event를 ec2가 사용하기 위해서는 code deploy agent를 ec2 에 설치해야 합니다.
- EC2에 접속해서 먼저 aws-cli 를 설치합니다.
sudo yum install -y aws-cli
- home으로 이동해서 cli 설정을 진행합니다.
cd /home/ec2-user
sudo aws configure
- Access Key, Secret Access Key : csv 파일에 있는 내용을 입력합니다.
- region name : 서울이라면 ap-northeast-2를 입력합니다.
- output format : json
- agent 파일을 다운로드 받습니다.
wget https://aws-codedeploy-ap-northeast-2.s3.amazonaws.com/latest/install
- 실행권한을 추가한 뒤 설치를 진행합니다.
chmod +x ./install
sudo ./install auto
- 아래 명령어를 통해 Agent가 실행중인지 확인합니다.
sudo service codedeploy-agent status
- 재부팅시 자동으로 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을 만들어보겠습니다.
- IAM에서 역할 만들기를 클릭합니다.
- AWS 탭의 code deploy를 선택합니다.
- AWSCodeDeployRole 정책이 연결된 상태로 생성을 완료합니다.
code deploy 만들기
- 서비스에 codedeploy를 클릭합니다.
- 배포탭의 애플리케이션을 선택한 후 애플리케이션 생성을 클릭합니다.
- 적당한 이름과 컴퓨팅 플랫폼은 EC2/온프레미스를 선택합니다.
- 생성이 완료되면 애플리케이션의 그룹생성탭을 선택합니다.
- 배포 그룹 이름을 입력합니다.
- 서비스 역할은 위에서 생성한 code-deploy 용 역할을 선택합니다.
- 배포 유형은 현재 위치를 선택합니다.
- 환경 구성은 EC2를 선택하고 사용할 EC2의 tag를 입력합니다.
- 배포 그룹을 생성합니다.
- 배포할 프로젝트를 깃헙에 준비합니다. 이때 반드시 appspec.yml파일이 루트디렉토리에 있어야합니다. 루트디렉토리에 있는 모든 소스를 /home/ec2-user/build 디렉토리로 배포하겠다는 뜻입니다
- 배포 그룹에서 배포 생성을 클릭합니다.
- 애플리케이션을 GitHub에 저장을 클릭합니다.
- github 아이디를 입력하고 oauth 를 진행한 후에 배포할 레포지토리 이름과 커밋 아이디를 입력합니다.
- 간단한 배포 설명을 적은 후에 배포 만들기를 클릭합니다.
- 배포가 완료되면 EC2에 접속해서 잘 옮겨졌는지 확인합니다.
- 아래 블로그를 참고하고 인용하였습니다. 감사합니다.
정말 읽기 쉽고 정확한 가이드 포스팅이었습니다. 큰 도움 받았습니다 감사합니다!