목록DevOps & Infra/AWS (34)
오늘도 한 뼘 더
# 배경 EC2의 스토리지가 차서 볼륨을 수정하여 스토리지 용량을 키워야 한다. 이전에 진행했던 방법으로 수정을 하는 중에 다음과 같은 에러가 발생하였다. 2022.01.12 - [DevOps & Infra/AWS] - [AWS] EC2 볼륨 수정 [AWS] EC2 볼륨 수정 # 배경 jenkins에서 프로젝트 빌드/배포를 하다가 모든 배포가 에러가 나면서 진행이 되지 않았다. 확인해본 결과 공간이 부족하다는 에러 메시지를 확인 # 문제 내용 jenkins docker를 올려놓은 EC2 인 baekji919.tistory.com # 에러 $ resize2fs /dev/nvme0n1p1 resize2fs: Bad magic number in super-block while trying to open /de..
# 배경 VPC 설정을 하다가 갑자기 배포된 VPC의 모든 리소스에 대한 접근이 막힌 상황이 발생하였다. 원인과 해결방법을 모두 기록하자. # 원인 VPC에 대한 리소스를 외부에서 네트워크로 접근을 하고자 하면 이에 대한 설정이 필요하다. 인터넷 게이트웨이가 연결되어있지 않으면 VPC안의 리소스들이 배포가 되어도 접근이 되지 않는다. # 해결방법 AWS VPC > 라우팅 테이블 퍼블릭 라우팅 테이블을 선택하여 라우팅 편집을 클릭한다. 어디서든 허용을 한다는 "0.0.0.0/0"에 대하여 인터넷 게이트웨이를 선택하여 넣어준다. (연결하고자 하는 VPC 선택)
# 배경 AWS Lambda함수를 사용할 코드를 작성한 후 업로드하여 실행했을 때 제대로 동작하지 않았다. RDS에 만들어둔 DB에 접근을 해야 하는데 막혀 있어 접근을 할 수가 없었던 것이다. # 현 상황 AWS Lambda 함수와 RDS가 세팅이 되어있다 라는 전제조건을 바탕으로 진행 # AWS Lambda 함수에 RDS 연결하기 AWS Lambda의 구성에서 VPC 편집을 진행한다. 1. 접근하고자 하는 RDS가 있는 VPC를 선택한다. 2. 서브넷 또한 RDS와 같은 서브넷으로 선택한다. 3. 보안그룹을 선택하고 해당 보안 그룹을 RDS 보안 그룹의 인바운드 규칙에 추가한다.
# 배경 Golang 코드를 zip 파일로 올려 Lambda함수를 테스트하는데 다음과 같은 에러가 발생했다. # 문제 { "errorMessage": "fork/exec /var/task/main: exec format error", "errorType": "PathError" } # 해결 방법 Golang 코드를 Lambda함수에서 돌리기 위해 zip 파일을 생성할 때 두 조건이 맞아야 한다. 1. GOARCH=amd64 2. GOOS=linux 두 가지 조건의 환경에서 main.zip을 만들어야 제대로 동작이 된다. $ set GOARCH=amd64 $ set GOOS=linux $ go build -o main main.go $ %USERPROFILE%\Go\bin\build-lambda-zip.e..
# 배경 이전에 카카오톡 알림톡을 보내주는 외주 업체에서 서버 에러가 나서 회사에서 보내야 할 카카오톡 알림톡이 보내지지 않는 문제가 발생했다. 문제는 알리톡 발송에 실패하면서 같이 엮여 있었던 서비스가 같이 실패하게 되었다. 너무 강한 결합으로 인해 발생한 문제였다. 이를 해결하기 위해 Kafka와 같은 서비스 중 AWS에서 제공하는 Simple Notification Service(SNS)를 사용해보기로 했다. # AWS SNS란? AWS SNS는 게시자에서 구독자로 메시지를 전송하는 관리현 서비스이다. https://docs.aws.amazon.com/ko_kr/sns/latest/dg/welcome.html Amazon SNS란 무엇인가요? - Amazon Simple Notification Se..
# 배경 AWS Lambda에서 코드 편집기가 Go는 지원을 하지 않아 직접 코드를 zip 파일로 묶어서 올려야 했다. # 프로젝트 zip 파일로 묶기 go 프로젝트 terminal 창에서 lambda 패키지를 설치한다. go get github.com/aws/aws-lambda-go/cmd/build-lambda-zip import에 코드 추가하기 (실제로 코드에 사용하지 않기 때문에 앞에 '_'를 추가한다.) import ( _ "github.com/aws/aws-lambda-go/lambda" ) 다음 명령어를 차례대로 실행한다. $ set GOOS=linux $ go build -o main main.go $ %USERPROFILE%\Go\bin\build-lambda-zip.exe -output..
AWS Elastic Beanstalk(이하 EB)의 로그는 EB 콘솔에 접근하여 볼 수 있지만 마지막 100줄과 전체만 볼 수 있다는 불편함이 있다. S3의 Select 기능을 사용하여 로그를 좀 더 편하게 보기 위해서 EB에 쌓이는 로그를 S3에 쌓도록 한다. CloudWatch의 로그 그룹을 S3로 내보내기 S3로 데이터 내보내기 S3 버킷 정책 추가 다음 내용을 참고하여 진행하였다. https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/logs/S3ExportTasksConsole.html 콘솔을 사용하여 Amazon S3로 로그 데이터 내보내기 - Amazon CloudWatch Logs 기존 버킷에 이미 하나 이상의 정책이 연결된 경우 Clou..
# 배경 AWS Lambda를 통해 알림톡 발송을 지정해뒀는데 알림톡이 갑자기 3번 발송되는 현상이 발생했다. # 문제 원인 Lambda의 일반 구성 > 제한 시간 기본 값이 3초로 설정되어 있다. Log를 확인하니 해당 Lambda의 실행 시간이 3초가 넘어 timeout이 나면서 재시도를 하였다. > Lambda는 함수가 실패하면 재시도를 2번 하도록 기본 설정되어있다. # 해결 방법 제한 시간을 최대 15분까지 늘릴 수 있다. 일단은 1분으로 시간을 늘린 뒤에 로그를 통해 제한시간을 변경하는 것이 좋을 것 같다.
# 배경 어느 날인가부터 오류를 쌓는 곳에 해외 IP에서 인입되는 에러들이 나타난 것을 발견했다. 현재 회사에서 운영하는 페이지는 해외 사용자들 대상이 아니기 때문에 해외 IP를 막기로 하였다. # WAF 사용하여 해외 IP 차단하기 1. Web ACLs 생성하기 - Create web ACLs 클릭 - Web ACL 설정 2. 사용할 AWS 리소스 선택 - 백엔드 서비스로 유입되는 해외 IP를 차단하고 싶었기 때문에 Application Load Balancer에서 차단하고자 하는 리소스들을 선택해서 추가한다. 3. Rule(규칙) 추가하기 - 직접 규칙을 설정하기 위해 "Add my own rules and rule group"을 선택한다. - Rule에 대한 이름을 설정하고 한국에서 발생되는 IP가..
# 배경 서버를 운영하는데 CPU가 올라가거나 request 수가 크지 않았음에도 서버가 timeout이 나서 다운이 되는 일이 발생했다. 어떠한 부분에서 문제가 있는지 알아보기 위해서 Slow Query 모니터링이 필요하다. # RDS Slow Query 설정하기 1. 파라미터 그룹 열기 사용 중인 파라미터 그룹에 접근한다. 2. 파라미터 편집 파라미터 편집 > slow_query_log 검색 slow_query_log의 기본값은 0 또는 없음이다. 로깅을 하기 위해서는 값을 1로 지정하고 저장한다. general_log도 똑같이 설정한다. long_query_time : 몇초 이상 걸리는 query를 로깅할 것 인지 3. 로깅 된 값 조회하기 - 파라미터 그룹에 log_output을 검색하면 다음과 ..