기본
- Serverless의 주축을 담당
Serverless? 클라우드가 직접 서버를 돌려주며 리소스 사용량에 따라 직접 할당, 문제점도 덜 발생, 사람의 간섭 줄여줌- Events를 통하여 Lambda를 실행시킴
Events? 주어 + 동사에서 동사에 해당(행동을 의미함)- NodeJS, Python, Java, GO등 다양한 언어 지원
- Lambda Function
Lambda는 다른 서비스를 호출 , 중간에 배치되는 경우가 많다
비용
- Lambda Function이 실행될때만 돈 지불
- 매달 1.000.000 함수 호출 시 무료 (그 후로는 유료)
기타
- 최대 300초(5분) 런타임 시간 허용
- 512MB의 일시적인 디스크 공간 제공 (/tmp/)
- 최대 50MB Deployment Package 허용 : 로컬에서 다수의 파일을 압축 파일로 저장한 후 aws에 업로드해 사용 가능
** 50MB 초과시 S3버켓 사용
사용용례
1) S3 -> Lambda -> DB
:PutObject가 lamdba를 실행시키고 DB에 깨끗한 데이터 저장
:이때 Lambda는 중간다리 역할을 함
2) IOT -> Lambda -> SNS
:Topic을 통해 데이터 전송해 Lambda함수 호출함
:Lambda를 통해 형변환이 가능함
*동시성(Concurency)? 얼마나 많은 함수를 돌릴수 있는지에 대한 설정
1) 새로작성 : 완전 처음부터 설정
2) 블루프린터 사용 : aws에서 종종 사용되는 기능들을 템플릿화 시켜 내가 가져다 쓸 수 있음
3) 서버리스 앱은 리포지토리 찾아보기 : 공유되어지고 있는 간단한 서비스 아키텍쳐를 내가 가져다 쓸 수 있음 (이 안에 lambda함수 구현되어 있음)
4) 컨테이너 이미지 : 함수에 대해 배포할 컨테이너 이미지 선택
실행역할을 다음과 같이 구성됨
코드
import json
import boto3 #aws서비스를 리소스적으로 운영가능
from datetime import datetime
client = boto3.client('s3') #client object생성
def lambda_handler(event, context):
what_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") #현재 시간 가져옴
#bucket과 key에 대한 정보 가져옴
bucket = event['Records'][0]['s3']['bucket']['name']
key = event['Records'][0]['s3']['object']['key']
try:
response = client.get_object(Bucket=bucket, Key=key) #object가져옴
text = response['Body'].read().decode() #response에 저장
data = json.loads(text)
if data['temperature'] > 40: #40보다 넘는다면
print(f"Temperature detected : {data['temperature']}C at {what_time}")
print("Be careful! It's getting really hot!!")
else: #40보다 작다면
print("So far so good")
except Exception as e:
print(e)
raise e
느낀점 : lambda함수에서 내가 원하는 로직을 어떻게 세우는지에 대해 알 수 있었다. 함수와 S3를 연결시켜 값에 따른 출력값이 다르게 나오는 실습을 진행했는데 이부분이 흥미로웠다.