[AWS]Lambda basic

do yeon kim·2022년 9월 2일
0
Lambda

Lambda를 이용하면 별도의 서버를 구축하는 것 없이 (예를 들면 우리가 Django를 이용해서 서버를 구축했던 것과 같은) 서버를 만들 수 있다.

즉 Serverless 한 API가 구현 가능하다.
람다는 대표적인 serverless플랫폼으로 별도의 서버를 구축하지 않아도 서버의 기능을 이용할 수 있다.


Lambda

함수(Django에서 View의 역할)라고 생각하고, 함수를 자동으로 작동하게 한다고 생각하면 된다.

함수를 언제 동작시킬 지를 이벤트, 트리거를 통해서 함수를 동작하게 할 수 있다. 트리거가 발생되면 함수가 자동으로 작동하게 만든다.

Lambda는 자동으로 실행 후 그 결과 데이터를 DB나 자체 로그로 남길 수 있다.

웹서버를 구축할 때도 손 쉽게 웹서버를 구현 할 수 있다.
클라이언트(요청) -> API게이트웨이 -> AWS람다 -> DB


기본 Lambda 함수

import json

def lambda_handler(event, context): 
# event는 일반적으로 클라이언트의 활동이라고 생각하면 된다. 
# event는 트리거를 통해서 발생 시킬 수 있다.
# event가 발생하면 lambda_handler의 event라는 매개변수로 들어오게 된다.
    return {
        'statusCode': 200,
        'body': json.dumps('Hello User!')
    }

API Gateway를 트리거로서 설정
API Gateway는 일종의 웹서버라고 생각하면 쉽다.
Endpoint 우리가 만든 Lambda 서버이다.

현재 서버가 돌아가는 상황에서 lambda_handeler를 변경해주면 그 변경사항도 자동으로 수정된다.



Lambda - python library사용하기

기본적인 library만 제공하고, 필요한 library는 따로 추가하는 작업이 필요하다.
library를 통째로 압축해서 업로드 하는 방법으로 사용할 수 있다.

pip를 이용해서 library를 별도의 폴더에 저장 후 업로드 하는 방식으로 Lambda에서 사용할 수 있다.

pip install 라이브러리이름 -t . 현재 폴더에 생성하는 코드이다.
zip -r 이름.zip . 압축파일을 만드는 코드이다.

별도의 라이브러리를 사용하고자 하는 경우 zip파일을 이용해서 업로드를 해서 사용하도록 한다.



layers를 이용한 공통라이브러리를 만들기

여러 Lambda 함수를 만들고, 각 함수마다 공통된 library를 사용하는 경우라면, 앞의 사례 처럼 하나하나 라이브러리를 압축해서 Lambda마다 zip파일을 업로드 해주어야 한다.

이러한 문제를 해결하는 것이 layer이다.
공통적으로 사용하는 라이브러리는 layer를 통해서 라이브러리를 사용할 수 있다.

layer의 zip파일을 만들때 중요한 것은 pyton이 최상위 폴더가 되고 그 밑에 라이브러리들이 들어와야 한다.

python이라는 폴더를 만들고 그안에 라이브러리들을 넣고서 압축하도록 한다.



Lambda 활용

API Gateway
Resource 특정한 Resource에 접근한다 는 의미로 Resource를 추가한다.

메서드 추가시 Lambda 프록시 통합 사용에 체크를 해주어야지 event에 데이터가 들어온다.

람다 프록시 통합사용하지 않은경우 메서드 정할때 proxy 통합사용해야 한다.api gateway를 거쳐서 들어가게 된다. 그래야지 event에 들어간다.


import json

def lambda_handler(event, context):
    operation = event["httpMethod"]
    print(event)
    if operation == "GET":
        data = {
            "id"    : 1,
            "name"  : "Kim Do Yeon"
        }
        
        return {
            'statusCode': 200,
            'headers'   : {},
            'body'      : json.dumps(data)
        }
    
    elif operation == "POST":
        return {
            'statusCode': 200,
        }


웹 클라이언트 접속 및 CORS설정

기본적으로 웹브라우저를 실행해서 특정 웹페이지에 다른 url에 접근하거나 정보를 받아오도록 코드를 구현하면, 현재 리소스와 요청을 하는 다른 url의 리소스가 다르기 때문에 보안적인 문제가 발생해서 CORS문제가 발생한다.

서버입장에서 다른 url에서 들어오는 리소스를 받아들여서 처리를 하겠다는 설정을 해주어야 한다.
일종의 보안제한을 약화시켜서 동작하게 만드는 것이다.

해당 메서드의 CORS를 허용하는 것이다.

CORS허용을 한 후에도 항상 배포까지 확인을 해야한다. 그래야지 설정을 변경한 것이 적용된다.

import json

def lambda_handler(event, context):
    operation = event["httpMethod"]
    print(event)
    if operation == "GET":
        data = {
            "id"    : 1,
            "name"  : "Kim Do Yeon"
        }
        
        return {
            'statusCode': 200,
            'headers'   : {'Access-Control-Allow-Origin':'*'},
            'body'      : json.dumps(data)
        }
    
    elif operation == "POST":
        return {
            'statusCode': 200,
        }
    
    

'headers' : {'Access-Control-Allow-Origin':'*'}

0개의 댓글