AWS

lambda

테오구 2022. 9. 18. 00:27
728x90

- Serverless의 주축을 담당

- Events를 통하여 Lambda를 실행시킴

- NodeJS, Python, Java, GO등 다양한 언어 지원

- Lambda Function

 

AWS Lambda (비용)

- Lambda Function이 실행될때만 돈 지불

- 매달 1,000,000 함수 호출 시 무료 (그 후로는 유료)

 

AWS Lambda (기타)

- 최대 300초 런타임 시간 허용

- 512MB의 일시적인 디스크 공간 제공

- 최대 50MB Deployment Package 허용

 

S3와 lambda에 trigger를 연결해두면 S3에 어떤 object가 들어올 시 람다함수를 실행시켜줍니다.

 

만약 실시간으로 온도의 정보를 받아오고 일정 이상의 온도가 된다면 lambda 함수를 실행하여 메세지를 출력하는 함수를 만들어 봅시다.

다음처럼 lambda함수를 생성해줍시다.

import json
#  
import boto3
from datetime import datetime

# s3를 연동하기 위한 코드
client = boto3.client('s3')



def lambda_handler(event, context):
    print(event)
    # 현재 시간
    what_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    # bucket 정보
    bucket = event['Records'][0]['s3']['bucket']['name']
    # 키 정보
    key = event['Records'][0]['s3']['object']['key']
    try:
        # 오브젝트 정보를 가져옵니다.
        response = client.get_object(Bucket=bucket, Key=key)
        
        text = response['Body'].read().decode()
        data = json.loads(text)

        # S3에 올라온 온도가 40가 넘는다면 메세지를 출력합니다.
        if data['temperature'] > 40:
            print(f"Temperature detected : {data['temperature']}C at {what_time}")
            print("Be careful! It's getting really hot!!")
        else:
            print("So far so good")
    except Exception as e:
        print(e)
        raise e

다음과 같은 소스 코드를 입력해주고 deploy를 해줍니다.

그런 다음 S3를 새로 만들어 객체의 이벤트 유형을 정해주고 만들어주었던 lambda함수를 연결해줍니다.

# ex1.json
{
	"temperature":45
}

json 파일을 S3에 업로드 해줍니다.

cloudwatch에서 만들어준 로그 그룹을 들어가면 로그 스트림이 발생하는 것을 알 수 있습니다.

정상적으로 로그가 찍히는 것을 볼 수 있습니다.

728x90

'AWS' 카테고리의 다른 글

S3  (0) 2022.09.17
EC2-ELB  (0) 2022.09.16
EC2-EBS  (0) 2022.09.15
IAM 정책 시뮬레이터  (0) 2022.09.15
IAM란  (0) 2022.09.14