Programming-[Infra]/Cloud-AWS (9) 썸네일형 리스트형 Cloud Front, Lambda Edge, 배포 방식 배경 이미지, 영상 등을 처리하는 Lambda 함수를 사용하면서 Lambda@Edge도 함께 처리했다. Lambda@Edge(이하 엣지)는 Cloud Front(CF) 뒤에 있으면서 전 세계 글로벌 엣지 위치에 실제 물리적 리소스가 존재하여 네트워크 홉에 의한 지연 시간을 최소한으로 만들어주는 서비스이다. 또한 CF의 Origin 요청/응답 타이밍에 실행되어 S3 접근 직전/직후를 제어하여 동적인 컨텐츠를 생성하는데 유리하다. ApiGateway, SQS 등 여러 요소들을 사용했으나 이번에는 CF, Edge의 기본 구성과 배포 방식에 대해 정리해놓을려고 한다. ApiGateway게이트웨이로 로 요청이 들어오면 람다가 트리거 될 수 있다. 이를 통해 람다의 함수가 실행되어 s3 등에 저장된 파일에 접근,.. [TIL] AWS Lambda + Event Bridge 처리 w/ 휴가봇, CloudWatch 배경전사 공통 서비스로 람다 함수가 주기적으로 실행되면서 휴가자들의 정보를 업데이트하는 서비스를 인계받았다. 에러가 나서 살펴보니 퇴사자의 Google Cloud Platform(GCP) 계정이 만료되어 해당 계정에서 만들어둔 앱의 token 값이 만료된 것이였다. 사내 공통 계정에 세팅하고 토큰 값 등을 받아서 람다를 업데이트했다. 그 과정 중에 배웠던 점들을 기록한다. 람다람다는 필요할 때만 스크립트 코드 등 내가 원하는 기능을 작동 시킬 수 있다. 서버처럼 항상 유지될 필요가 없고, 사용 시에만 작동하므로 비용도 매우 저렴하다. 노드나 파이썬 등으로 작성 가능하다. 소스 코드를 볼 수 있고, 업로드할 수 있다. 그냥 로컬에서 .zip 파일 형태로 업로드할 때는 용량 제한이 10 MB까지이다. S3 .. Deploy: ECR: Assume Role for CI w/ github workflow 필요성AWS Assume Role을 적용하면 github으로 CI(Continuous Integration)를 위해 AWS 계정의 ACCESS_KEY, SECRET_KEY를 대체할 수 있다. 따라서 코드가 간결해진다. 관리자 입장에서는 특정 유저에게 IAM 권한 및 토큰을 발급해야하는 관리 요소가 줄어든다. 또한 Assume Role을 사용하는 위치 및 이력을 추적하여 관리할 수 있게 된다. 개념Assume Role은 임시로 특정 역할을 가정하여 제한된 권한만 주는 방식이다. github에 적용한다면 github의 특정 레포지토리에 assume-role을 주고, 해당 role은 특정 AWS 리소스의 특정 역할만 사용가능하도록 설정해줄 수 있다. 예를 들어 AWS Assume Role을 하나 만들고, gi.. Elasticache 연결 문제 - <unresolved>:6379, Redis, Springboot, Lettuce 문제상황 Elasticache - Redis를 사용하기 위해 Redis cluster를 생성하고 스프링부트 - LettuceConnectionFactory를 통해 연결할려는데, 아래와 비슷한 에러가 발생했다. Caused by: io.lettuce.core.RedisConnectionException: Unable to connect to {레디스 엔드포인트 주소}.cache.amazonaws.com/:6379 at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:78) at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:.. [탐험]S3 Content-Disposition으로 파일 다운로드 이름 변경, CloudFront 캐시 무효화 1. 결론 s3는 Content-Disposition값에 따라 다운로드하는 파일의 이름을 변경할 수 있다. 다만 S3 자체에서 다운로드 할때는 AWS에서 해당 header값을 override해서 안된다. URL을 거쳐서 진행할때만 가능하다. CloudFront를 사용하는 경우 요청의 X-Cache 값을 살펴보자. S3와 즉각적으로 동기화가 안된다면 캐싱 때문일 수도 있고, 이때는 무효화를 적극적으로 고려해보자. 상기 내용 때문에, CloudFront로 연결된 S3의 Content-Disposition 값을 그대로 프론트에서 활용하는 것은 실시간성을 확보할 수 없다. 실시간으로 변경 및 표시가 필요하다면 따로 DB 등에 저장해놓고 해당 값을 프론트에서 조회해야한다. 2. 문제상황 S3에 업로드된 파일을 사.. [TIL] AWS S3 donwload_file() method directory에 random string 붙는 현상. FileNotFoundError 1. 현상 S3의 boto3를 이용하여 donwload_file() 메서드를 실행한다. 첫 번째 인자인 obj.key는 S3에 저장된 파일의 key값, 두번째 인자는 저장된 버킷의 이름, 세 번째 인자는 다운로드한 파일을 저장할 디렉토리 이름이다. os.mkdir(folder, exist_ok=True) 를 써서 folder에 대한 경로는 로컬에 만들어놓고, obj.key값을 붙여서 저장할려고 했는데 저장이 안되고 디버깅 상에서 _packed라는 obj.key 상 파일 이름 뒤에 .bd88bF6E라는 이상한 문자열이 추가로 붙었다. 그리고 실행할 때마다 뒤 문자열이 임의로 계속 변경되었다. 2. 원인 random string이 붙는 현상 boto3는 파일 다운로드 중 파일의 이름 뒤에 random str.. [TIL] AWS Lambda, CloudFormation, Gateway 람다 서비스 구조 AWS Lambda로 AWS에서 Function Resource를 만들어서 하나의 서비스를 처리하도록 만들 수 있다. 작은 서버와도 같아서, 기존 서비스와는 별개로 요청을 받고, 어떤 작업을 처리하고 응답을 내보낼 수 있는 구조이다. 람다는 내부 용량 제한이 있는데, 만약 이 용량 제한이 512MB라면 작업을 처리하기 위한 모든 파일을 포함하기에는 부족하다. 서버를 띄우기 위한 일부 코드와 파이썬 프로그램 등만 포함해도 512MB를 초과할 수 있다. 따라서 람다에 필요한 라이브러리 등의 코드들은 직접 포함하지 못하고 Layer라는 참조 정보만 포함하게 된다(단순하게 표현하자면 특정 라이브러리를 다운로드 받을 수 있는 URL). 실제 람다 실행 시에 Layer 정보를 참조로하여 다른 라이.. 2020/11/11 TIL : AWS/local 서버 생성, AWS DB 생성, 서버-DB 연결 11월 11일 1. Git Flow 파악 2. 서버 및 DB 생성, 연결 항목(시간순 정렬) 방법 정보 유의점 Git flow 확립 우측 그림 참조 -upstream의 Dev repo.를 default로 설정, -local에서 본인 repo.로 업로드 시, git push origin feature#00 입력 EC2 서버 생성 및 접속 - 생성 방법은 매뉴얼 참조 - 우측 '정보'란의 퍼블릭 DNS 주소를 터미널에 입력 AWS- EC2 - 인스턴스 - 인스턴스 이름 클릭 - 연결 - SSH 클라이언트 - 퍼블릭 DNS 주소 복사 -local PC에서 .ssh 폴더에 pem key 파일 존재 -터미널의 디렉토리 위치를 .ssh 폴더로 지정 후 명령어 입력 - 플랫폼을 Ubuntu로 만들어주어야 한다. 서버.. 이전 1 2 다음