개념
Lambda는 함수의 인스턴스를 실행하여 이벤트를 처리한다. Lambda API를 사용하여 함수를 직접 호출하거나, 함수를 호출하도록 AWS 서비스 또는 리소스를 구성할 수 있다.
1. 함수
함수는 Lambda에서 코드를 실행하기 위해 호출할 수 있는 리소스이다. 함수에는 사용자가 함수에 전달하거나 다른 AWS 서비스가 함수에 보내는 이벤트를 처리하는 코드가 있다.
2. 트리거
트리거는 Lambda 함수를 호출하는 리소스 또는 구성이다. 트리거에는 함수 및 이벤트 소스 매핑을 호출하도록 구성할 수 있는 AWS 서비스가 포함된다. 이벤트 소스 매핑은 스트림 또는 대기열에서 항목을 읽고 함수를 호출하는 Lambda의 리소스이다.
3. 이벤트
이벤트는 처리할 Lambda 함수에 대한 데이터가 포함된 JSON 형식 문서이다. 런타임은 이벤트를 객체로 변환한 후 함수 코드에 전달한다. 함수를 호출할 때, 이벤트의 구조와 내용을 결정한다.
예 사용자 지정 이벤트 - 날씨 데이터
AWS 서비스가 함수를 호출할 때 서비스가 이벤트의 형태를 정의한다.
예 서비스 이벤트 - Amazon SNS 알림
{
"Records": [
{
"Sns": {
"Timestamp": "2019-01-02T12:45:07.000Z",
"Signature": "tcc6faL2yUC6dgZdmrwh1Y4cGa/ebXEkAi6RibDsvpi+tE/1+82j...65r==",
"MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e",
"Message": "Hello from SNS!",
...
4. 실행 환경
실행 환경은 Lambda 함수를 위한 안전하고 격리된 런타임 환경을 제공한다. 실행 환경은 함수를 실행하는 데 필요한 프로세스와 리소스를 관리한다. 실행 환경은 함수 및 함수와 관련된 모든 익스텐션에 대한 수명 주기 지원을 제공한다.
5. 명령 세트 아키텍처
명령 세트 아키텍처에 따라 Lambda가 함수를 실행하는 데 사용하는 컴퓨터 프로세서의 유형이 결정된다. Lambda는 다음과 같은 명령 세트 아키텍처를 선택할 수 있는 옵션을 제공한다.
-
arm64 - AWS Graviton2 프로세서에 사용되는 64비트 ARM 아키텍처이다.
-
x86_64 - x86 기반 프로세서에 사용되는 64비트 x86 아키텍처이다.
6. 배포 패키지
배포 패키지를 사용하여 Lambda 함수 코드를 배포한다. Lambda는 다음과 같은 두 가지 유형의 배포 패키지를 지원한다.
-
함수 코드 및 종속 항목이 포함된 .zip 파일 아카이브. Lambda는 함수를 위한 운영 체제 및 런타임을 제공한다.
-
Open Container Initiative(OCI) 사양과 호환되는 컨테이너 이미지. 함수 코드와 종속 항목을 이미지에 추가한다. 운영 체제와 Lambda 런타임도 포함해야 한다.
7. 런타임
런타임은 실행 환경에서 실행되는 언어별 환경을 제공한다. 런타임은 Lambda와 함수 간의 호출 이벤트, 컨텍스트 정보 및 응답을 전달한다. Lambda에서 제공하는 런타임을 사용하거나 나만의 런타임을 빌드할 수 있다. 코드를 .zip 파일 아카이브로 패키징하는 경우 프로그래밍 언어와 일치하는 런타임을 사용하도록 함수를 구성해야 한다. 컨테이너 이미지의 경우 이미지를 빌드할 때 런타임을 포함한다.
8. Layer
Lambda 계층은 추가 코드 또는 기타 콘텐츠를 포함할 수 있는 .zip 파일 아카이브이다. 계층에는 라이브러리, 사용자 정의 런타임, 데이터 또는 구성 파일이 포함될 수 있다.
계층은 Lambda 함수와 함께 사용할 수 있는 라이브러리 및 기타 종속성을 패키징하는 편리한 방법을 제공한다. 계층을 사용하면 업로드된 배포 아카이브의 크기가 줄어들고 코드를 더 빠르게 배포할 수 있다. 계층은 또한 코드 공유 및 책임 분리를 촉진하므로 비즈니스 로직 작성시 더 빠르게 반복할 수 있다.
함수당 최대 5개의 계층을 포함할 수 있다. 계층은 표준 Lambda 배포 크기 할당량에 포함된다. 함수에 계층을 포함하면 실행 환경의 /opt
디렉터리로 콘텐츠가 추출된다.
기본적으로 생성하는 계층은 AWS 계정에 비공개이다. 계층을 다른 계정과 공유하거나 계층을 공개하도록 선택할 수 있다. 함수가 다른 계정에서 발행한 계층을 사용하는 경우 함수가 계층 버전을 삭제한 후 또는 계층에 대한 액세스 권한이 취소된 후에도 해당 계층 버전을 계속 사용할 수 있다. 그러나 삭제된 계층 버전을 사용하여 새 함수를 작성하거나 함수를 업데이트할 수는 없다.
컨테이너 이미지로 배포된 함수는 계층을 사용하지 않는다. 대신 이미지를 빌드할 때 기본 설정 런타임, 라이브러리 및 기타 종속 항목을 컨테이너 이미지로 패키징한다.
9. 확장
Lambda 익스텐션을 사용하면 함수를 보강할 수 있다. 예를 들어 익스텐션을 사용하여 원하는 모니터링, 관찰, 보안 및 거버넌스 도구와 함수를 통합할 수 있다. AWS Lambda 파트너가 제공하는 다양한 도구 중에서 선택하거나 자체적인 Lambda 익스텐션을 만들 수 있다.
내부 익스텐션은 런타임 프로세스에서 실행되며 런타임과 동일한 수명 주기를 공유한다. 외부 익스텐션은 실행 환경에서 별도의 프로세스로 실행된다. 외부 익스텐션은 함수가 호출되기 전에 초기화되고 함수의 런타임과 동시에 실행되며 함수 호출이 완료된 후에도 계속 실행된다.
10. 동시성
동시성은 특정 시각에 함수가 제공하는 요청의 수이다. 함수가 호출되면 이벤트를 처리하도록 Lambda가 인스턴스를 프로비저닝한다. 함수 코드가 실행을 마치면, 다른 요청을 처리할 수 있다. 요청이 처리되는 동안 함수가 다시 호출되면, 다른 인스턴스가 프로비저닝되어 함수의 동시성이 증가한다.
동시성에는 AWS 리전 수준의 할당량이 적용된다. 동시성을 제한하거나 특정 수준의 동시성에 도달할 수 있도록 개별 함수를 구성할 수 있다.
11. Qualifier
함수를 호출하거나 조회할 때 버전 또는 별칭을 지정하는 한정자를 포함할 수 있다. 버전은 숫자 한정자가 있는 함수 코드 및 구성의 변경 불가능한 스냅샷이다. 예: my-function:1
. 별칭은 다른 버전에 매핑하거나 두 버전 간에 트래픽을 분할하도록 업데이트할 수 있는 버전에 대한 포인터이다. 예: my-function:BLUE
. 버전 및 별칭을 함께 사용하여 클라이언트가 함수를 호출할 수 있는 안정적인 인터페이스를 제공할 수 있다.
12. 대상 주소
대상은 Lambda가 동기식 호출의 이벤트를 전송할 수 있는 AWS 리소스이다. 사용자는 처리에 실패한 이벤트의 대상을 구성할 수 있다. 일부 서비스는 성공적으로 처리된 이벤트의 대상도 지원한다.