인프라

사용목적 현재 이메일 분류 관련 프로젝트를 진행하고 있습니다. 이메일을 분류하는 AI 모델이 있는데, 문제는 분류에 1개의 메일 당 2초 이상 걸리게 되었습니다. 사용자가 요청했을 때 실시간으로 분류하기에 메일 당 2초도 너무 긴 시간이고,  실시간으로 서비스를 제공하지 않더라도, batch 작업에서 병목이 생기기엔 충분했습니다. 처음에는 그냥 lambda에 cron 작업을 걸어서 돌릴 생각이었지만, 유저가 1명 가입할 때마다 평균 3000개 이상의 이메일 분류가 필요한데, lambda에 최대 실행 시간이 15분으로 정해져있고, 여러 경로에서 이메일 분류를 요청하는 상황에서, 분류부터 DB 저장까지 안정적인 처리가 필요했습니다.  규칙적으로 분류가 안된 email_id를 찾아서 SQS에 넘겨주면, Con..
0. 개발환경Python 3.12Docker Desktop 4.30 1. 문제의 발생 프로젝트 중 파이썬으로 개발된 AI 기능을 배포해야할 일이 생겼습니다. 항상 유지해야하는 서비스가 아닌 특정 시점에 Batch로 돌아가면되는 기능이라 EC2서버보다 lambda를 이용한 배포를 선택했습니다.(지금 생각해보니 spot instance로 특정시점에 자동으로 생성했다가 사용하고 지우는 사이클을 짜는게 비용이 더 저렴했을 수도..?) Python으로 학습된 모델 파일의 사이즈는 650MB로 람다에서 허용하고 있는 패키지 파일의 크기를 훌적 넘었습니다.  구글링을 해본 결과 2가지 해결방법이 있었습니다.1. 큰 파일은 S3에 올리고, 런타임에 S3에서 다운로드 해서 사용.2. Docker 컨테이너로 감싸서 ECR..
0. 개발환경 Terraform : 1.7.3 Python : 3.12.x 1. 문제의 발생 Lambda로 크롤링 함수를 만들어서 서비스에 이용하고 있는데, 특정 parameter에 대해서 5XX에러를 띄우는 현상이 발생했습니다. 호출되는 과정은 NestJS Backend -> API Gateway -> Lambda(python) 순서로 호출됩니다. Postman에서 API Gateway를 호출하였을 때, 502 Bad Gateway와 함께 다음과 같은 에러 메시지를 return 했습니다. { "message": "Internal server error" } 2. 문제의 원인 및 해결 처음에는 단순한 크롤링 과정의 문제인줄 알았습니다. 하지만 로컬에서 lambda에서 사용하는 python 함수를 돌려본 ..
AWS Elastic Beanstalk(이하 EB)에는 서비스를 관리하기 위한 역할(Role)을 최초 애플리케이션 생성시 만들게 된다.Web Console로 EB를 생성하면 아래와 같은 화면을 볼 수 있다. 이때 '새 서비스 역할 생성 및 사용'을 선택하게 되면 자동으로 EB에 액세스하고 관리하는데 필요한 역할이 부여된 IAM을 생성하게 된다.  그렇다면 테라폼을 사용해서 EB를 생성할 때 iam을 어떻게 설정해줄 수 있을까. 문제 상황IAM설정을 해주지 않고 terraform apply를 하면, 권한이 없어 EB가 생성되다말고 롤백을 하게 되는 모습을 볼 수 있다. 아래 사진과 같이 상태가 'Unknown'으로 바뀌고 health check를 못하는 상태가 된다. 이벤트 부분을 보면 health che..
[Terraform] github codespaces에서 Terraform 사용하기 1편 | Linux에 terraform 설치 (tistory.com) [Terraform] github codespaces에서 Terraform 사용하기 1편 | Linux에 terraform 설치 왜 Linux에서 돌리게 되었는가? AWS 요소 관리를 위해서 테라폼을 사용하려는데, 싸지방 컴에 직접 깔자니 껏다키면 리셋되는 문제가 있었다. 그래서 외부 서버를 사서 접속해서 code를 run 할까하다 pypystory.tistory.com 1편에서 볼 수 있었듯 github codespace 위에서 terraform을 실행할 수 있게 되었다. 근데 여기서 한가지 문제가 있다. 발생한 문제 바로 github codespac..
왜 Linux에서 돌리게 되었는가? AWS 요소 관리를 위해서 테라폼을 사용하려는데, 싸지방 컴에 직접 깔자니 껏다키면 리셋되는 문제가 있었다. 그래서 외부 서버를 사서 접속해서 code를 run 할까하다가 가격적인 문제도 있고 하니. .tfstate 파일은 S3로 클라우드 위에서 관리하고, 실질적인 code run은 쓸 때만 github codespaces에 접속해서 돌리는 방식으로 해보려고 한다. 현재 OS 확인 github codespace는 리눅스 서버 위에서 돌아가고 있는 것을 확인할 수 있었다. MS azure 위에서 돌고 있는 듯하다. Linux에 terraform 설치 방법 * OS별 다운로드 방법은 아래의 공식 사이트 링크에서 잘 알려주고 있다. Install | Terraform | H..
아니 왜 배포 실패함... 그동안 잘 되던 배포가 특정 시점부터 되다가 안되다가를 반복하는 일이 발생했다. 가장 큰 문제는 어쩌다 될 때도 있다는 것이다. elastic beanstalk 에러 메시지 상으론 npm 설치를 못했다고 eb-engine.log를 참고하라고 나온다. Instance deployment: 'npm' failed to install dependencies that you defined in 'package.json'. For details, see 'eb-engine.log'. The deployment failed. 일단 로그 확인에 앞서서 npm 버전이나 새롭게 추가된 패키지 dependency등을 확인해봤다. 이전에 배포한 버전과 큰 차이는 없었다. Error: Command..
예전에 AWS S3에 자동 배포를 위해서 걸어둔 github action을 업데이트를 위해 오랜만에 실행할 일이 생겼다. 그런데 push 이후 배포 되었다고 왔어야할 알림이 10분 째 오지 않는 것이다. 다른 test를 거치는 것도 아니고, 그냥 react를 build해서 s3에 배포하는 과정인데, 평소였으면 1분 안쪽으로 끝났어야 할 일이다. 깃헙에 들어가보니 10분이 넘도록 돌아가고는 있다. 근데 ubuntu 작업 환경 세팅을 못하고 있었다. 찾아보니 ubuntu-18 버전을 github에서 지원하지 않기로 하였다고 한다. - https://github.blog/changelog/2022-08-09-github-actions-the-ubuntu-18-04-actions-runner-image-is-b..
정적인 웹 사이트, 기본적인 html+css+js 외에도 react 등의 프레임워크를 이용해서 개발할 수 있다. 많이 받는 질문 중 하나가 '프론트엔드로 웹 서비스를 만들었는데, 어떻게 배포하냐?'라는 부분이다. 그리고 과거의 나를 포함해서 많은 뉴비들이 실수하는 부분이 EC2와 같은 리눅스 서버를 구매해서 개발할 때 처럼 'npm start' 등으로 백그라운드에 실행해두는 방식이다. 그러면 속도도 느려지고, 서버 메모리도 많이 잡아먹고, 서버비용도 꼬박꼬박 내야하는 아주 안좋은 방식이다. (심지어 경험상 Docker로 react를 한번 감싸서 EC2에 배포한다? 그러면 t*.micro 프리티어에선 돌아가지도 않는다.) 그래서 S3에 업로드하는 방식으로 정적 웹 사이트를 호스팅할 수 있는데 간단히 생각하..
크롤링을 위해 crontab을 써야할 일이 생겼는데, 재배포의 효율성을 높이고 서버의 설정을 코드로 관리하기 위해 관련된 내용을 공부해봤다. crontab이란? 소프트웨어 유틸리티 cron은 유닉스 계열 컴퓨터 운영 체제의 시간 기반 잡 스케줄러이다. 소프트웨어 환경을 설정하고 관리하는 사람들은 작업을 고정된 시간, 날짜, 간격에 주기적으로 실행할 수 있도록 스케줄링하기 위해 cron을 사용한다. 출처 위키백과 : https://ko.wikipedia.org/wiki/Cron 이때 crontab은 cron table에 줄임말로 cron의 명세를 해놓은 파일이다. crontab 사용하기 crontab -e# crontab 편집 crontab -l# crontab 내용 보기 crontab -r# cronta..
파이랜스
'인프라' 카테고리의 글 목록 (3 Page)