AWS Lambda

강재민·2022년 11월 22일
0

AWS Lambda란 무엇입니까?

Lambda는 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있게 해주는 컴퓨팅 서비스입니다. Lambda고가용성 컴퓨팅 인프라에서 코드를 실행하고 서버와 운영 체제 유지 관리, 용량 프로비저닝 및 자동 조정, 코드 및 보안 패치 배포, 로깅 등 모든 컴퓨팅 리소스 관리를 수행합니다. Lambda를 사용하면 거의 모든 유형의 애플리케이션 또는 백엔드 서비스에 대한 코드를 실행할 수 있습니다. Lambda가 지원하는 언어 중 하나로 코드를 공급하기만 하면 됩니다.

Lambda 함수에 코드를 구성합니다. Lambda는 필요 시에만 함수를 실행하며, 일일 몇 개의 요청에서 초당 수천 개의 요청까지 자동으로 확장이 가능합니다. 사용한 컴퓨팅 시간만큼만 비용을 지불하고, 코드가 실행되지 않을 때는 요금이 부과되지 않습니다.

Lambda API를 사용하여 Lambda 함수를 호출하거나, Lambda가 다른 AWS 서비스의 이벤트에 응답하여 함수를 실행할 수 있습니다. 예를 들어, Lambda를 사용하여 다음을 수행할 수 있습니다.

Amazon Simple Storage Service(Amazon S3) 및 Amazon DynamoDB와 같은 AWS 서비스를 위한 데이터 처리 트리거를 빌드할 수 있습니다.

Amazon Kinesis에 저장된 스트리밍 데이터를 처리할 수 있습니다.

AWS 규모, 성능 및 보안으로 작동하는 고유한 백엔드를 만듭니다.


Lambda는 언제 사용해야 하나요?

Lambda는 Lambda 표준 런타임 환경을 사용하고 Lambda에서 제공한 리소스 내에서 애플리케이션 코드를 실행할 수 있는 경우에 많은 애플리케이션 시나리오를 위한 이상적인 컴퓨팅 서비스입니다.

Lambda를 사용하면 사용자는 자신의 코드에 대해서만 책임을 갖습니다. Lambda는 메모리, CPU, 네트워크 및 기타 리소스의 균형을 제공하는 컴퓨팅 플릿을 관리하여 코드를 실행합니다. Lambda가 이러한 리소스를 관리하므로 컴퓨팅 인스턴스에 로그인하거나 제공된 런타임에 운영 체제를 사용자 지정할 수 없습니다. Lambda는 사용자를 대신하여 용량 관리, 모니터링 및 Lambda 함수 로깅을 비롯한 운영 및 관리 활동을 수행합니다.

자체 컴퓨팅 리소스를 관리해야 하는 경우 AWS는 사용자의 요구를 충족하는 다른 컴퓨팅 서비스도 제공합니다. 예:

Amazon Elastic Compute Cloud(Amazon EC2)는 선택할 수 있는 다양한 EC2 인스턴스 유형을 제공합니다. 운영 체제, 네트워크 및 보안 설정, 전체 소프트웨어 스택을 사용자 지정할 수 있습니다. 용량을 프로비저닝하고, 플릿 상태 및 성능을 모니터링하고, 내결함성을 위해 가용 영역을 사용할 책임은 사용자에게 있습니다.

AWS Elastic Beanstalk를 사용하면 Amazon EC2에 애플리케이션을 배포하고 확장할 수 있습니다. 사용자는 기반 EC2 인스턴스에 대한 소유권과 완전한 제어 권한을 보유합니다.


Lambda 기능

다음 주요 기능은 확장 가능하고 안전하며 쉽게 확장할 수 있는 Lambda 애플리케이션 프로그램을 개발하는 데 도움이 됩니다.

동시성 및 크기 조정 컨트롤
동시성 제한 및 프로비저닝된 동시성과 같은 동시성 및 크기 조정 제어를 사용하면 프로덕션 애플리케이션크기 조정 및 응답성세밀하게 제어할 수 있습니다.

