AWS Lambda는 서버를 관리하지 않고 코드를 실행할 수 있게 해주는 강력한 서버리스 컴퓨팅 서비스로, 서버 프로비저닝이나 유지보수를 걱정하지 않고 코드 작성에만 집중할 수 있습니다.
이 튜토리얼에서는 첫 번째 함수 설정부터 다른 AWS 서비스와 통합하는 방법까지 AWS Lambda를 살펴볼 것입니다. 데이터 스트림 처리나 API 구축과 관련하여, 이 안내서는 AWS Lambda를 사용한 서버리스 배포를 시작하는 데 도움이 될 것입니다.
AWS Lambda란 무엇인가요?
AWS Lambda는 서버를 프로비저닝하거나 관리하지 않고 코드를 실행할 수 있는 아마존 웹 서비스(AWS)에서 제공하는 서버리스 컴퓨팅 플랫폼입니다. AWS Lambda는 필요할 때만 함수를 실행할 수 있도록 동적으로 리소스를 할당하고, 사용럼에 따라 청구하여 사전 할당된 서버 용량 대신 요금을 부과합니다.
이 애플리케이션 개발 접근 방식은 전통적인 인프라 설정의 필요성을 없애고, 코드 작성 및 배포에만 집중할 수 있게 해줍니다.
AWS Lambda는 이벤트 기반으로 작동하며, 다른 AWS 서비스의 특정 이벤트에 의해 트리거됩니다. 이는 반응형, 확장 가능하고 비용 효율적인 솔루션을 구축하는 데 이상적입니다.
전통적인 배포 방법은 서버를 설정하고 관리하는 것을 요구하며, 이는 확장, 업데이트 및 패치를 포함합니다. 이러한 작업은 시간이 많이 소요되고, 비용이 많이 들며, 간헐적인 작업 부하에 대해 효율성이 떨어질 수 있습니다. 반면, 서버리스 배포는 이러한 오버헤드를 없애고, 기본적으로 자동 확장성과 높은 가용성을 제공합니다.
AWS Lambda의 특징
- 이벤트 주도 아키텍처: AWS 람다 함수는 데이터 변경, HTTP 요청 또는 AWS 리소스 업데이트와 같은 이벤트에 응답하여 호출됩니다.
- 다중 런타임 지원: 람다는 Python, Node.js, Java, Go, Ruby 및 .NET을 포함한 다양한 런타임을 지원합니다. 개발자는 또한 AWS 람다 런타임 API를 사용하여 자체 런타임을 가져올 수 있어 다양한 사용 사례에 대한 다목적 플랫폼으로 만들어줍니다.
- 자동 확장성: AWS 람다는 수요에 따라 응용 프로그램의 규모를 자동으로 조정합니다. 단일 이벤트를 처리하거나 동시에 수천 개를 처리하더라도 람다는 컴퓨팅 리소스를 동적으로 조정합니다.
- 사용한 만큼 지불하는 요금제: 비용은 요청 수와 함수 실행 시간에 따라 결정됩니다. 이로 인해 사전 투자가 필요 없으며, 사용한 만큼만 비용을 지불하게 됩니다.
- 통합 보안: 람다 작업은 AWS 아이덴티티 및 접근 관리(IAM)와 함께 작동하여 세밀한 접근 제어와 함수와 다른 AWS 서비스 간의 안전한 상호작용을 보장합니다.
람다의 일반적인 사용 사례
- 데이터 스트림 처리:AWS Lambda는Amazon Kinesis와 통합되어 실시간으로 스트리밍 데이터를 처리하고 분석합니다. 예를 들어, IoT 장치를 모니터링하거나 로그 파일을 동적으로 처리할 수 있습니다.
- RESTful API 구축:Lambda 함수는 AWS API Gateway와 결합되어 웹 및 모바일 애플리케이션을 위한 확장 가능한 API를 생성합니다. 이 설정은 사용자 인증 처리, 데이터베이스 쿼리 또는 동적 콘텐츠 생성을 위해 일반적으로 사용됩니다.
- 워크플로 자동화: S3, DynamoDB 또는 CloudWatch와 같은 서비스의 이벤트에 따라 Lambda 함수를 트리거하여 복잡한 워크플로를 자동화합니다.예를 들어, S3에 업로드된 이미지를 자동으로 크기 조정하거나 오래된 데이터베이스 레코드를 아카이브할 수 있습니다.
- 데이터 파이프라인의 이벤트 처리: Lambda를 사용하여 S3 버킷에 대한 새로운 업로드 처리, 저장 전에 데이터 변환, 또는 외부 API 호출로 데이터 스트림을 풍부하게 하는 등의 실시간 데이터 이벤트를 처리할 수 있습니다.
- 서버리스 백엔드 처리: Lambda는 데이터 유효성 검사, ETL (추출, 변환, 로드) 프로세스 또는 Amazon SNS 또는 SES를 통해 알림을 보내는 등 백엔드 작업을 오프로드하는 데 일반적으로 사용됩니다.
AWS Lambda는 어떻게 작동합니까?
AWS Lambda는 이벤트 주도 모델에서 작동하며, 특정 트리거 또는 이벤트에 대한 응답으로 코드를 실행합니다.Lambda의 기능의 핵심은 다른 AWS 서비스와의 통합 및 요청 시 함수를 실행할 수 있는 능력에 있습니다. AWS Lambda가 어떻게 작동하는지 단계별로 살펴보겠습니다.
람다와 기타 핵심 AWS 서비스를 사용한 아키텍처 다이어그램의 예시. 이미지 출처: AWS.
1. AWS 람다 함수 트리거
AWS 람다 함수는 다양한 AWS 서비스나 외부 시스템에서 발생하는 이벤트에 의해 시작됩니다. 일반적인 이벤트 소스의 예시는 다음과 같습니다:
- API Gateway: 사용자가 API Gateway 엔드포인트로 HTTP 요청(예: GET 또는 POST 요청)을 보낼 때, 람다는 요청을 처리하는 함수를 실행할 수 있습니다. 예를 들어, 데이터베이스에 사용자를 생성하는 RESTful API 엔드포인트가 있을 수 있습니다.
- S3 이벤트: Lambda 함수는 S3 버킷에 객체를 업로드, 삭제 또는 수정하는 등의 작업에 응답할 수 있습니다. 예를 들어, 이미지가 S3 버킷에 업로드된 후 이미지의 크기를 조정하거나 파일 형식을 변환할 수 있습니다.
- DynamoDB 스트림: 삽입, 업데이트 또는 삭제와 같은 DynamoDB 테이블의 모든 변경 사항은 Lambda 함수를 트리거할 수 있습니다. 예를 들어, DynamoDB 테이블에 새 행이 추가될 때 분석 파이프라인을 트리거하는 것입니다.
- 사용자 정의 애플리케이션: SDK, CLI 또는 HTTP 요청을 사용하여 Lambda 함수를 직접 호출할 수 있으며, 이를 통해 외부 시스템과 통합할 수 있습니다.
2. 실행 환경
이벤트가 Lambda 함수를 트리거하면, AWS는 코드를 실행하기 위해 자동으로 실행 환경을 생성합니다. 이 환경에는 다음이 포함됩니다:
- 귀하의 함수 코드: 특정 작업을 위해 작성한 코드입니다.
- 할당된 리소스: CPU와 메모리(구성 가능)는 함수의 필요에 따라 동적으로 할당됩니다.
- 종속성: 배포 중에 지정된 외부 라이브러리나 패키지가 포함됩니다.
3. 동시성 및 확장
AWS Lambda는 여러 인스턴스를 병렬로 실행하여 자동 확장을 지원합니다. 구성 없이도 투명하게 확장을 관리합니다. 동시성 작동 방식은 다음과 같습니다:
- 만약 함수가 100개의 이벤트를 동시에 처리해야 한다면, Lambda는 필요한 만큼의 실행 환경을 생성합니다 (동시성 제한까지).
4. 다른 AWS 서비스와의 통합
AWS Lambda는 강력하고 끝-끝 솔루션을 구축하기 위해 AWS 서비스와 깊게 통합됩니다:
- 데이터베이스 상호작용: Lambda는 실행 중에 DynamoDB 또는 RDS로 데이터를 읽거나 쓸 수 있습니다.
- 메시징 서비스: Lambda는 SNS를 통해 알림을 트리거하거나 SQS 대기열로 메시지를 보내 하류 처리를 할 수 있습니다.
- 모니터링 및 로깅: CloudWatch는 Lambda 함수의 모든 로그, 지표 및 오류 세부 정보를 캡처하여 성능 문제를 모니터링하고 문제 해결할 수 있도록 합니다.
이제 첫 번째 Lambda 함수를 설정하는 방법을 시작해보겠습니다!
AWS Lambda 설정
사전 준비조건
- AWS 계정:활성화된 AWS 계정이 있는지 확인하세요.여기에서 등록하세요.
- IAM 사용자 설정:AWS 람다에 대한 권한이 있는 IAM 사용자를 생성하세요. IAM 가이드를 따르세요.
개발 환경 설정
- AWS CLI 설치: AWS CLI를 다운로드하고 설치합니다. IAM 자격 증명을 사용하여 구성합니다.
- Python이나 Node.js 설정: 원하는 런타임에 따라 Python 또는 Node.js를 설치합니다. AWS Lambda는 여러 런타임을 지원합니다. 이 튜토리얼에서는 Python 런타임을 사용할 것입니다.
단계 1: AWS Lambda 콘솔에 액세스
- AWS Management Console에 로그인합니다.
- 람다 서비스로 이동합니다.
AWS 콘솔 내비게이션 대시보드
네비게이션 메뉴에서 람다를 클릭합니다. 대시보드를 확인하려면
AWS 콘솔 내 람다 대시보드
단계 2: 새 함수 생성
- 클릭 함수 생성.
- “처음부터 작성” 선택.
- 함수의 이름을 제공하세요.
- 런타임을 선택하세요 (예: Python 3.11).
- 버튼을 클릭하십시오.함수 생성 버튼을 클릭하십시오.
AWS Lambda 함수를 새로 만드십시오.
몇 초가 걸릴 것입니다. 함수가 생성되면 상단에 성공 메시지가 표시됩니다.
단계 3: 함수 코드 작성
간단한 코드 편집을 위한 AWS Lambda 브라우저 IDE입니다.
단계 4: Lambda 함수 테스트
이 시점에서이 기능은 단순히 문자열을 반환합니다. “람다에서 안녕하세요!”.
로직이나 종속성, 아무것도 없습니다.
lambda_handler()
라는 함수를 포함하는 lambda_function.py
라는 Python 스크립트가 있습니다.
이제 단순히 테스트 버튼을 클릭하여 테스트할 수 있습니다.
브라우저에서 AWS 람다 함수를 테스트하세요.
입력이 없으므로 “이벤트 JSON”을 제거할 수 있습니다. 이벤트 이름을 지정하고 Invoke 버튼을 클릭하세요.
AWS 람다 함수의 성공적인 테스트입니다.
함수가 성공적으로 실행되었고 메시지가 반환되었습니다.
야호! 우리는 AWS Lambda를 사용하여 서버리스 함수를 배포했습니다. 현재로서는 큰 기능이 없지만, 작동 중입니다. 이 함수를 호출할 때마다 간단한 문자열을 반환합니다.
이벤트로 Lambda 트리거하기
앞서 언급했듯이, AWS Lambda 아키텍처는 다양한 AWS 서비스의 특정 이벤트에 응답하여 함수를 트리거할 수 있게 하여 워크플로 자동화 및 시스템 통합을 위한 다재다능한 도구입니다.
S3 버킷에 파일 업로드, DynamoDB 테이블의 업데이트, API Gateway를 통한 API 호출과 같은 이벤트는 Lambda 함수를 호출할 수 있어 실시간 처리 및 확장 가능한 실행을 가능하게 합니다.
1. S3 트리거 설정하기
- S3 콘솔로 이동합니다.
- S3 버킷을 선택합니다.
- 속성에서 객체를 생성할 때 Lambda 함수를 트리거하도록 이벤트 알림을 추가합니다.
AWS S3 버킷에서 이벤트 알림을 생성합니다.
S3에서 트리거할 Lambda 함수를 선택합니다.
예시 사용 사례:
-
- S3에 업로드된 이미지를 자동으로 크기 조정합니다.
- 비디오를 여러 해상도 또는 형식으로 변환하여 스트리밍합니다.
- 업로드할 때 파일 형식, 크기 또는 메타데이터를 확인합니다.
- AI를 사용하여 업로드된 문서에서 텍스트를 추출합니다(예: Amazon Textract를 통해).
2. API Gateway 통합
- API Gateway 서비스로 이동합니다.
AWS 콘솔의 API Gateway 서비스 대시보드.
- 새 REST API를 생성합니다.
API Gateway를 통해 새 REST API를 생성합니다.
- 메서드(예: POST)를 구성하여 Lambda 함수를 트리거합니다.
예제 사용 사례:
-
- 실시간 응답을 위한 서버리스 API를 구축합니다.
- Lambda 함수를 트리거하여 사용자 데이터를 데이터베이스에 생성하고 저장합니다.
- POST 요청을 처리하여 고객 주문을 실시간으로 처리하고 검증합니다.
- Lambda 함수를 트리거하여 데이터베이스 또는 API에서 데이터를 쿼리하고 반환합니다.
AWS Lambda 배포 및 모니터링
AWS Lambda 함수를 배포하는 것은 간단하며, 수동 배포를 위한 AWS 관리 콘솔이나 자동 배포를 위한 AWS CLI와 같이 필요에 따라 다양한 방법으로 수행할 수 있습니다.
1. AWS 콘솔을 사용한 수동 배포
AWS 관리 콘솔은 Lambda 함수를 배포하기 위한 직관적인 웹 인터페이스를 제공합니다. 이 방법은 소규모 프로젝트나 빠른 변경에 적합합니다. 콘솔을 사용하여 Lambda 함수를 배포하는 방법은 다음과 같습니다:
- 함수 생성 또는 편집:
- 업로드에서 .zip 파일 또는 컨테이너 이미지를 선택합니다.
- 소규모 개발의 경우 통합 코드 편집기에서 직접 함수 코드를 편집할 수 있습니다.
- 함수 구성:
- 사용 사례에 따라 환경 변수, 메모리 할당 및 시간 제한을 정의합니다.
- AWS IAM 역할을 사용하여 함수가 다른 AWS 서비스와 상호작용할 수 있도록 필요한 권한을 추가합니다.
- 변경 사항 배포:
- 배포를 클릭하여 변경 사항을 저장하고 활성화합니다.
- 테스트 기능을 사용하여 함수를 수동으로 호출하고 예상대로 작동하는지 확인합니다.
2. AWS CLI를 사용한 자동 배포
AWS CLI는 자동화나 빈번한 업데이트를 위해 람다 함수를 배포하고 업데이트하는 효율적인 방법입니다. 특히 대규모 프로젝트나 CI/CD 파이프라인에서 일어나는 수동 오류를 줄이고 일관성을 유지합니다.
단계 1 – 배포 패키지 준비
코드와 종속성을 .zip 파일로 패키징합니다. 예를 들어:
zip -r my-deployment-package.zip .
단계 2 – CLI를 사용하여 함수 배포
update-function-code
명령을 사용하여 새 코드를 AWS Lambda에 업로드합니다:
aws lambda update-function-code \ --function-name MyFunction \ --zip-file fileb://my-deployment-package.zip
–function-name MyFunction \
–zip-file fileb://my-deployment-package.zip
aws lambda get-function --function-name MyFunction
단계 3 – 배포 확인
배포 후 함수의 상태를 확인합니다:
이 명령은 함수의 구성을 검색하고 배포를 확인합니다.
CloudWatch로 Lambda 모니터링
모니터링은 Lambda 함수가 효율적으로 실행되고, 오류를 원활하게 처리하며, 성능 기대치를 충족하는 데 필수적입니다. AWS Lambda는 Amazon CloudWatch와 통합되어 모니터링 및 로깅 기능을 제공합니다.
- Amazon CloudWatch는 Lambda 함수에 대한 주요 메트릭을 자동으로 수집하고 표시합니다. 이러한 메트릭은 함수의 성능을 분석하고 문제를 해결하는 데 도움이 됩니다.
- 모니터링할 메트릭:
- 호출 수: 함수가 호출된 횟수를 추적합니다. 이를 통해 트래픽 패턴과 사용 경향을 이해하는 데 도움이 됩니다.
- 오류: 함수 실행 중 발생한 오류의 수를 표시합니다. 이를 통해 실패율을 식별하고 문제를 디버그하는 데 사용하세요.
소요 시간: 함수 실행에 걸린 시간을 측정합니다. 이는 성능 최적화 및 비용 관리를 위해 매우 중요합니다.
- 쓰로틀: 동시성 제한에 도달하여 제한된 호출 수를 보여줍니다.
- 메트릭 액세스:
- CloudWatch 메트릭 콘솔로 이동하십시오.
선택 람다 네임스페이스 목록에서.
상세 메트릭을 보기 위해 모니터링할 함수를 선택하십시오.
AWS 람다 모범 사례
첫 번째 람다 함수를 배포했으니, 향후 보다 복잡한 프로젝트를 위해 몇 가지 모범 사례를 아는 것이 유용합니다. 이 섹션에서는 염두에 두어야 할 몇 가지 모범 사례를 제공합니다.
1. 함수 콜드 스타트를 최적화하십시오.
- 람다 함수가 유휴 상태에서 호출된 후에 호출되는 경우, AWS가 실행 환경을 프로비저닝하여 약간의 대기 시간이 발생하는 차가운 시작이 발생합니다. AWS는 이 오버헤드를 최소화하지만 차가운 시작 시간을 줄이기 위해 취할 수 있는 조치가 있습니다:
- 작은 배포 패키지 사용
- 필요한 의존성만 포함하여 배포 패키지를 가볍게 유지하세요.
AWS Lambda Layers와 같은 도구를 사용하여 공통 라이브러리(예: AWS SDK)를 개별 패키지에 포함시키지 않고 여러 함수 간에 공유하세요.
가능한 경우 코드를 압축하고 최소화하세요, 특히 JavaScript 또는 Python 기반 함수에 대해.
함수에서 무겁게 초기화하는 것을 피하세요.
리소스 집약적 초기화(예: 데이터베이스 연결, API 클라이언트 또는 제3자 라이브러리)를 함수 핸들러 외부로 이동합니다. 이렇게 하면 코드가 환경당 한 번만 실행되고 호출 사이에 재사용됩니다.
Provisioned Concurrency 활용
중요한, 지연에 민감한 함수에 대해 Provisioned Concurrency를 사용하여 실행 환경을 요청을 처리할 준비가 되어 있도록 유지합니다. 추가 비용이 발생하지만 높은 우선순위 작업에 대한 낮은 대기 시간을 보장합니다.
2. 함수를 상태를 가지지 않도록 유지합니다
상태를 가지지 않음은 서버리스 아키텍처의 기본 원칙으로, 응용 프로그램이 원활하게 확장되도록 보장합니다:
인메모리 데이터에 의존하지 않습니다
람다 함수는 순간적이며, 실행 환경이 일시적이며 호출 사이에 지속되지 않을 수 있습니다. 인메모리 변수에 의존하는 대신 상태 정보를 DynamoDB, S3 또는 Redis와 같은 외부 시스템에 저장합니다.
아이덴포턴시 활성화
중복 이벤트를 우아하게 처리하도록 함수 설계하기. 요청에 대해 고유 식별자를 사용하고, 동일한 이벤트가 여러 번 처리되지 않도록 로그나 데이터베이스를 확인하십시오.
3. 환경 변수 사용하기
- 환경 변수는 Lambda 함수를 구성하는 안전하고 편리한 방법입니다:
- 민감한 정보 저장하기
API 키, 데이터베이스 연결 문자열 및 기타 비밀을 환경 변수로 저장하세요. AWS Lambda는 이러한 변수를 저장할 때 암호화하고 실행 중에 복호화합니다.
추가 보안을 위해 AWS Secrets Manager 또는 Systems Manager Parameter Store를 사용하여 비밀을 동적으로 관리하세요.
구성 관리 단순화하기
로그 수준, 지역 설정 또는 서드파티 서비스 URL과 같은 구성 관리를 위해 환경 변수를 사용하십시오. 이렇게 하면 하드코딩된 값이 필요 없어져, 개발, 스테이징, 운영 등 다양한 환경에서 함수의 이동성이 높아집니다.
결론