AWS
AWS Lambda 직접 구현하기 - 1
AWS Lambda 직접 구현하기 - 1
2024.11.27요즘 AWS 인프라 중에서 많이 다루는 것이 Lambda여서 그런지 Lambda 내부 동작에 대해서 궁금증이 생겼다. Lambda는 어떻게 짧은 시간에 독립된 환경을 구성하고 코드를 실행키는 지 찾아봤다. 그러던 중 2018년 AWS 기술 블로그에서 확인할 수 있었다. AWS에서 오픈소스로 개발한 firecracker라는 가상화 기술이다. firecracker 문서 내용에 따르면, Lambda 혹은 Fargate같은 서버리스 서비스를 위해서 KVM을 기반으로 경량 가상화인 microVM을 만들어 125ms 만에 코드를 실행할 환경을 제공한다고 한다. Virtual Box로 VM을 생성했을 때 15초 ~ 1분 정도 걸렸었는데, 얼마나 놀라운 기술인가..! 그래서 단순히 firecracker를 실행해보는 게..
EC2 UserData 용량 문제 해결
EC2 UserData 용량 문제 해결
2024.11.07UserData(이하 UD) 스크립트는 EC2 인스턴스가 시작될 때 실행된다. UD를 이용해 필요한 패키지를 설치하거나 EC2 내부에서 스크립트를 실행할 수 있다. 실제로 작업할 때 EC2를 만들면 환경 변수랑 실행할 스크립트 때문에 UD의 최대 크기인 16KB를 넘기는 경우가 생겨서 에러가 발생한 적이 있었다. 이러한 문제를 해결 방법에 대해서 알아보려고 한다. 1. Machine Image 만들기EC2에 필요한 패키지를 미리 설치한 Machine Image를 준비하면, 패키지 설치 스크립트를 빼고도 되니까 UD 크기를 줄일 수 있다. 2. 실행할 스크립트 외부에 저장하기AWS S3 같은 외부 저장소에 실행할 스크립트를 저장해 놓고, 인스턴스에서 다운로드해서 실행하는 방법이다. 이렇게 하면 UD 크..
AWS Private Subnet S3 Data Transfer 비용
AWS Private Subnet S3 Data Transfer 비용
2024.11.05기존의 Private Subnet에서 동작하는 EC2와 Lambda 리소스들은 프로세싱을 작업을 위해서 S3에서 객체를 다운로드하고, 후처리 작업을 한다. 나는 이때 Compute Resource인 EC2와 Lambda에는 Data Transfer(이하 DT) 비용이 발생하지 않는 것으로 알고 있었다. 하지만 내 생각은 틀렸고 개선할 부분을 찾을 수 있었다. 우선 기존 아키텍처는 아래와 같다. 요청의 흐름은 다음과 같다. 1. Compute Resource -> Nat Gateway2. Nat Gateway -> Internet gateway3. Internet Gateway -> Internet4. Internet -> S35. 역순 이때 나는 S3는 같은 리전의 서비스가 접근할 때는 DT가 발생하지..
Aws Lambda 파일 시스템의 필요성
Aws Lambda 파일 시스템의 필요성
2024.10.24업무를 하다보니 파일을 읽어들이고 데이터를 생성하는 Lambda가 필요해졌다. S3에서 파일을 가져오는 방식으로 설계했지만 실패하고 결국 파일 시스템을 사용하게 됐다. 그 과정에서 생긴 이슈와 내가 놓친 부분들을 보려고 한다. Lambda와 S3 네트워크 나는 vpc endpoint gateway 유형을 사용하고 있었기에 Lambda에서 S3를 호출할 경우 Public 네트워크가 아닌 내부 네트워크를 이용하게 된다. 나는 이점에서 빠른 데이터를 다운로드 받을 수 있다고 생각했다. 하지만 난 틀렸다. 실제로 S3는 100Gbps를 지원한다. 내가 간과한 것은 Lambda의 네트워크 대역폭이었다. 실제로 AWS 측에서 세부적으로 밝힌 것은 없지만, 커뮤니티들을 살펴봤을 때 Lambda의 메모리를 올렸을 때 ..
저렴하게 실시간 분석 아키텍처 만들기 with aws, terraform
저렴하게 실시간 분석 아키텍처 만들기 with aws, terraform
2024.10.10서비스를 운영하며 수집되는 데이터는 방대하고 이러한 데이터들 속에서 어떻게 인사이트를 얻어서 서비스를 발전시킬 수 있을까?? 항상 진행하고 싶은 업무 중의 하나이다. 인사이트를 얻기 위해선 데이터를 분석할 수 있는 아키텍처가 필요하다. 이러한 아키텍처에서 요구되는 기능은 보통 아래와 같다. 1. 데이터 수집2. 데이터 처리 및 변환3. 변환 데이터 저장4. 데이터 분석 여기서 해당 기능들을 사용할 수 있는 다양한 서비스들을 사용할 수 있다. 하지만 나는 최대한 저렴하게 이용할 수 있는 아키텍처를 구성해보자.아키텍처 가격은 저렴하고, 확장성 있게 만들어보려고 한다. 그래서 나는 아래와 같이 선택했다. 1. 데이터 수집 -> Kinesis Data Firehose PUT API2. 데이터 처리 및 변환 ..
Terraform 모듈로 반복 리소스 선언 줄이기
Terraform 모듈로 반복 리소스 선언 줄이기
2024.10.09나는 Terraform(이하 테라폼)으로 cloud의 인프라 리소스를 관리하는 업무를 주로 맡고 있다. 테라폼은 모듈 구조를 지원하는데 활용법이 성숙도에 따라서 많이 달라진다고 느꼈다. 기존에 내가 모듈을 사용하는 방법은 여러 환경에서 환경 변수를 다르게 주입해서 리소스를 만들때 리소스 코드를 줄이기 위함이었다. 하지만 업무를 하다보니 틀은 동일하고 특정한 값만 바뀌는 리소스를 여러 개 생성하야 하는 경우가 많았다. 예를 들어서 서버리스로 서비스를 운영하는 경우 AWS 리소스인 Lambda를 주로 생성하게 된다. 그래서 나는 Lambda가 사용하는 리소스가 공통적으로 사용하는 틀을 모듈을 생성하는 방향을 생각했다. Terraform 구조 구조 자체는 간단하다. 1. 전체 리소스를 관리하는 main...