0. 사전
기술 스택 : Github Action, AWS EC2, AWS Code Deploy, AWS S3, Docker
1. appspec.yml
permission을 작성할 때
-object 부분에 경로를 정확하게 작성해야 한다
-owner, group의 경우 EC2 내부의 사용자, 그룹을 의미하고 별도로 생성하지 않는 한 ubuntu EC2의 경우 ubuntu가 기본값이다
+ 설정하는 방법
sudo adduser 사용할사용자이름
* (ubuntu) 사용자 이름에 대문자를 사용하고 싶은 경우:
sudo adduser --force-badname 사용할사용자이름
*After Install 설정을 통해 deploy.sh를 지정하여 code deploy가 해당 쉘 스크립트를 시작하도록 지정한다
2. workflow
1. 도커 허브에 접속
private docker repository에 접근하기 위해서는 로그인 정보가 필요하다
2. 올리고자 하는 이미지 빌드 및 푸시
이미지로 올리려는 서비스의 경로를 지정한다. 또한 푸시하는 경로를 정확하게 지정해 pull에서 오류가 없게 한다
3. AWS 접속
일반 로그인 방식과 OIDC 방식이 있으며, 보안상으로 OIDC(쉽게 이해한 바로는 일회용 키 발급) 방식이 더 안전하다.
IAM ROLE에서 ARN을 사용해 키 발급 역할을 만들고, AWS IAM 사용자에게 해당 역할을 부여하면 OIDC 방식의 AWS 접속이 가능하다
4. .env 파일(Spring에서 application.properties 또는 application.yml와 동일 개념) 생성 :
환경변수와 설정이 담긴 파일을 workflow에서 생성하는 방식도 가능하다.
이렇게 하면 별도로 해당 파일을 관리할 필요가 없어 유지보수에 효율적이다. 다만 실제 값이 파일에 남은 채로 EC2에도 업로드 되기 떄문에 다음과 같은 보안이 필수다
1) 값을 git hub secret에 저장
2) .env 파일을 암호화 : 추천 방식 - GPG
+ 런타임에 주입하는 방식도 가능하며, 대표적으로 AWS Secret Manager가 있다
5. 도커 접근용 파일 생성 .deploy_secrets
도커에서 이미지를 내려받기 위해 해당 파일에 로그인 정보를 담는다. 이 파일에 대한 암호화도 권장되며, 또한 위와 같이 런타임 주입도 가능하다
6. 배포 아티팩트 생성
위의 작업을 통해 만들어진 파일 및 appspec.yml, 배포 스크립트, docker.yml을 모아 아티팩트로 생성한다. S3에 아티팩트를 업로드에 관리하게 하며 유지보수 효율을 증가시킬수 있다
7. Code deploy에 작업 요청
3. AWS
배포를 위해 작업할 내용
1) IAM
- 사용자를 생성하고 해당 사용자에 필요한 역할을 부여해야 한다
- 정책을 부여해 AWS 내부 서비스 접근 권한을 설정해야 한다
- ID 제공업체 설정을 통해 ARN 값을 설정해야 한다
2) S3
- Github secret에 설정한 버킷 이름과 동일한 버킷을 생성해두어야 한다
3) EC2
3-1) 탄력적 IP 부여를 통해 DNS 세팅을 준비한다
3-2) 키 페어 관리를 통해 SSH 접속 보안을 강화한다
3-3) IAM의 Code deploy 역할을 부여해 code deploy 작업이 가능하게 설정한다
3-4) 보안 그룹을 설정하고 인바운드 규칙을 통해 방화벽 허용 포트를 설정한다
3-5) docker와 AWS Code Deploy agent가 설치한다
4. Code deploy
- 배포 전략 설정
- 배포 그룹 생성 : ARN 역할 부여 필요
- 어플리케이션 생성 후 해당 어플리케이션을 배포 그룹에 종속시킨다
'인프라' 카테고리의 다른 글
| CI/ CD + Github Actions & AWS EC2 (0) | 2023.01.31 |
|---|