AWS Lambda란 🤔
서버를 관리하지 않고도 코드를 실행할 수 있게 해주는 컴퓨팅 서비스
- 함수
- Lambda에서 코드를 실행하기 위해 호출할 수 있는 리소스
- 함수에는 사용자가 함수에 전달하거나 다른 AWS 서비스가 함수에 보내는 이벤트를 처리하는 코드가 있음
- 이벤트
- 처리할 Lambda 함수에 대한 데이터가 포함된 JSON 형식 문서
- 런타임은 이벤트를 객체로 변환한 후 함수 코드에 전달
- 배포 패키지
- 함수 코드 및 종속 항목이 포함된 .zip 파일 아카이브
- 런타임
- 런타임은 실행 환경에서 실행되는 언어별 환경을 제공
- Lambda와 함수 간의 호출 이벤트, 컨텍스트 정보 및 응답을 전달
- 코드를 .zip 파일 아카이브로 패키징하는 경우 프로그래밍 언어와 일치하는 런타임을 사용하도록 함수를 구성
- 컨테이너 이미지의 경우 이미지를 빌드할 때 런타임을 포함하여야 함
- 배포 크기를 줄이려면 Lambda 레이어를 활용하여 함수와 분리된 형태로 라이브러리와 의존성을 관리
Lambda 장단점
- 장점 : AWS Lambda는 사용자가 코드 실행에만 집중할 수 있도록 인프라 관리의 많은 부분을 자동화 (메모리, CPU, 네트워크 및 기타 리소스 균형을 제공하는 컴퓨팅 플릿을 관리하여 코드를 실행)
- 단점 : Lambda가 이러한 리소스를 관리하므로 컴퓨팅 인스턴스에 로그인하거나 제공된 런타임에 운영 체제를 사용자 지정할 수 없음
Lambda 주요 기능 🙌
- 환경변수
- 환경 변수를 사용하여 코드를 업데이트하지 않고 함수의 동작을 조정
- 버전
- 정적인 프로덕션 버전의 사용자에게 영향을 주지 않고 베타 테스트에 새 함수를 사용할 수 있도록 버전으로 함수 배포를 관리
- 컨테이너 이미지
- 기존 컨테이너 도구를 재사용하거나 기계 학습과 같은 상당한 종속 구성 요소에 의존하는 더 큰 워크로드를 배포할 수 있도록 AWS에서 제공하는 기본 이미지 또는 대체 기본 이미지를 사용하여 Lambda 함수에 대한 컨테이너 이미지를 생성
- 계층
- 라이브러리와 기타 종속 구성 요소를 패키징하여 배포 아카이브의 크기를 줄이고 코드를 더 빠르게 배포할 수 있도록 함
- 확장
- 모니터링, 관측성, 보안 및 거버넌스를 위한 도구로 Lambda 함수를 보강
- 함수 URL
- Lambda 함수에 전용 HTTP(S) 엔드포인트를 추가
- 코드 서명
- 승인된 개발자만 변경되지 않은 신뢰 할 수 있는 코드를 Lamda 함수에 게시하는지 확인
- 프라이빗 네트워킹
- 데이터베이스, 캐시 인스턴스, 내부 서비스등의 리소스에 대해 프라이빗 네트워크를 생성
- 파일 시스템 엑세스
- 함수코드가 높은 동시성으로 안전하고 공유 리소스에 액세스하고 수정할 수 있게 Amazon Elastic File System 을 로컬 디렉토리에 탑재하도록 함수를 구성
Lambda는 모든 런타임에 공통적인 프로그래밍 모델을 제공
- 함수 구성에서 핸들러를 정의하여 Lambda에게 함수의 진입점을 알려줌, 런타임은 호출 이벤트와 컨텍스트(예: 함수 이름, 요청ID)를 포함하는 핸들러로 객체를 전달
- 핸들러가 첫번째 이벤트 처리를 완료하면 런타임이 다른 이벤트를 보냄 (함수의 클래스가 메모리에 유지되므로, 초기화 코드에서 핸들러 메서드 외부에서 선언된 클라이언트 및 변수를 재사용할 수 있음)
- 후속 이벤트에 대한 처리 시간을 절약하려면 초기화 중에 AWS SDK 클라이언트와 같은 재사용 가능한 리소스를 생성
- 함수는 /tmp 디렉터리의 로컬 스토리지에도 액세스할 수 있고, 디렉터리 콘텐츠는 실행 환경이 일시 중지되어도 그대로 유지되기 때문에 일시적인 캐시를 여러 호출에서 사용할 수 있음
- 런타임은 함수의 로깅 출력을 캡처하여 Amazon CloudWatch Logs로 보냄, 런타임은 함수의 출력을 로깅하는 것 외에도 호출이 시작되고 끝날 때 항목을 로깅, 함수에서 오류가 발생하는 경우, 런타임은 해당 오류를 호출자에게 반환
Lambda를 다른 AWS 서비스와 함께? 🤔
- API Gateway에서 Lambda사용
- Lambda 함수를 간접적으로 호출하는 Amazon API Gateway REST API를 생성
- Amazon RDS에 엑세스 하기 위해 Lamda 함수 사용
- Lambda 함수를 사용하여 RDS 프록시를 통해 Amazon Relational Database Service(RDS) 데이터베이스에 데이터를 씀
- Amazon S3 트리거를 사용하여 썸네일 이미지 생성
- 이미지 파일이 Amazon S3 버킷에 업로드될 때마다 Lambda 함수를 사용하여 썸네일을 생성
Lambda 함수에 대한 적절한 제한 시간 값을 결정
- 제한 시간 값이 함수의 평균 지속 시간에 가까울수록 함수가 예기치 않게 시간 초과될 위험이 커짐
- 함수의 지속 시간은 데이터 전송량 및 처리량과 함수가 상호 작용하는 서비스의 지연 시간에 따라 달라질 수 있음
💡 지연 케이스 :
1. Amazon Simple Storage Service(Amazon S3)의 다운로드가 평균보다 크거나 시간이 더 걸림
2. 함수가 다른 서비스에 요청을 보내면 응답하는 데 시간이 더 오래 걸림
3. 함수에 제공되는 파라미터가 있으면 함수의 계산 복잡성이 커지므로 호출 시간이 더 오래 걸림
Lambda 환경 변수 보안 🔐
- 서버측 암호화를 이용해 저장 데이터를 보호하고 클라이언트측 암호화를 이용해 전송 중 데이터를 보호할 수 있음
- 💡 데이터베이스 보안을 강화하려면 환경 변수 대신 AWS Secrets Manager를 사용하여 데이터베이스 보안 인증 정보를 저장하는 것이 좋음
- 저장 중 보안
- Lambda는 AWS KMS key를 이용해 항상 저장 중 서버 측 암호화를 제공
- 기본적으로 Lambda는 AWS 관리형 키를 사용
- KMS 키에 대한 액세스 권한이 있는 계정의 사용자만 함수에서 환경 변수를 보거나 관리
Lambda 비동기 호출 레코드 캡처
- 비동기 호출 레코드를 유지하려면 함수에 대상을 추가. 성공한 또는 실패한 간접 호출을 대상으로 전송하도록 선택할 수 있음
- Amazon SQS 대기열 : Lambda는 간접 호출 레코드를 Message로 목적지에 전달
- Amazon SNS 주제 : Lambda는 간접 호출 레코드를 Message로 목적지에 전달
- Lambda 함수 : Lambda는 간접 호출 레코드를 페이로드로 함수에 전달
- EventBridge : Lambda는 간접 호출 레코드를 PutEvents 호출의 detail로 전달
- 목적지로 향하는 요청 추적
- AWS X-Ray을 사용하면 대기열에 추가되고, Lambda 함수에서 처리되고, 대상 서비스로 전달되는 각 요청의 연결된 보기를 볼 수 있음
- 함수 또는 함수를 호출하는 서비스에 대해 X-Ray 추적을 활성화하면 Lambda는 요청에 X-Ray 헤더를 추가하고 헤더를 대상 서비스에 전달
Lambda가 스트림 및 대기열 기반 이벤트 소스의 레코드를 처리하는 방법
- 이벤트 소스 매핑은 스트림 및 대기열 기반 서비스에서 항목을 읽고 레코드 배치로 함수를 간접적으로 호출하는 Lambda 리소스
- 이벤트 소스 매핑과 직접 트리거의 차이점
- 일부 AWS 서비스는 트리거를 사용하여 직접 Lambda 함수를 간접적으로 호출할 수 있음
- Lambda로 이벤트를 푸시하고, 지정된 이벤트가 발생하면 함수가 즉시 간접적으로 호출
- 트리거는 개별 이벤트와 실시간 처리에 적합
💡 트리거 케이스 :
1. Amazon Simple Storage Service(S3): 버킷에서 객체가 생성, 삭제 또는 수정될 때 함수를 간접적으로 호출
2. Amazon Simple Notification Service(SNS): SNS 주제에 메시지가 게시될 때 함수를 간접적으로 호출Amazon API Gateway: 특정 엔드포인트에 대한 API 요청 시 함수를 간접적으로 호출
Lambda 요청 필드 확인 방법
- Lambda 함수 내에서 직접 가져오기
import os
def lambda_handler(event, context):
request_id = context.aws_request_id
print(f"Request ID: {request_id}")
# 여기서 request_id 변수에 Lambda 요청 ID가 포함
- CloudWatch Logs에서 확인하기
- Lambda 함수가 실행될 때마다 로그에 요청 ID가 포함되어 있으며, CloudWatch Logs 콘솔 또는 API를 사용하여 이 정보를 확인할 수 있음
- X-Ray Trace에서 확인하기
- AWS X-Ray를 사용하여 Lambda 함수의 분산 추적을 활성화한 경우, X-Ray 콘솔에서 Lambda 함수의 요청 ID 및 관련된 추적 정보를 확인할 수 있음
계층으로 Lambda 종속성 관리
- 배포 패키지의 크기를 줄이기 위해
- 모든 함수 종속 항목을 함수 코드와 함께 배포 패키지에 포함하는 대신 계층에 배치
- 핵심 함수 로직을 종속 항목과 분리하기 위해
- 계층을 사용하면 함수 코드와 독립적으로 함수 종속 항목을 업데이트할 수 있으며 그 반대의 경우도 마찬가지
- 여러 함수에서 종속 항목을 공유하기 위해
- 계층이 없으면 각 개별 배포 패키지에 동일한 종속 항목을 포함해야 함
Lambda 함수에 대한 롤링 배포 생성
- 롤링 배포를 사용하여 Lambda 함수의 새 버전 도입과 관련된 위험을 제어할 수 있음
- 롤링 배포는 AWS CodeDeploy 및 AWS SAM을 사용해 구성
- CodeDeploy : Amazon EC2 및 AWS Lambda 같은 Amazon 컴퓨팅 플랫폼에 대한 애플리케이션 배포를 자동화하는 서비스
- AWS SAM : 서버리스 애플리케이션을 빌드하기 위한 오픈 소스 프레임워크. AWS SAM 템플릿(YAML 형식)을 생성하여 롤링 배포에 필요한 구성 요소의 구성을 지정함
Lambda 서비스를 사용해야 하는 경우 🤓
빠르게 스케일 업해야 하고 수요가 없을 때는 0으로 스케일 다운을 해야하는 애플리케이션 시나리오
- 파일 처리
- 업로드 후 Amazon Simple Storage Service (S3)를 사용하여 Lambda 데이터 처리를 실시간으로 트리거함
- Amazon Simple Storage Service : 어디서나 원하는 양의 데이터를 저장하고 검색할 수 있도록 구축된 객체 스토리지 (파일 처리)
- 업로드 후 Amazon Simple Storage Service (S3)를 사용하여 Lambda 데이터 처리를 실시간으로 트리거함
- 실시간 스트림 처리
- Lambda 및 Amazon Kinesis를 사용하여 애플리케이션 작업 추적, 거래 주문 처리, 클릭스트림 분석, 데이터 정리, 로그 필터링, 인덱싱, 소셜 미디어 분석, 등등 실시간 스트리밍 데이터를 처리
- Amazon Kinesis : 실시간으로 데이터 스트림을 수집, 처리, 분석해주는 서비스 (실시간 데이터 처리)
- Lambda 및 Amazon Kinesis를 사용하여 애플리케이션 작업 추적, 거래 주문 처리, 클릭스트림 분석, 데이터 정리, 로그 필터링, 인덱싱, 소셜 미디어 분석, 등등 실시간 스트리밍 데이터를 처리
- 웹 애플리케이션
- Lamda를 다른 AWS 서비스와 결합하여 여러 데이터 센터에서 고가용성 구성으로 자동으로 업/스케일 다운되고 실행되는 강력한 웹 애플리케이션을 빌드
- IoT 백엔드
- Lambda를 사용하여 서버리스 백엔드를 구축함으로써 웹, 모바일, IoT 및 서드 파티 API 요청을 처리
- 모바일 백엔드
- Lambda 및 Amazon API Gateway를 사용하여 백엔드를 구축함으로써 API 요청을 인증하고 처리
- Amazon API Gateway : 어떤 규모에서든 개발자가 API를 손쉽게 생성, 게시, 유지 관리, 모니터링 및 보안 유지할 수 있도록 하는 완전관리형 서비스
- AWS Amplify를 사용하여 iOS, Android, 웹 및 React Native 프론트엔드와 손쉽게 통합
- AWS Amplify : 사용자 인증, 실시간 데이터, AI/ML, 파일 스토리지 등 백엔드 사용 사례를 지원하도록 다양한 AWS 서비스를 구성하여 개발자가 더 빠르게 시작할 수 있도록 지원하는 도구 및 기능 세트
- Lambda 및 Amazon API Gateway를 사용하여 백엔드를 구축함으로써 API 요청을 인증하고 처리
'자격증 > AWS' 카테고리의 다른 글
[AWS] EC2: Virtual Machines (0) | 2024.08.29 |
---|---|
[AWS] IAM (0) | 2024.08.28 |
[AWS] AWS CloudFormation (0) | 2024.07.30 |
[AWS] 용어 정리 (0) | 2024.07.21 |