AWS에서 제공하는 서버리스 컴퓨팅 서비스이다.
코드를 함수로 업로드만 하면 Lambda가 알아서 관리하여 사용될 수 있도록 한다.
이벤트 소스에서 호출을 트리거하면 lambda에서 코드를 가져와서 실행하는 방식이다.

lambda 사용

간단한 문제를 간단한 솔루션으로 해결하자는게 모토? 같다.
간단하게 코드를 작성하고 리소스 모델을 선택하여 유연하게 다른 서비스들과 통합하여 사용한다.
CloudWatch로 로그 분석과 X-Ray를 통한 분산 추척을 같이 활용한다.

lambda 함수의 구조

lambda 함수는 Handler 함수와 이벤트 객체, 컨텍스트 객체로 구성된다.

public MyOutput handlerName(MyEvent event, Context context) {}

Handler 함수:
Lambda 함수가 호출되면 Handler에서 코드 실행이 시작된다.
코드 방식도 main 보다는 handler와 같이 이루어진다.
Handler는 lambda 함수를 생성할 때 지정한다.

이벤트 객체:
서비스에서 만들어져서 전달되는 값이다.
event data를 Handler로 전달하는데 사용된다.
함수가 로직을 제어할 때 필요한 모든 데이터와 메타데이터를 포함한다.

컨텍스트 객체:
컨텍스트 객체를 사용해서 함수 코드가 Lambda 실행 환경과 상호작용할 수 있다.
런타임 정보를 제공하는데 AWS RequestId, 함수 제한 시간, 로깅 등을 포함한다.

실행 모델

push event 모델:
이벤트 호출 유형으로 이벤트 소스가 이벤트를 게시할 때 직접 Lambda 함수를 호출한다.
S3, SNS Cognito Echo 및 사용자 애플리케이션에 적용되는 방식이다.

pull event 모델:
Lambda가 이벤트를 감지하면 이벤스 소스를 폴링하고 이벤트 소스가 Lambda를 호출한다.
Kinesis 스트림, DynamoDB 스트림 같은 스트리밍 이벤트 소스와 쓰일 때 적용된다.

직접 호출:
AWS Lambda가 함수를 동기식으로 실행하고 호출 애플리케이션에 응답을 즉시 반환한다.
사용자 지정 애플리케이션에서 사용할 수 있다.

권한

lambda와 관련된 권한은 두 가지 유형이 있다.
실행권한 - Lambda 함수가 다른 AWS 리소스에 액세스하는데 필요한 권한.
호출권한 - 이벤트 소스가 Lambda 함수와 통신하는데 필요한 권한.

AWS에서는 서비스 간에도 접근을 위해 권한이 필요하고, lambda에서 꼭 권한을 부여해주어야 한다.

실행

설정한 제한시간(기본 3초, 최대 15분)이 넘어가면 종료되어 그 이상가는 프로그램을 사용할 수 없다.
정기적으로 Lambda 함수를 실행하도록 지정할 수 있다.

제한사항

인바운드 네트워크 연결은 차단된다.
TCP/IP 소켓만 지원한다.
ptrace(디버깅) 시스템 호출은 제한된다.
TCP port 25 트래픽은 스팸 방지로 제한된다.

버전 관리 및 별칭

버전은 코드에 구성을 더한 사본으로 변경할 수 없다.
별칭은 버전에 대한 포인터로 변경할 수 있다. 각 버전/별칭에 자체 ARN이 지정된다.

요금

아래 항목들로 요금이 청구된다.

  • 모든 함수에 걸친 총 요청 수.
  • 코드가 실행되는 시간.
  • Lambda 함수에 할당하는 메모리 양.

Step Function

AWS Lambda의 경우 제한시간(15분)내에 동작이 완료되어야 한다.
제한시간을 초과할만한 상황(동영상 전송/변환 등)이 있을 수 있고 이를 여러 개의 함수의 수행으로 처리할 수 있다.
여러 함수를 수행하는데 워크플로를 정의하고 단계별로 수행할 수 있도록 정의한다. JSON으로 정의하고 시각화로 확인할 수 있다.
콘솔에서 시각화를 확인하고 모니터링도 가능하다.

사용하는 경우:
실패한 작업을 다시 시도하려는 경우
연속된 작업을 하려는 경우
try/catch/finally를 실행하려는 경우
데이터 기반 작업을 선택하려는 경우
작업을 병렬로 실행하려는 경우

장점:
빠르게 애플리케이션을 빌드할 수 있는 생산성을 갖는다.
안정적으로 확장/복구할 수 있다.
단계를 쉽게 편집해서 애플리케이션을 쉽게 수정할 수 있다.
다른 서비스와 연동하여 사용할 수 있다.

상태 기계

출력을 결정하기 위해 이전 조건에 의존하는 작동 조건을 가진 객체이다.
상태 기계의 입력을 함수로 전달하여 Lambda 함수를 호출한다.

Amazon State Language(json)으로 작업을 수행할 수 있는 상태(작업 상태), 전환할 상태를 결정하는 상태(선택 상태), 실행을 중지하는 상태(실패 상태)를 명시해 작업을 수행한다.