Lambda 작동 방식 - AWS Lambda

Lambda 작동 방식

Lambda 함수는 Lambda 애플리케이션을 빌드하는 데 사용하는 기본 구성 요소입니다. 함수를 작성하려면 Lambda 프로그래밍 모델을 구성하는 핵심 개념과 구성 요소를 이해해야 합니다. 이 섹션에서는 Lambda를 사용하여 서버리스 애플리케이션 구축을 시작하려는 경우 알아야 할 기본적인 요소를 안내합니다.

  • Lambda 함수 및 함수 핸들러 - Lambda 함수는 이벤트에 대한 응답으로 실행되는 작은 코드 블록입니다. 함수는 애플리케이션을 빌드하는 데 사용하는 기본 구성 요소입니다. 함수 핸들러는 Lambda 함수 코드가 처리하는 이벤트 객체의 진입점입니다.

  • Lambda 실행 환경 및 런타임 - Lambda 실행 환경은 함수를 실행하는 데 필요한 리소스를 관리합니다. 런타임은 함수가 실행되는 언어별 환경입니다.

  • 이벤트 및 트리거 - 특정 이벤트에 대한 응답으로 다른 AWS 서비스 함수를 간접적으로 호출하는 방법입니다.

  • Lambda 권한 및 역할 - 함수에 누가 액세스할 수 있는지 제어하고, 어떤 다른 AWS 서비스 함수가 상호 작용할 수 있는지 제어하는 방법.

작은 정보

서버리스 개발을 보다 일반적으로 이해하는 것부터 시작하려면 AWS 서버리스 개발자 안내서기존 개발과 서버리스 개발의 차이점 이해를 참조하세요.

Lambda 함수 및 함수 핸들러

Lambda에서 함수는 애플리케이션을 생성하는 데 사용하는 기본 구성 요소입니다. Lambda 함수는 사용자가 웹 사이트에서 버튼을 클릭하거나 Amazon Simple Storage Service(Amazon S3) 버킷에 파일을 업로드하는 것과 같은 이벤트에 대한 응답으로 실행되는 코드입니다. 함수는 다음 속성을 갖는 일종의 독립 프로그램으로 생각할 수 있습니다. Lambda 함수 핸들러는 이벤트를 처리하는 함수 코드의 메서드입니다. 이벤트에 대한 응답으로 함수가 실행되면 Lambda는 함수 핸들러를 실행합니다. 함수를 실행한 이벤트에 대한 데이터는 핸들러에 직접 전달됩니다. Lambda 함수의 코드에는 둘 이상의 메서드나 함수를 포함할 수 있지만 Lambda 함수에는 핸들러가 하나만 있을 수 있습니다.

Lambda 함수를 생성하려면 함수 코드와 해당 종속성을 배포 패키지로 묶으세요. Lambda는 .zip 파일 아카이브컨테이너 이미지의 두 가지 배포 패키지를 지원합니다.

  • 함수에는 하나의 특정 작업 또는 목적이 있음

  • 특정 이벤트에 대한 응답으로 필요할 때만 실행됨

  • 완료되면 자동으로 실행을 중지함

Lambda 실행 환경 및 런타임

Lambda 함수는 Lambda가 관리하는 안전하고 격리된 실행 환경 내에서 실행됩니다. 이 실행 환경은 함수를 실행하는 데 필요한 프로세스와 리소스를 관리합니다. 함수가 처음 간접적으로 호출되면 Lambda는 함수가 실행될 새 실행 환경을 생성합니다. 함수 실행이 완료된 후에도 Lambda는 실행 환경을 곧바로 중지하지 않습니다. 함수가 다시 간접적으로 호출되면 Lambda는 기존 실행 환경을 재사용할 수 있습니다.

Lambda 실행 환경에는 Lambda와 함수 간에 이벤트 정보 및 응답을 릴레이하는 언어별 환경인 런타임도 포함되어 있습니다. Lambda는 가장 인기 있는 프로그래밍 언어에 대한 여러 관리형 런타임을 제공하거나 직접 생성할 수 있습니다.

관리형 런타임의 경우 Lambda는 런타임을 사용하는 함수에 보안 업데이트와 패치를 자동으로 적용합니다.

이벤트 및 트리거

Lambda 콘솔, AWS CLI 또는 AWS 소프트웨어 개발 키트(SDK) 중 하나를 사용하여 Lambda 함수를 직접 호출할 수도 있습니다. 프로덕션 애플리케이션에서는 특정 이벤트에 대한 응답으로 다른 AWS 서비스에서 함수를 간접적으로 호출하는 경우가 더 일반적입니다. 예를 들어 Amazon DynamoDB 테이블에 항목이 추가될 때마다 함수가 실행되도록 할 수 있습니다.

