-
CI/CD 프로젝트 오류오류 2023. 1. 26. 13:49
https://safetymanagementgroup.com/dont-let-safety-fall-apart-on-demolition-sites-2/ 서버 로컬 실행 오류
- 오류 발견
- 전날에는 실행되던 서버가 갑자기 오류가 생기며 실행되지 않았다.
- 원인 파악
- 오류를 확인하는데 이유를 찾을 수 없어 오류 메세지를 검색했다.
- 에러 메세지 " mongoserverselectionerror:getaddrinfo ENOTFOUND undefined " 를 위주로 구글링을 했다
- getaddrinfo ENOTFOUND 클라이언트가 주어진 주소에 연결할 수 없음을 의미한다는 것을 알았다
- 왜 연결할 수 없는지에 대해 고민하고 오류메세지를 다시 확인 해보니 mongodb://undefined:undefined@undefined:27071/?이란 메세지를 확인하고 환경변수가 설정되지 않은걸 알 수 있었다.
- 어제 환경 변수 설정 시 export를 이용해 변수를 설정했고 이는 일시적인 설정이었다.
- 환경변수를 영구적으로 사용하는 방법
- export 명령어를 .bashrc 에 추가를 하면 된다
$ vi ~/.bashrc $ export MYPATH=/usr/home $ source ~/.bashrc $ echo $MYPATH # 파일을 열어 맨 아랫줄에 추가한다 # 환경변수를 선언한다 # 적용을 하고, 로그아웃 한 뒤에 로그인 한다 # 입력하면 내가 입력한 환경변수가 잘 출력되는 것을 볼 수 있다
- dotenv 파일 사용
- .env 파일
- env 파일은 " 환경 변수 파일 " 을 의미한다.
- 이 파일은, 애플리케이션이 실행될 때 넘기고 싶은 특정 값을 담고 있는 변수가 기록되어 있다.
- 미리 정의된 값을 애플리케이션에서 활용하고 싶을 때 이 .env 파일을 활용한다.
- .env 파일 사용법
- .env 파일은 프로젝트의 최상위 루트에 파일을 만든다
- .env.{mode명}
- .env.--- 파일의 내용을 수정하면 npm 으로 다시 시작해야한다
React 에서 .env 사용하기
process.env.REACT_APP_ 는 예약어로, 다른 이름은 사용하면 React가 인식하지 않는다.
.js const abc = { key : process.env.REACT_APP_지정한 변수 } .env REACT_APP_지정한 변수 = 값
- .env 활용 모듈 - dotenv
- nodeJS 의 모듈로, npm 을 사용해 설치하고 사용 할 수 있다
- dotenv 를 사용해 현재 디렉토리에 위치한 .env 파일로부터 환경 변수를 읽어 낼 수 있다
- npm install dotenv
Github Action ECS 배포 오류
- 오류 발견
- 배포는 정삭적으로 됐다고는 나오지만 실행 시간이 무려 26분이었다 또한 배포 된 상태에 ECS도 새로운 이미지가 아닌 기존에 이미지가 배포된 상태였다
- 원인 파악
- 문제가 될 수 있는 부분을 먼저 추려보았다
- - 깃허브 액션
- - 클러스터 서비스 설정
- - task definition
- 먼저 배포가 정상적으로 됐기 때문에 깃허브 액션에서는 문제가 없다 판단했다
- 그 후 클러스터 서비스화 task definition를 재설정하지만 똑같이 배포 시간과 오류가 발생하고 있었다.
- 처음부터 트래픽 흐름을 순차적으로 생각하며 문제를 찾았고, ECS에서 ECR로 새로운 이미지를 찾을 수 없어 생긴 문제로 worlkfolw파일이 잘못되었다고 생각했습니다.
- 문제가 될 수 있는 부분을 먼저 추려보았다
- 문제 해결
- Workflow파일에 ECR_Registry가 정답이지만 제 파일에는 Registry만 적혀져 있었습니다. Workflow 내용을 공부하면서 직접 작성했던것이 에러를 만들었던 원인이었고 ECR_Registry로 수정 후 3분 이내로 새로운 이미지가 배포되었습니다.
Cloudfront 연결 에러
- 문제 발생
- S3 버킷을 만들고 자동화를 마치고 클라우드 프론트를 연결했지만 Access denied 오류가 발생했다
- 원인 파악
- 버킷생성시 정책, 웹 호스팅에서는 문제가 없었다
- 클라우드 프론트 오류 페이지를 검색하는 중 답을 찾았다
- 나의 서비스의 경우 S3 버킷의 정적 웹 호스팅을 활성화했지만 CloudFront에 설정한 HTTPS를 통해서만 접근할 수 있다
- 문제 해결
- S3 웹호스팅 기능을 사용하게 되면 이는 웹서버를 가동한다는 것이다. 웹서버의 특징 중 하나는 브라우저의 주소창에 입력한 주소가 html 확장자로 끝나지 않는다면 자동으로 해당 경로 하위의 index.html 파일을 반환한다는 것이다.
- 즉, CloudFront의 배포 도메인 이름만을 주소창에 입력하여도 자동으로 index.html 파일을 실행할 수 있다는 것이다.
- 반면, 우리 서비스와 같이 S3 REST API 엔드포인트를 CloudFront Origin으로 설정한 경우에는 CloudFront가 Origin(S3)로 객체를 요청하는게 웹서버로 요청하는게 아니라 객체 저장소에 객체를 요청하는 것이다. 그래서 Host 뒷 부분의 경로와 매칭되는 실제 객체가 없으면 에러를 반환합니다.
- 즉, CloudFront의 배포 도메인 이름만을 주소창에 입력하면 그에 해당하는 파일이 없기 때문에 403 또는 404 에러가 발생합니다.
- 따라서 이를 해결하기 위해 CloudFront 배포 내 오류 페이지에서 "사용자 정의 오류 응답 생성"을 해줘야 한다
=================================================================
출처
Generating custom error responses - Amazon CloudFront
In some cases, CloudFront doesn’t return a custom error page for the HTTP 503 status code even if you configure CloudFront to do so. If the CloudFront error code is Capacity Exceeded or Limit Exceeded, CloudFront returns a 503 status code to the viewer w
docs.aws.amazon.com
'오류' 카테고리의 다른 글
Lambda 이미지 리사이징 중 Access Denied (0) 2023.02.10 SAM deploy 중 업로드할 수 없음 (0) 2023.02.04 SAM build 중 Python3 버전 오류 (0) 2023.02.04 - 오류 발견