람다 함수 - 로깅, 모니터링
- 람다는 클라우드 워치 로그와 연결되어 있으므로, 람다의 모든 실행 로그는 자동으로 CloudWatch Logs에 저장된다.
- 단, 람다 함수가 클라우드 워치 로그에 접근할 수 있도록 알맞은 IAM역할이 있어야 한다.
- 람다의 지표는 클라우드 워치 지표에 표시된다.
- 호출, 기간, 동시 실행, 오류 수, 성공률, 병목 현상, 비동기 전송 실패, 반복자 기간 (스트림에서 데이터를 읽어오는 경우)
람다 함수 - X-Ray
- 람다 함수에서 Active Tracing만 활성화 해주면 x-ray에서 람다를 추적할 수 있다.
- 활성화 하면 x-ray데모이 실행된다.
- 그 후, 코드에 x-ray SDK만 적어주면 된다.
- 람다 함수에 x-ray를 사용할 수 있는 권한이 있는지 확인해야 한다.
- x-ray와 소통할 수 있는 환경 변수는 위와 같다.
- 가장 중요한 건 마지막 변순데, demon이 실행되는 ip주소와 port번호를 알려준다.
Customization At The Edge
- 함수와 애플리케이션을 특정한 리전에 배포한다고 배웠는데,
클라우드 프론트 등을 사용할 때는 엣지 위치에 콘텐츠를 배포하는 경우도 있다. - 현대에, 애플리케이션에 도착하기 전에 엣지에서 먼저 로직을 실행해야 하는 경우가 있다.
- 이를 엣지 함수라고 부른다.
- 엣지 함수는 클라우드 프론트 배포시 탑재한다.
- 지연 시간을 최소화하려는 경우에 사용자와 가까운 곳에서 함수를 실행하는 것이다.
- 클라우드 프론트는 두 가지 함수 유형을 제공한다.
- 클라우드 프론트 함수와 Labda@Edge이다.
- 엣지 함수를 사용하면 서버를 관리하지 않아도 되고 글로벌하게 배포된다는 이점이 있다.
- 사용 사례로는, CDN 컨텐츠를 커스터마이즈 하는 경우가 있다.
- 사용량에 따라서만 비용을 지불한다.
Use Case
- 웹 사이트 보안과 개인정보 보호
- 엣지에서의 동적 웹 애플리케이션
- 검색 엔진 최적화
- 오리진과 데이터센터 간 지능형 라우팅
- 엣지에서의 Bot(사이버 공격) 완화
- 엣지에서 실시간 이미지 변환
- A/B 테스트
- 사용자 인증과 권한 부여
- 사용자 우선순위 지정
- 사용자 추적 및 분석
CloudFromt Functions
- 클라우드 프론트 함수는 다음과 같이 구성된다.
- 자바 스크립트로 작성한 가벼운 함수이며, 뷰어 요청과 응답을 수정한다.
- 대기 시간이 중요한 큰 규모의 CDN 커스터마이징에 사용된다.
- 시작 시간이 밀리초 미만이고, 초당 수백만 개의 요청을 수행할 수 있다.
- 뷰어 요청 및 응답을 바꾸는 데만 사용된다.
- 클라우드 프론트의 네이티브 기능이며, 모든 코드가 클라우드 프론트에서 관리된다.
Lambda@Edge
- 람다 엣지는 Node.js나 파이썬으로 작성되는 함수이고, 요청 수는 초당 수천 회다.
- 클라우드 프론트 함수보다 더 자세하고 세밀한 제어를 하는 대신 속도가 느리다고 생각하면 된다.
- 클라우드 프론트의 요청과 응답을 변경하는데 쓰인다.
- 뷰어 요청, 응답
- 오리진 요청, 응답
- 모든 것을 수정할 수 있다.
- 클라우드 프론트를 관리하는 리전에 함수를 작성하면, 클라우드 프론트에서 이 함수를 모든 위치에 복제한다.
사용 예시
- 클라우드 함수
- 캐시 키 정규화
- 속성을 변경해서 캐시 키 생성에 최적화된 형태로 만든다.
- 헤더 조작
- 헤더의 내용을 삽입, 수정 삭제할 수 있다.
- URL을 재작성 하거나 리디렉션 할 수 있다.
- 인증이나 인가를 허용 거부 할 수 있다.
- 이 모든 것을 1ms 미만으로 수행한다.
- 캐시 키 정규화
- 람다 엣지
- 최대 10초까지, 수행 시간이 좀 길다.
- cpu와 메모리를 조정할 수 있어 라이브러리를 많이 가져오고
- 코드에 타사 라이브러리를 이용할 수 있다.
- 파일 시스템에 접근해 처리할 수도 있고
- http 요청의 바디도 수정할 수 있다.
Lambda by default
- 기본적으로 람다함수는 VPC 외부에서 실행된다.
- 우리가 속한 VPC 말고 AWS 소유의 다른 VPC에서 실행됨
- 따라서 우리의 VPC에 있는 리소스에는 액세스가 불가능하다.
- 기본적으로 AWS 클라우드가 있으면 람다 함수는 외부 엔드 포인트와 클라우드 내부 다른 서비스에 접근 가능하다.
- 하지만 다른 VPC나 프라이빗 서브넷 내부의 서비스에는 접근이 불가능하다.
- 이 문제는 어떻게 해결할까
람다 in VPC
- ENI를 만들면 된다.
- 이를 위해선, VPC ID와 서브넷을 정의하고, 보안 그룹을 람다함수에 배정해야 한다.
- 그 동안, 람다 함수는 ENI를 생성하는데 엘라스틱 네트워크 인터페이스는 우리가 선택한 서브넷에 생성된다.
- ENI를 생성하기 위해 AWSLambdaVPCAccessExecutionRole을 필요로 한다.
- 이 그림을 예시로 보자
- 람다 함수가 사설 서브넷의 RDS에 접근하기 위해선 ENI가 필요하다
- 사설 서브넷에 대한 보안그룹 설정이 잘 돼 있으면 내부에 ENI를 만들 수 있다.
- 이후 RDS가 람다 함수의 접근을 허용하는 보안 그룹 설정이 돼 있다면 람다 함수는 접근을 할 수 있다.
VPC 내부의 람다 함수 - 인터넷 액세스
- 일반적으로 VPC 내부의 람다 함수는 인터넷 액세스 권한이 없다.
- 람다 함수를 공용 서브넷에 배포한다고 해도, 인터넷 액세스와 공용 ip접근 권한은 없다.
- 인터넷 액세스 권한을 얻기 위해선,
- NAT Gateway, NAT Instance를 사용해야 한다.
- 다음과 같이 외부 api는 NAT를 거치고 인터넷 게이트웨이를 통해 외부 인터넷과 연결된다.
- 클라우드 워치 로그는 예외인데, 람다 함수를 사설 서브넷에 배포해도, 클라우드 워치로 로그를 보내는 데는 아무 문제가 없다.
람다 함수 - Configuration
- RAM
- 128MB ~ 10GB를 1MB 단위로 조정해서 사용할 수 있다
- 더 많은 RAM을 추가하면 더 많은 CPU를 얻게 된다.
- vCPU의 개수를 직접적으로 설정할 순 없고, 램을 늘려서 cpu를 얻어야 한다.
- 램이 1729MB에 도달하게 되면, 얻을 수 있는 최대의 vCPU를 갖게 된다.
- cpu가 1개라도 생긴다면, 멀티 스레딩을 통해 이점을 극대화 할 수 있다.
- 다시 말해, 애플리케이션이 cpu를 많이 사용하는 무거운 앱이라면, RAM을 증가시켜라
- TIMEOUT
- 람다함수는 기본값으로 타임아웃이 3초로 설정돼있다. 최대는 900초다.
- 람다함수가 실행된지 3초가 넘으면, 함수는 종료되고 오류를 낸다는 것이다.
- 15분을 넘게 실행되는 애플리케이션이라면, 람다함수를 사용할 게 아니라
컴퓨팅 리소스를 사용해라
- 람다함수는 기본값으로 타임아웃이 3초로 설정돼있다. 최대는 900초다.
- Execution context
- 런타임 환경에서 람다 코드의 외부적 의존성을 의미한다.
- 이 컨텍스트를 사용해서, 데이터베이스에 접속하고 http 클라이언트나 sdk 클라이언트를 만들 수 있다.
- 람다 함수의 호출이 여러 번 예상될 때, 잠시 동안 그 컨텍스트가 유지되어
기존의 모든 데이터베이스 접속이나, http 클라이언트 등등을 계속 재사용할 수 있다.- 컨텍스트에는 /tmp 라는 디렉토리가 있는데
- 파일을 작성할 수 있는 공간으로, 실행 중 계속 사용 가능하다.
- 이 컨텍스트 사용 예시를 봐보자
- 왼쪽은 함수 내부에 데이터베이스 연결 코드를 작성하여, 함수 호출 마다 새로운 데이터베이스 연결이 생성된다.
- 굉장히 비효율적이다.
- 오른쪽은 함수 외부에 데이터베이스 연결 코드를 작성하여, 실행 간에 재사용하는 모범 사례로 볼 수 있다.
람다 함수 - tmp 스페이스
- 사용자 코드를 작성하고 그걸 재사용하려면 tmp 파일을 이용하면 된다.
- 실행을 위해 매우 큰 파일을 다운로드 해야한다거나
- 작업을 수행하기 위해 디스크 공간이 필요한 경우에는 그 파일들을 모두 tmp에 저장한다.
- 10GB까지 저장할 수 있다.
- 이 파일은 람다 함수가 실행되는 동안에 유지된다.
- 람다 함수가 중지되고 다시 호출되어도, tmp에서 똑같은 파일을 다시 불러오면 되니 시간을 절약할 수 있다.
- 임시 유지 파일이 아닌 영구적으로 유지돼야하는 파일이라면, tmp를 사용하지말고 s3를 사용해라
- 암호화를 원한다면 람다에서는 암호화 방법이 없고
- kms 피쳐에서 데이터 키를 생성한 후, kms data 키를 이용해 암호화할 수 있다.
'AWS' 카테고리의 다른 글
[AWS] aws 강의 섹션 21-1 (람다 (Lambda), 람다 함수(Labda Function)) (0) | 2024.10.22 |
---|---|
[AWS] aws 강의 섹션 20-2 (X-Ray, CloudTrail) (1) | 2024.10.18 |
[AWS] aws 강의 섹션 20-1 (CloudWatch, Event Bridge) (0) | 2024.10.15 |
[AWS] aws 강의 섹션 19 - 2 (SNS, Kinesis 분석) (3) | 2024.10.14 |
[AWS] aws 강의 섹션 19 - 1 (SQS - Standard Queue, FIFO Queue, queue Access Policy, DLQ, Visibility Timeout) (0) | 2024.10.14 |