ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 배포 내 오류 페이지에서 "사용자 정의 오류 응답 생성"을 해줘야 한다

     

    =================================================================

    출처

    https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/GeneratingCustomErrorResponses.html

     

    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
Designed by Tistory.