[AWS] Github Action을 통한 AWS CodeDeploy,S3,EC2 연동 (1)

곽진호·2022년 2월 23일
3

AWS[Codedeploy]

목록 보기
1/2

서비스를하고있는 미니PC들이 많아짐에 따라 하나하나씩 업데이트를 진행하기엔 많은 인력과 시간이 낭비된다. 매번 몇시간씩 코드 버전업데이트를 하고있는 나와 우리팀을보며, 자동배포의 필요성을 매우 많이 느낀다.

이글의 최종목적은 서버로부터 최말단에 있는 스마트 PC로 코드가 자동으로 업데이트되며, 이력을 남기고 재실행시키는것이 나의 목표이다. 만약 폐쇄망에있는 PC의 경우에는 아웃바운드 규칙을 열어 서버로 API를요청하고 최신코드를 받아내어 배포를 수행하는 스크립트 작성까지가 목표이다.

github에 action을 사용해서 s3에 코드를 업데이트하고 ec2의 codedeploy agent가 s3에 이력이 생기면 최신코드를 가져와서 특정 스크립트를 실행시키게 하는것이다.

이러한 서비스를 구상하게 된 계기는 서비스하는 곳에 외부에서의 접근을 혀용시켜주지않았다.
해당폐쇄망에서 EC2에 있는 서버로는 ip와 port를 열어 줄 수 있다고해서 프로세스를 기획하게 되었다.

먼저 해야할 것은 IAM을 생성하는것이다.

사용사례에서 CodeDeploy를 선택한후 다음을 누른다.

위와같이 권한을 확인한후 넘어간다. 나의경우에는 권한경계설정은 하지않았다.


역할 이름과, 설명을 자기가 원하는데로 작성하고 신뢰할 수 있는 엔티티 및 다른 권한추가 없이 역할 생성을 누른다.
위의 태그는 태그로 이 IAM역할을 찾으려면 설정해도 무방하다.

위처럼 리스트에 내가 만든 code-Deploy 역할이 나오면 성공이다.

다음은 애플리케이션 codeDeploy 생성이다. 우측 상단에 생성을 눌러주자.


여기서도 이름을 자기가 원하는대로 작성한후 플랫폼을 EC2/온프레미스를 선택하고 생성한다.

위와같이나오면 이제 배포그룹을 생성한다. 배포그룹은 내가 배포서비스를 설정할지 정해준다.


여기서도 배포그룹 이름을 입력하고 서비스역할에는 내가 만든 IAM 권한이 있을것이다. 해당 서비스를 선택한다.
배포 유형은 현재위치/블루그린 두가지가 있다 간단하게 설명하자면
블루/그린은신버전의 서버로 한번에 업데이트시킨다. 그러므로 트래픽, 서버의 오류 등에 대해서 일순가에 커버가 불가능하다는 단점이있다.

현재위치는 해당하는 서버를 잠시동안 멈추고 업데이트한후에 실행하는 배포 방식이다. 해당 유형을 선택할경우 로드밸런서를 사용하여 여러개의 서버를 업데이트할때 유용하다.
예를들어 두개의 서버(A,B)가 로드밸런서에 연결되어있다고 가정하자. A가 업데이트될때에는 로드밸런서에서 자동으로 트래픽을 막아놓고 업데이트한후에 트래픽을 허용한다. 정상적으로 트래픽허용이 끝나고 성공적으로 배포가 이루어졌으면, B의 트래픽을 막고 배포 후에 트래픽을 허용한다. 무중단 배포가 가능하다.

하지만 나는 이번에는 로드밸런서를 사용하지 않을거기때문에 어떤것을 사용해도 상관없다.

연결하고자 하는 EC2의 이름으로 선택한다.


배포 설정에는 어떤것을 사용해도 상관없지만 자신이 해당하는 상황에 맞춰서 해야한다. 서비스를 중단할수없을경우 로드밸런서를 사용하여 OneAtATime을 사용하여 순차적으로 각각의 EC2에 배포하는것이 좋을것같다. 서비스하고있는 서버의 갯수가 많다면 HalfAtATime도 나쁘지않을것같다. 내가 일전에 만들어놓은 서비스는 두개의 EC2를 NLB,ALB 로드밸런서로 연결하였기때문에, OneAtATime을 선택하였다.

다 만들었으면 배포그룹 생성을 클릭하자

여기까지 했으면 일단 쉰다.

profile
진짜 호랭이

7개의 댓글

comment-user-thumbnail
2022년 2월 24일

hello world

3개의 답글
comment-user-thumbnail
2022년 2월 24일

퍼가요~♡

1개의 답글