컨테이너 이미지로 정의된 함수
선호하는 컨테이너 이미지 도구, 워크플로 및 종속성을 사용하여 Lambda 함수를 빌드, 테스트 및 배포할 수 있습니다.

코드 서명
Lambda에 대한 코드 서명은 승인된 개발자가 게시한 변경되지 않은 코드만 Lambda 함수에 배포되었는지 확인할 수 있는 신뢰무결성 제어 기능을 제공합니다.

Lambda 익스텐션
Lambda 익스텐션을 사용하여 Lambda 함수를 보강할 수 있습니다. 예를 들어 익스텐션 기능을 사용하면 Lambda를 모니터링, 가관측성, 보안 및 거버넌스를 위해 자주 사용하는 도구에 보다 쉽게 통합할 수 있습니다.

함수 블루프린트
함수 블루프린트는 다른 AWS 서비스 또는 서드 파티 애플리케이션을 Lambda와 함께 사용하는 방법을 보여주는 샘플 코드를 제공합니다. 블루프린트에는 Node.js 및 Python 런타임에 대한 샘플 코드 및 함수 구성 사전 설정이 포함되어 있습니다.

데이터베이스 액세스
데이터베이스 프록시는 데이터베이스 연결 풀을 관리하고 함수에서 쿼리를 릴레이합니다. 이렇게 하면 데이터베이스 연결을 소모하지 않고 높은 동시성 레벨에 도달할 수 있습니다.

파일 시스템 액세스
Amazon Elastic File System(Amazon EFS) 파일 시스템을 로컬 디렉터리에 마운트하도록 함수를 구성할 수 있습니다. Amazon EFS를 사용하면 함수 코드가 안전하고 높은 동시성으로 공유 리소스에 액세스하여 수정할 수 있습니다.


Lambda 예제

/AWS/Lambda/함수/함수생성에서 새로작성 선택

함수 생성새로 생성
함수 이름lambda-api-get
런타임Python 3.8
아키텍처x86_64

함수 생성 클릭

아래 내용처럼 편집하고 Ctrl+s로 저장
Deploy 클릭

import json

def lambda_handler(event, context):
    # TODO implement
    return {
        'statusCode': 200,
        'body': json.dumps("MZC API from Lambda!??")
    }

나와서..

/AWS/Lambda/함수/함수생성 클릭

함수 생성새로 생성
함수 이름lambda-api-post
런타임Python 3.8
아키텍처x86_64

함수 생성 클릭

아래 내용처럼 편집하고 Ctrl+s로 저장
Deploy 클릭

import json

def lambda_handler(event, context):
    # TODO implement
    return_data = event['key']
    return {
        'statusCode': 200,
        'body': json.dumps(return_data + " Wow~~~ ")
    }

서비스/API Gateway/API/API 유형 선택/REST API/구축 선택

프로토콜 선택REST
새 API 생성새 API
API 이름APIGateway-LambdaAPI

API 생성 클릭

API/API:APIGateway-LambdaAPI/리소스/작업 클릭 후 리소스 생성 클릭

리소스 이름mzc

리소스 생성 클릭

API/API:APIGateway-LambdaAPI/리소스/작업 클릭 후 메서드 생성 클릭

/mzc밑에 박스 활성화 시키고 GET 클릭 V 클릭

통합 유형|Lambda 함수
Lambda 리전|ap-northeast-2
Lambda 함수|lambda-api-get

저장 클릭

확인 클릭

API/API:APIGateway-LambdaAPI/리소스/작업 클릭 후 메서드 생성 클릭

/mzc밑에 박스 활성화 시키고 POST 클릭 V 클릭

통합 유형Lambda 함수
Lambda 리전ap-northeast-2
Lambda 함수lambda-api-post

서비스/AWS Lambda/함수/lambda-api-get 클릭

API Gateway가 자동으로 등록된 것을 확인할 수 있다.

