인프라 구조
EC2 생성, 보안그룹 설정
- RDS - Private EC2간 연결 완료
- 참고로 Public EC2 - Private EC2 - RDS간에는 각각의 보안 그룹의 모든 트래픽을 허용
- Private EC2에 접속하기 위해 필요한 private key를 Public EC2로 옮김
scp -i "[key-name].pem" [key-name].pem ec2-user@[private ec2의 private IP]:.ssh/[key-name].pem
GitAction 설정(.github/workflows/main.yml)
[주안점]
- 테스트, 빌드의 환경 세팅 + application.yml 파일 copy, gradle을 이용한 build 또는 test
- S3, CodeDeploy 설정(S3 버킷 생성, CodeDeploy의 배포 그룹 및 애플케이션 생성)
- appspec.yml과 deploy.sh 작성
- appspec.yml은 CodeDeploy가 읽고 애플리케이션을 배포하는 설정을 담은 파일
- appspec.yml 내부에 hooks.ApplicationStart[*].location의 값으로 deploy.sh의 경로를 작성해주면 애플리케이션 시작시 deploy.sh의 내용이 실행된다.
- deploy.sh는 CodeDeploy에 의해 애플리케이션이 시작되면 실행되어야 할 일련의 과정을 스크립트로 작성한 것
- appspec.yml은 CodeDeploy가 읽고 애플리케이션을 배포하는 설정을 담은 파일
[과정]
1. 해당 Repository에 git action 과 secrets 작성
2. test 실패, build 성공(24.06.13 12:17)
- CodeDeploy에서 애플리케이션 배포중 에러 발생(CodeDeploy agent를 설치해두지 않아서 발생)
- test시 오류
- MySQL 설정시 아래 글 참고
- Flyway 설정시 경로를 `filesystem:` 또는 `classpath:`, `gcs:`, `s3`: 로 시작해야 한다. 이 때 기본값은 `filesystem:sql`인데, 처음에는 이 것이 flyway를 컨테이너로 띄워서 사용하던 때 설정할 때 처럼 띄워진 환경의 filesystem과 띄워질 컨테이너의 sql 디렉토리(경로)를 맵핑한다는 의미인줄로 알고 한참을 헤맸으나, 맵핑될 컨테이너의 경로는 생략하고 현재 파일시스템의 경로만을 작성하니 통과되었다. 즉, `filesystem:`파일시스템의 폴더 구조 형태로 작성하면 되는 것이었다. + 설정 파일이나 마이그레이션 sql 파일이 속한 폴더를 `,` 로 구분하여 쓰면 되는 것이었다.
3. test, build 모두 통과(24.06.14 늦은 밤)
- CodeDeploy에서 배포에 실패함. AWS 콘솔에서는 실패 이벤트 메세지로 아래와 같이 나왔다.
- CodeDeploy agent was not able to receive the lifecycle event. Check the CodeDeploy agent logs on your host and make sure the agent is running and can connect to the CodeDeploy server.
- 상세 로그를 보기 위해 해당 EC2 서버에 접속해 로그를 조회했다. Ubuntu이거나 Amazon Linux라면 아래 경로에 파일이 존재한다.
-
더보기더보기(로그: var/log/aws/codedeploy-agent/codedeploy-agent.log)
2024-06-14T15:29:48 ERROR [codedeploy-agent(181095)]: InstanceAgent::Plugins::CodeDeployPlugin::CodeDeployControl: Error during certificate verification on codedeploy endpoint <https://codedeploy-commands.ap-northeast-2.amazonaws.com>
2024-06-14T15:29:48 ERROR [codedeploy-agent(181095)]: Error validating the SSL configuration: Invalid server certificate
2024-06-14T15:29:48 ERROR [codedeploy-agent(181095)]: booting child: error during start or run: SystemExit - Stopping CodeDeploy agent due to SSL validation error. - /opt/codedeploy-agent/lib/instance_agent/plugins/codedeploy/command_poller.rb:65:in `abort' /opt/codedeploy-agent/lib/instance_agent/plugins/codedeploy/command_poller.rb:65:in `validate' ...(생략) - 간략하게 SSL validation에 실패했다는건데.. AWS Console에서는 agent가 받지 못했다고 했고, 실제 agent 서비스의 로그를 보니 SSL validation이 되지 않았다는것으로 보아 통신에 문제가 있는 것으로 판단되었다.
- 실제로 찾아보니 CodeDeploy를 통해 애플리케이션을 배포하고자한다면 애플리케이션을 배포하는 인스턴스가 private이라면 NAT Gateway를 통해 외부와 통신이 되게 해야 한다고 한다.
- NAT Gateway 생성 필요 → 생성완료(24.06.21)
-
'AWS' 카테고리의 다른 글
AWS) 다운로드 기능 개선 및 Timeout 문제 해결(Nginx, Axios, ELB) (0) | 2025.02.14 |
---|---|
AWS) 사이드 프로젝트(MS) 프론트엔드 인프라 구성 및 배포 (1) | 2025.02.13 |
AWS) DBeaver에서 SSH를 이용해 Private RDS 터널링하기 (0) | 2024.04.15 |
AWS) EC2 User Data를 인스턴스 재시작마다 실행시키기 (0) | 2022.12.31 |