AWS EC2 - CodeDeploy - Github Action 자동화 배포

Corner·2022년 6월 6일
0

Cloud

목록 보기
2/4

AWS EC2 자동화 배포


목차

[AWS EC2 - IAM 역할 생성 및 적용]

[CodeDeploy 역할 및 애플리케이션 생성]

[CodeDeploy Agent 설치]

[프로젝트 설정]

[CodeDeploy 배포 생성]


AWS EC2 자동화 배포를 하기 위한 글입니다.

이전 세팅에 대한 글은 아래 링크를 참고해주세요~ ㅎㅎ

[⚙️🌐Backend/📡 AWS] - AWS EC2 - 인스턴스 생성, 삭제, 원격 접속하기, IP 주소와 DNS 주소, 보안 그룹 설정, 포트 Redirect , Ubuntu MySQL 설치


AWS EC2 - IAM 역할 생성 및 적용

먼저 EC2에서 사용할 IAM 역할을 생성합니다. AWS IAM 서비스로 이동하여 [역할] 메뉴를 클릭합니다.

그리고, 역할 만들기로 들어갑니다.

1단계

2단계

역할만들기의 2단계에서 권한 정책을 검색하여 연결 해줍니다. 아래 항목을 검색해서 체크한 후 다음으로 넘어갑니다.

•AWSCodeDeployFullAccess

•AmazonS3FullAccess

•AWSCodeDeployRole

•CloudWatchLogsFullAccess

3단계

태그에 키 값을 넣습니다.

이렇게 만들어 둔 EC2에서 사용할 IAM 역할 만들기가 완료되었으므로 이 역할을 적용시키기 위해 EC2 서비스 대시보드로 이동합니다.

등록한 IAM 역할로 설정하고 Update 합니다.


CodeDeploy 역할 및 애플리케이션 생성

또 다시 IAM 서비스 대시보드로 이동하여 역할을 생성합니다.

1단계

사용 사례에서 CodeDeploy를 선택하고 체크합니다.

2단계

default로 선택되어 있는 AWSCodeDeployRole을 볼 수 있습니다.

다음으로 넘어갑니다.

3단계

마찬가지로 역할 이름을 정하고, 태그에 키 값도 넣어줍니다.

CodeDeploy 애플리케이션 생성

역할 생성을 완료 하였으니, AWS CodeDeploy 서비스로 이동합니다.

애플리케이션 생성으로 들어갑니다.

다음 단계 : 애플리케이션 생성 구성

다음 단계 : CodeDeploy Agent 사용자 추가 및 설치

EC2와 CodeDeploy 각각 항목에 대해서만 설정 및 생성을 했었습니다. 이번엔 CodeDeploy에서 발생한 이벤트를 EC2가 수신할 수 있도록 CodeDeploy Agent를 설치합니다.

우선 사용자 추가를 위해 IAM 서비스의 그룹 페이지로 이동해서 [새로운 그룹 생성] 버튼을 클릭합니다.

해당 그룹 이름을 적고 정책 연결을 하지 않고 다음으로 넘어갑니다.

사용자 그룹에서 생성한 그룹으로 들어가 권한 탭을 보시면 저는 권한 정책을 이미 넣어놨습니다.

아무것도 없다면 아마 [인라인 정책]으로 "여기"라는 텍스트 문구가 있을거예요. 그것을 누르세요.

JSON 탭으로 들어가서 아래와 같이 코드를 삽입합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "autoscaling:*",
                "codedeploy:*",
                "ec2:*",
                "lambda:*",
                "elasticloadbalancing:*",
                "s3:*",
                "cloudwatch:*",
                "logs:*",
                "sns:*"
            ],
            "Resource": "*"
        }
    ]
}

정책 검토를 누른 뒤 정책 이름을 확인합니다.

다음 단계 : IAM 사용자 추가

왼쪽 메뉴에서 액세스 관리 -> 사용자로 들어가서 사용자 추가를 눌러줍니다.

1단계

2단계

생성한 그룹으로 연결합니다.

3단계

저는 태그 키 값도 사용자 이름과 똑같이 하였습니다.

검토를 누르고

액세스 키 .csv 파일을 다운 받습니다.

이제 CodeDeploy에서 사용할 사용자 생성이 완료 되었습니다.

이제 EC2에 원격 접속하여 CodeDeploy Agent를 설치합니다.


CodeDeploy Agent 설치

aws cli 설치

sudo apt install awscli

aws configure 설정

sudo aws configure


# 설정 스텝
AWS Access Key ID [None]: 다운로드 받은 .csv파일에서 Access key ID 항목 입력

