본문 바로가기

전체 글

ELK 구축하고 Filebeat로 로그 수집하여 확인해보기 시스템 로그는 중요하다. 서비스가 성장함에 따라 보안요건도 까다로워진다. 그 보안요건 중 하나가 사용자 로그인에 대한 추적 및 증적을 남기는 것이다. 이를 달성하기 위해 ELK와 Filebeat로 각 서버의 syslog를 수집하고 시각화 해보자. 인스턴스 사양 M6g.large Arm 기반 AWS Graviton2 프로세서 vCPU 2 Mem 8GiB ELK 설치 ##라이센스 받아오기 wget -qO - | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg sudo apt-get install apt-transport-https echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyr.. 더보기
랜딩페이지, S3로 이전 기존 랜딩페이지는 AWS EC2에서 Apache2를 통해 호스팅되고 있었다. 그러나 랜딩페이지의 동적컨텐츠가 모두 제거되어, 더 이상 호스팅을 위해 서버 자원을 사용하는 것은 낭비라 판단했다. 따라서 S3로 소스파일을 옮겨 정적 호스팅을 하고자 했다. 요구사항 이전 시, 접속이 안되는 일은 없어야 한다. Jenkins 배포자동화를 구성한다. 개발자를 위해 테스트 도메인을 하나 더 준비한다. 작업순서 테스트 도메인 S3 정적 호스팅 S3 업로드 자동화 도메인을 Cloudfront에 등록 Cloudflare DNS 등록 S3 정적 호스팅 고유한 이름으로 S3를 생성한다. 호스팅을 위해서 퍼블릭 액세스 차단을 해제한다. 속성에서 “정적 웹 사이트 호스팅”을 활성화 해준다. 인덱스 문서는 index.html 이.. 더보기
Opensearch로 Cloudfront의 access_log를 실시간으로 분석해보자 💡 참고자료 [AWS 공식블로그] Kinesis Data Stream 생성 Kinesis 콘솔 데이터 스트림 생성 이름 cloudfront-real-time-log-data-stream 지정 온디멘드 요금 설정 성공 Cloud Front 배포, 실시간 로그 활성화 Cloud Formation 활용하여 손쉽게 배포 생성된 S3에 정적파일 업로드 Cloud Front 콘솔 원격측정 > 로그 실시간 로그 구성 > 구성 생성 이름 CloudFrontRealTimeConfigName 샘플링 속도 100 원하는 필드 선택 생성한 Kinesis data stream ARN 등록 배포, 기본 캐싱 설정 성공 Kinesis Firehose에서 로그 처리용 Lambda 함수 생성하기 람다 콘솔 함수 생성 이름 cf-rea.. 더보기
[lambda]Task timed out after 3.00 에러메시지 { "errorMessage": "2022-07-24T04:46:35.238Z 98b1f53f-30ec-4c41-a8fa-31bb4586eba0 Task timed out after 3.08 seconds" }람다 실행 최대 시간이 3초여서 그 안에 작업을 끝내지 못했음. 람다는 쿼리를 날려주는 것이므로 좀 걸릴 수가 있음. 그래서 실행 최대 시간을 늘려주면 해결! 더보기
[Lambda]Cannot find module 에러 메시지 { "errorType": "Runtime.ImportModuleError", "errorMessage": "Error: Cannot find module 'athena-express'\nRequire stack:\n- /var/task/index.js\n- /var/runtime/index.mjs", "trace": [ "Runtime.ImportModuleError: Error: Cannot find module 'athena-express'", "Require stack:", "- /var/task/index.js", "- /var/runtime/index.mjs", " at _loadUserApp (file:///var/runtime/index.mjs:726:17)", " at asy.. 더보기
S3로 정적 호스팅 하기 정적콘텐츠 생성 💡 참고자료 [HTML 공식문서 첫시작] HTML 문법에 따라 index.html 파일 생성 버킷생성 💡 참고자료 [AWS 버킷정책] 고유한 버킷이름 설정 서울리전 퍼블릭 액세스 차단 설정 해제 index.html 파일 업로드 속성 > 정적 웹 사이트 호스팅 > 활성화 버킷 정책 추가(모든 사용자가 버킷의 Object 를 읽을 수 있음) { "Version": "2012-10-17", "Id": "Policy1658302034241", "Statement": [ { "Sid": "Stmt1658302033161", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::access-lo.. 더보기
Cloud Front로 S3의 정적 콘텐츠를 전세계에 배포해보자! Cloud Front란? AWS에서 제공하는 CDN 서비스이다. 캐싱을 통해 Client에게 좀더 빠르게 콘텐츠를 제공한다. 전 세계에 있는 Edge Location 중, Client에 가장 가까운 곳을 찾아 리다이렉션 해준다. 해당 그림을 보면, 오리진에서 각 국가에 있는 Edge Location으로 콘텐츠가 배포된다. 도쿄에 있는 Client가 Cloudfront의 DNS 주소로 접속하면 가장 가까운 도쿄 Edge Location에서 콘텐츠를 받아온다. 이때 오리진의 콘텐츠가 캐싱되어있어 Client는 더욱 빠르게 콘텐츠를 받아볼 수 있다. Cloud Formation 생성 💡 참고자료 [AWS 공식 자습서] AWS는 Amazon S3와 CloudFront를 최대한 일괄적으로 설정할 수 있도록 시작할.. 더보기
access_log 파일 참조 불가 문제 해결 나는 앱을 만들때, 같은 디렉토리에 access_log 파일을 테스트로 둔채, 개발을 진행했다. 따라서 다음과 같은 코드는 파일을 잘 가르키고 있었다. const accessLogFile = process.env.ACCESS_LOG_FILE_LOCATION 왜냐면? 같은 디렉토리에 있으니까 잘 참조가 되었다. 그래서 환경변수를 처리해주어 EC2에서도 경로만 잘 지정하면 파일을 잘 참조할 수 있을줄 알았다. 그러나 에러가 발생하였다. 에러내용을 보자. throw new ERR_INVALID_ARG_TYPE(propName, ['string', 'Buffer', 'URL'], path); ^ TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of .. 더보기