Lambda 작동 방식
Lambda 작동 방식
Lambda 함수는 Lambda 애플리케이션을 구축하는 기본 구성 요소예요. 함수를 작성하려면 Lambda 프로그래밍 모델을 구성하는 핵심 개념과 구성 요소를 이해하는 것이 필수적이에요. 이 섹션은 Lambda로 서버리스 애플리케이션 구축을 시작하기 위해 알아야 할 기본 요소를 안내해요.
주제
- Lambda 함수 및 함수 핸들러 - Lambda 함수는 이벤트에 응답하여 실행되는 작은 코드 블록이에요. 함수는 애플리케이션 구축에 사용하는 기본 구성 요소예요. 함수 핸들러는 Lambda 함수 코드가 처리하는 이벤트 객체의 진입점이에요.
- Lambda 실행 환경 및 런타임 - Lambda 실행 환경은 함수 실행에 필요한 리소스를 관리해요. 런타임은 함수가 실행되는 언어별 환경이에요.
- 이벤트 및 트리거 - 다른 AWS 서비스가 특정 이벤트에 응답하여 함수를 호출할 수 있어요.
- Lambda 권한 및 역할 - 누가 함수에 접근할 수 있고 함수가 상호 작용할 수 있는 다른 AWS 서비스를 제어해요.
팁(Tip) 서버리스 개발을 좀 더 일반적으로 이해하는 것부터 시작하려면 AWS Serverless 개발자 안내서의 전통적인 개발과 서버리스 개발의 차이 이해를 참고하세요.
본문
Lambda 함수 및 함수 핸들러
Lambda에서 함수(functions) 는 애플리케이션을 만드는 데 사용하는 기본 구성 요소예요. Lambda 함수는 사용자가 웹사이트의 버튼을 선택하거나 파일이 Amazon Simple Storage Service(Amazon S3) 버킷에 업로드되는 것 같은 이벤트에 응답하여 실행되는 코드 조각이에요. 내구성 함수(durable functions)를 사용하면 코드가 단계 사이에서 실행을 일시 중지하고 상태를 자동으로 유지할 수 있어 주문 처리나 콘텐츠 조정 같은 장기 실행 워크플로에 이상적이에요. 함수를 다음과 같은 속성을 가진 일종의 자체 포함 프로그램으로 생각할 수 있어요.
- 함수는 특정 작업이나 목적이 하나 있어요
- 특정 이벤트에 응답하여 필요할 때만 실행돼요
- 완료되면 자동으로 실행을 중지해요
Lambda 함수 핸들러(function handler) 는 함수 코드에서 이벤트를 처리하는 메서드예요. 함수가 이벤트에 응답하여 실행될 때 Lambda는 함수 핸들러를 실행해요. 함수 실행을 유발한 이벤트에 대한 데이터는 핸들러로 직접 전달돼요. Lambda 함수의 코드에는 둘 이상의 메서드나 함수가 포함될 수 있지만, Lambda 함수는 핸들러를 하나만 가질 수 있어요.
Lambda 함수를 만들려면 함수 코드와 종속성을 배포 패키지로 묶어요. Lambda는 .zip 파일 아카이브와 컨테이너 이미지의 두 가지 유형의 배포 패키지를 지원해요.
Lambda 실행 환경 및 런타임
Lambda 함수는 Lambda가 관리하는 안전하고 격리된 실행 환경 안에서 실행돼요. 내구성 함수의 경우 실행 환경에는 상태 관리와 워크플로 조정을 위한 추가 구성 요소가 포함돼요. 실행 환경은 함수 실행에 필요한 프로세스와 리소스를 관리해요. 함수가 처음 호출되면 Lambda는 함수가 실행될 새 실행 환경을 만들어요. 함수가 실행을 마친 후에도 Lambda는 실행 환경을 바로 중지하지 않아요. 함수가 다시 호출되면 Lambda는 기존 실행 환경을 재사용할 수 있어요.
Lambda 실행 환경에는 Lambda와 함수 사이에서 이벤트 정보와 응답을 전달하는 언어별 환경인 런타임 도 포함돼 있어요. Lambda는 가장 인기 있는 프로그래밍 언어를 위한 여러 관리형 런타임을 제공하며, 직접 만들 수도 있어요.
관리형 런타임의 경우 Lambda는 런타임을 사용하는 함수에 보안 업데이트와 패치를 자동으로 적용해요.
이벤트 및 트리거
Lambda 콘솔, AWS CLI, 또는 AWS Software Development Kits(SDKs) 중 하나를 사용해서 Lambda 함수를 직접 호출할 수도 있어요. 프로덕션 애플리케이션에서는 다른 AWS 서비스가 특정 이벤트에 응답하여 함수를 호출하는 것이 더 일반적이에요. 예를 들어 Amazon DynamoDB 테이블에 항목이 추가될 때마다 함수를 실행하려 할 수 있어요.
함수가 이벤트에 응답하게 하려면 트리거(trigger) 를 설정해요. 트리거는 함수를 이벤트 소스에 연결하고, 함수는 여러 트리거를 가질 수 있어요. 이벤트가 발생하면 Lambda는 이벤트 데이터를 JSON 문서로 받아 코드에서 처리할 수 있는 객체로 변환해요. 다음 JSON 형식을 이벤트로 정의하고 Lambda 런타임이 함수의 핸들러에 전달하기 전에 이 JSON을 객체로 변환할 수 있어요.
예시 사용자 지정 Lambda 이벤트
{
"Location": "SEA",
"WeatherData":{
"TemperaturesF":{
"MinTempF": 22,
"MaxTempF": 78
},
"PressuresHPa":{
"MinPressureHPa": 1015,
"MaxPressureHPa": 1027
}
}
}
Amazon Kinesis나 Amazon SQS 같은 스트림·큐 서비스는 표준 트리거 대신 이벤트 소스 매핑을 사용해요. 이벤트 소스 매핑은 새 데이터를 소스에서 폴링하고, 레코드를 함께 배치한 다음 배치된 이벤트로 함수를 호출해요. 자세한 내용은 이벤트 소스 매핑이 직접 트리거와 다른 점을 참고하세요.
트리거가 어떻게 작동하는지 이해하려면 Amazon S3 트리거 사용 튜토리얼을 완료하거나, 트리거 사용에 대한 일반 개요와 Lambda 콘솔로 트리거를 만드는 방법은 다른 서비스 통합을 참고하세요.
Lambda 권한 및 역할
Lambda에는 구성해야 하는 두 가지 주요 유형의 권한이 있어요.
- 함수가 다른 AWS 서비스에 접근하는 데 필요한 권한
- 다른 사용자와 AWS 서비스가 함수에 접근하는 데 필요한 권한
다음 섹션에서는 두 가지 권한 유형을 모두 설명하고 최소 권한(least-privilege) 적용의 모범 사례를 논의해요.
함수가 다른 AWS 리소스에 접근하기 위한 권한
Lambda 함수는 다른 AWS 리소스에 접근하고 그에 대해 작업을 수행해야 하는 경우가 많아요. 예를 들어 함수는 DynamoDB 테이블에서 항목을 읽고, S3 버킷에 객체를 저장하거나, Amazon SQS 큐에 쓸 수 있어요. 함수에 이러한 작업 수행 권한을 주려면 실행 역할을 사용해요.
Lambda 실행 역할은 특별한 종류의 AWS Identity and Access Management(IAM) 역할로, 계정에서 만드는 자격 증명이며 정책(policy) 에 정의된 특정 권한이 연결돼 있어요.
모든 Lambda 함수에는 실행 역할이 있어야 하며, 하나의 역할을 둘 이상의 함수가 사용할 수 있어요. 함수가 호출되면 Lambda는 함수의 실행 역할을 수임(assume)하고 역할 정책에 정의된 작업을 수행할 권한을 부여받아요.
Lambda 콘솔에서 함수를 만들면 Lambda가 함수의 실행 역할을 자동으로 만들어요. 역할의 정책은 함수가 Amazon CloudWatch Logs에 로그 출력을 쓸 수 있는 기본 권한을 부여해요. 함수가 다른 AWS 리소스에 대한 작업을 수행하도록 허용하려면 역할을 편집해서 추가 권한을 추가해야 해요.
권한을 추가하는 가장 쉬운 방법은 AWS 관리형 정책을 사용하는 것이에요. 관리형 정책은 AWS가 만들고 관리하며 많은 일반적인 사용 사례에 대한 권한을 제공해요. 예를 들어 함수가 DynamoDB 테이블에 대해 CRUD 작업을 수행한다면 AmazonDynamoDBFullAccess 정책을 역할에 추가할 수 있어요.
다른 사용자와 리소스가 함수에 접근하기 위한 권한
다른 AWS 서비스에 Lambda 함수 접근 권한을 부여하려면 리소스 기반 정책을 사용해요. IAM에서 리소스 기반 정책은 리소스(여기서는 Lambda 함수)에 연결되며 누가 리소스에 접근할 수 있고 어떤 작업이 허용되는지 정의해요.
다른 AWS 서비스가 트리거를 통해 함수를 호출하게 하려면 함수의 리소스 기반 정책이 해당 서비스에 lambda:InvokeFunction 작업 사용 권한을 부여해야 해요. 콘솔로 트리거를 만들면 Lambda가 이 권한을 자동으로 추가해요.
다른 AWS 사용자에게 함수 접근 권한을 부여하려면 다른 AWS 서비스·리소스와 정확히 같은 방식으로 함수의 리소스 기반 정책에 정의할 수 있어요. 사용자와 연결된 자격 증명 기반 정책(identity-based policy) 을 사용할 수도 있어요.
Lambda 권한의 모범 사례
IAM 정책으로 권한을 설정할 때 보안 모범 사례는 작업을 수행하는 데 필요한 권한만 부여하는 것이에요. 이를 최소 권한(least privilege) 의 원칙이라고 해요. 함수에 권한을 부여하기 시작할 때는 AWS 관리형 정책을 사용하기로 선택할 수 있어요. 관리형 정책은 작업 권한을 부여하는 가장 빠르고 쉬운 방법일 수 있지만 필요하지 않은 다른 권한도 포함할 수 있어요. 초기 개발부터 테스트와 프로덕션으로 진행하면서 자체 고객 관리형 정책을 정의해서 필요한 권한으로만 줄이는 것을 권장해요.
리소스 기반 정책으로 함수 접근 권한을 부여할 때도 같은 원칙이 적용돼요. 예를 들어 Amazon S3가 함수를 호출하도록 허용하려면 S3 서비스에 광범위한 권한을 주는 대신 개별 버킷이나 특정 AWS 계정의 버킷으로 접근을 제한하는 것이 모범 사례예요.
더 알아보기 (Learn more)
Lambda 함수 배포 패키지에 대한 자세한 내용은 함수 구성을 참고하세요.