AWS Secret Access Key [None]: 다운로드 받은 .csv파일에서 Secret access key 항목 입력

Default region name [None]: ap-northeast-2

Default output foramt [None]: json

agent 설치파일 다운로드

sudo wget https://aws-codedeploy-ap-northeast-2.s3.amazonaws.com/latest/install

agent 설치파일 권한추가

sudo chmod +x ./install

ruby 설치 (agent 설치에는 ruby가 필요합니다)

sudo apt-get install ruby

agent 설치

sudo ./install auto

agent 설치확인

sudo service codedeploy-agent status

codedeploy-agent 실행중 화면

인스턴스 부팅 시 codedeploy-agent 자동시작

sudo vim /etc/init.d/codedeploy-startup.sh

편집기 내부에 INSERT 합니다.

sudo service codedeploy-agent restart

# 이후 ESC => :wq

스크립트 파일 실행권한 추가

sudo chmod +x /etc/init.d/codedeploy-startup.sh

여기까지 CodeDeploy Agent 사용자 추가 및 설치 작업이 완료입니다.


프로젝트 설정

프로젝트의 root 경로에 아래 내용을 포함한 파일을 하나 생성합니다. 로컬에서 작업 -> github push -> EC2 원격에서 git pull로 반영합니다.

appspec.yml 파일 추가

version: 0.0
os: linux
files:
  - source:  /
    destination: /home/ubuntu/build/

CodeDeploy가 배포하게 될 위치를 build 폴더로 잡아두었기 때문에 EC2 원격 터미널에서 해당 경로에 build 폴더를 생성합니다.

mkdir /home/ubuntu/build

# local
git commit && push


# EC2
git pull

여기까지가 프로젝트 설정 완료입니다.


CodeDeploy 배포 생성

모든 준비가 완료 되었으므로 이제 남은 작업은 EC2와 CodeDeploy 연결해주는 일만 남았습니다.

AWS 서비스의 EC2 대시보드로 이동해 해당 인스턴스를 클릭하면 하단에 세부정보가 나오는데 그 중 태그 탭을 누릅니다.

태그 관리를 눌러서 태그를 추가합니다.

다시 CodeDeploy 서비스 페이지로 이동하여 애플리케이션 메뉴로 이동합니다.

생성해둔 애플리케이션에 들어가 상세화면에서 배포 그룹 생성 버튼을 클릭합니다.

배포 그룹 생성

배포 그룹 이름을 입력하고, 서비스 역할은 저희가 이전에 만들어 두었던 역할로 선택하시면 됩니다.

환경 구성은 Amazon EC2 인스턴스를 체크하고, 위에서 EC2 인스턴스의 태그 값을 입력해놓았기 때문에 입력창을 클릭하면 리스트로 해당 인스턴스의 태그 값이 노출됩니다. 만약 리스트에 보이지 않는다면 다시 한 번 EC2 인스턴스의 태그 값을 확인하시길 바랍니다.

로드 밸런서는 필수가 아니라서 비활성화를 해두셔도 상관 없습니다.

여기까지 하고 배포 그룹을 생성합니다.

그러면 또 배포 생성 버튼이 생기는데 클릭합니다.

배포 설정에서는 <애플리케이션을 GitHub에 저장> 항목을 선택합니다.

선택 후에는 GitHub와 계정을 연결하는데, 미리 연결해둔 깃허브의 계정이 리스트에 노출됩니다.

처음 하는거라면 [GitHub 토큰 이름] 항목 아래에 있는 설명처럼 계정을 입력하면 [GitHub에 연결] 버튼이 활성화 되는데 이를 눌러 OAuth2 인증 절차를 거치면 연동이 됩니다.

레포지토리 이름을 적고 배포하고 싶은 커밋 ID를 적습니다.

배포 만들기까지 하고 나면 배포가 정상적으로 이루어지고 나서 화면에 배포 성공이라는 문구를 확인할 수 있습니다.

원격 접속을 하면 appsepc.yml에서 지정한 경로에 성공적으로 배포가 되었음을 알 수 있습니다.

cd ~/build 
ls -la

build 폴더로 이동해서 프로젝트를 실행합니다.

npm install
npm start

브라우저를 통해 인스턴스의 IP 및 DNS로 접속을 하면 성공적으로 프로젝트가 실행됩니다.

하지만 지금까지 진행으로는 저장소가 업데이트 되었을 때, 자동적으로 CodeDeploy가 EC2에 코드를 업데이트 해주지 않습니다.

이것을 하기 위해 CodePipeline을 이용해서 해결이 가능합니다.

👏👏

감사합니다.

profile
Full-stack Engineer. email - corner3499@kakao.com,

0개의 댓글