서비스/API/API:APIGateway-LambdaAPI/리소스/GET/테스트 클릭

테스트 클릭

서비스/API/API:APIGateway-LambdaAPI/리소스/POST/테스트 클릭

요청 본문에

{
    "key" : "MegazoneCloud"
}

테스트 클릭


Lambda 예제 (응용)

  • 하나의 자원에 대해 Method 별로 Lambda Function 만들지 말고 하나로 구성
  • HTTP 프로토콜의 메소드에 대한 개념 필수
  • Lambda 의 handler 에서는 Request 객체가 전달되지 않으므로 Method 종류를 파악
  • 분기 조건을 만들기 어려움, 이 때 파라미터로 전달되는 event 변수를 이용, 분기조건을 만듦
  • API Gateway 로 값 전달시 “method” 라는 키를 가지는데 data를 포함하는 규칙을 정하여 구분
  • 설정 및 테스트 순서
    1. Lambda 설정
    2. API Gateway 설정
    3. 테스트

/AWS/Lambda/함수/함수생성에서 새로작성 선택

함수 생성새로 생성
함수 이름lambda-hello
런타임Python 3.8
아키텍처x86_64

함수 생성 클릭

아래 내용처럼 편집하고 Ctrl+s로 저장
Deploy 클릭

import json

def lambda_handler(event, context):
    # TODO implement
    try:
        if event['method'] == "POST" :
            return {
                'statusCode' : 200,
                'body' : json.dumps('Post Method ?!')
            }
    except :        
        return {
            'statusCode': 200,
            'body': json.dumps('Get Method')
        }

API/API:APIGateway-LambdaAPI/리소스/작업 클릭 후 메서드 생성 클릭

/mzc밑에 박스 활성화 시키고 GET 클릭 V 클릭

통합 유형Lambda 함수
Lambda 리전ap-northeast-2
Lambda 함수lambda-hello

저장 클릭

확인 클릭

API/API:APIGateway-LambdaAPI/리소스/작업 클릭 후 메서드 생성 클릭

/mzc밑에 박스 활성화 시키고 POST 클릭 V 클릭

통합 유형Lambda 함수
Lambda 리전ap-northeast-2
Lambda 함수lambda-hello

서비스/AWS Lambda/함수/lambda-api-get 클릭

서비스/API/API:APIGateway-LambdaAPI/리소스/GET/테스트 클릭

테스트 클릭

서비스/API/API:APIGateway-LambdaAPI/리소스/POST/테스트 클릭

요청 본문에

{
    "method" : "POST"
}

테스트 클릭


REST API Deploy (배포)

서비스/API/API:APIGateway-LambdaAPI/리소스//Actions/API작업/API배포 클릭

배포 스테이지[새 스테이지]
스테이지 이름mzcapi
스테이지 설명api
배포 설명api

배포 클릭

서비스/API/API:APIGateway-LambdaAPI/스테이지/스테이지/mzcapi/mzcapi 스테이지 편집기/URL 호출 링크 클릭

결과 메시지 확인

Stage 에 표시된 Invoke URL 에 적혀있는 URL 은 “/” 즉 루트 Resource를 가리키며, “/” 에 대한 메소드 정의가 되어 있지 않으면 나타나는 오류이다.
→ Method 를 정의한 하위 URL 을 추가로 작성 후, 접근 시 에러가 나타나지 않는다.


RESTClient 을 통한 REST API 배포 확인

  1. RESTClient 설치 및 사용법
  2. GET 메소드 요청
  3. POST 메소드 요청
  • RESTClient 설치 및 사용법

아래 링크로 확장 가능
https://winterandsnow.tistory.com/15

크롬 브라우저에 플러그인 설치 후 실행 화면


리소스 삭제

  • Amazon API Gateway 삭제 → APIs Delete : 생성된 API 선택, Actions 에서 Delete 선택
  • AWS Lambda 삭제 → Functions Delete : 생성된 Function 선택, Actions 에서 Delete 선택

0개의 댓글