함수가 이벤트에 응답하도록 하려면 트리거를 설정합니다. 트리거는 함수를 이벤트 소스에 연결하며, 함수에는 여러 가지 트리거가 존재할 수 있습니다. 이벤트가 발생하면 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 서비스가 함수에 액세스하는 데 필요한 권한

다음 섹션에서는 이러한 두 가지 권한 유형을 모두 설명하고 최소 권한을 적용하는 모범 사례를 설명합니다.

함수가 다른 AWS 리소스에 액세스할 수 있는 권한

Lambda 함수는 다른 AWS 리소스에 액세스하고 해당 리소스에 대한 작업을 수행해야 하는 경우가 많습니다. 예를 들어 함수는 DynamoDB 테이블에서 항목을 읽거나, S3 버킷에 객체를 저장하거나, Amazon SQS 대기열에 쓰기 작업을 수행할 수 있습니다. 이러한 작업을 수행하는 데 필요한 권한을 함수에 부여하기 위해 실행 역할을 사용합니다.

Lambda 실행 역할은 정책에 정의된 특정 권한과 연결된 계정에서 생성하는 자격 증명인 AWS Identity and Access Management(IAM) 역할의 특수한 종류입니다.

모든 Lambda 함수에는 실행 역할이 있어야 하며, 한 역할을 둘 이상의 함수에서 사용할 수 있습니다. 함수가 간접적으로 호출되면 Lambda는 함수의 실행 역할을 수임하고 역할의 정책에 정의된 작업을 수행할 수 있는 권한이 부여됩니다.

Lambda 콘솔에서 함수를 생성하면 Lambda는 자동으로 함수에 대한 실행 역할을 생성합니다. 역할의 정책은 Amazon CloudWatch Logs에 로그 출력을 쓸 수 있는 기본 권한을 함수에 부여합니다. 함수에 다른 AWS 리소스에 대한 작업을 수행할 수 있는 권한을 부여하려면 역할을 편집하여 추가 권한을 추가해야 합니다. 권한을 추가하는 가장 쉬운 방법은 AWS 관리형 정책을 사용하는 것입니다. 관리형 정책은 AWS에서 생성 및 관리하며 많은 일반적인 사용 사례에 대한 권한을 제공합니다. 예를 들어 함수가 DynamoDB 테이블에서 CRUD 작업을 수행하는 경우 AmazonDynamoDBFullAccess 정책을 역할에 추가할 수 있습니다.

다른 사용자 및 리소스가 함수에 액세스할 수 있는 권한

다른 AWS 서비스에 Lambda 함수에 액세스할 수 있는 권한을 부여하려면 리소스 기반 정책을 사용합니다. IAM에서 리소스 기반 정책은 리소스(이 경우 Lambda 함수)에 연결되어 리소스에 액세스할 수 있는 사용자와 수행할 수 있는 작업을 정의합니다.

다른 AWS 서비스에서 트리거를 통해 함수를 간접적으로 호출하려면 함수의 리소스 기반 정책이 해당 서비스에 lambda:InvokeFunction 작업을 사용할 수 있는 권한을 부여해야 합니다. 콘솔을 사용하여 트리거를 생성하면 Lambda가 자동으로 이 권한을 추가합니다.

다른 AWS 사용자에게 함수에 액세스할 수 있는 권한을 부여하려면 함수의 리소스 기반 정책에서 다른 AWS 서비스 또는 리소스와 정확히 동일한 방식으로 이를 정의할 수 있습니다. 사용자와 연결된 자격 증명 기반 정책을 사용할 수도 있습니다.

Lambda 권한 모범 사례

IAM 정책을 사용하여 권한을 설정하는 경우 보안 모범 사례는 작업을 수행하는 데 필요한 권한만 부여하는 것입니다. 이를 최소 권한 원칙이라고 합니다. 함수에 대한 권한 부여를 시작하려면 AWS 관리형 정책을 사용하도록 선택할 수 있습니다. 관리형 정책은 작업을 수행할 수 있는 권한을 부여하는 가장 빠르고 쉬운 방법일 수 있지만 필요하지 않은 다른 권한도 포함할 수 있습니다. 초기 개발에서 테스트 및 프로덕션으로 전환함에 따라 자체 고객 관리형 정책을 정의하여 필요한 권한으로만 권한을 줄이는 것이 좋습니다.

리소스 기반 정책을 사용하여 함수에 액세스할 수 있는 권한을 부여할 때도 동일한 원칙이 적용됩니다. 예를 들어 Amazon S3에 함수를 간접적으로 호출할 수 있는 권한을 부여하려면 S3 서비스에 블랭킷 권한을 부여하는 대신 개별 버킷 또는 특정 AWS 계정의 버킷에 대한 액세스를 제한하는 것이 모범 사례입니다.