AWS Lambda란?
- 서버를 프로비저닝 하거나 관리하지 않고도 코드를 실행할 수 있게 해주는 컴퓨팅 서비스
- AWS Lambda는 필요시에만 코드를 실행하며, 하루에 몇 개의 요청에서 초당 수천 개의 요청까지 자동으로 확장이 가능
- 사용한 컴퓨팅 시간에 대해서만 요금을 지불하면 되고 코드가 실행되지 않을 때는 요금이 부과되지 않는다.
- 최대 timeout이 15분이므로 15분이 넘어가는 작업은 적합하지 않다. (15분이 넘어가면 ec2나 ecs가 적합)
단점으로는 콜드스타트가 있기 때문에 약간의 딜레이가 발생한다. 그래서 일정 시간마다 람다를 호출해야 하는 경우가 생긴다.
Serverless
여기서 설명하면 길어질테니 나중에 올리도록 하고 나는 서버리스를 이용해서 올리도록 하겠다.
Template create
AWS 웹 콘솔에서 람다를 바로 생성하는 것도 있다. 웹 콘솔에서 생성 시 블루프린트가 있어 하고자 하는 작업의 템플릿이 있으니 참고하자.
파이썬 프로젝트 하나를 만들고 터미널에서 해당 폴더로 들어간 뒤 명령어를 입력해준다.
# package.json 생성해주기
npm init -y
# serverless install
npm install serverless
# python3.x 템플릿 생성
npx serverless create --template aws-python3
# npm과 npx의 차이점은 찾아보기
완료가 되면 아래 사진처럼 구조가 생긴다.
이제 serverless.yml을 열어 문법에 맞게 작성해주고 handler.py를 열어 코드를 작성해주면 된다.
serverless.yml
# 프로젝트의 서비스 명
# aws lambda 명이 된다
# {service}-{stage}-{functions}
# serverless_test-prod-hello
service: serverless_test
# custom: 커스텀 값 셋팅 가능
provider:
name: aws
runtime: python3.8 # python 버전명시
functions:
hello:
handler: handler.hello # handler파일 안에 hello함수를 실행
# resources: sqs나 sns, bucket등 생성 및 사용할 경우 작성
https://www.serverless.com/framework/docs/providers/aws/guide/serverless.yml/
Serverless Framework - AWS Lambda Guide - Serverless.yml Reference
A list of all available properties on serverless.yml for AWS
www.serverless.com
위 링크를 보면 어마어마하게 많은 문법이 있으니 필요시 참고 바란다.
그리고 들여 쓰기를 주의해야 한다.
handler.py
import json
def hello(event, context):
body = {
"message": "Go Serverless v1.0! Your function executed successfully!",
"input": event
}
response = {
"statusCode": 200,
"body": json.dumps(body)
}
return response
# Use this code if you don't use the http event with the LAMBDA-PROXY
# integration
"""
return {
"message": "Go Serverless v1.0! Your function executed successfully!",
"event": event
}
"""
handler.py 안에 코드를 보면 이렇게 되어있고 event는 함수를 실행할 때 이벤트를 받는다.
context는 https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/python-context.html
AWS Lambda 컨텍스트 객체(Python) - AWS Lambda
AWS Lambda 컨텍스트 객체(Python) Lambda는 함수를 실행할 때 컨텍스트 객체를 핸들러에 전달합니다. 이 객체는 호출, 함수 및 실행 환경에 관한 정보를 제공하는 메서드 및 속성들을 제공합니다. 컨텍
docs.aws.amazon.com
참고하면 되겠다.
context안에는 여러 정보를 담고 있다.
Deploy
배포를 할 때 명령어는
npx sls deploy # 전체 배포
npx sls deploy -s {stage} # stage를 입력받는 경우 (prod/dev)
npx sls deploy -r {region} # region을 입력받는 경우
npx sls deploy -f {function name} # function만 배포
# 단, 전체배포 후에 개별 function 배포 가능
# yml 및 라이브러리가 수정이 됬으면 전체배포 진행
Invoke
람다를 실행할 때 명령어는
npx sls invoke -f {function name} -p {event.json 파일의 경로}
# function name은 yml에 명시한 이름이고 확장자는 생략한다.
Invoke local
로컬에서 실행을 하고 싶은 경우
npx sls invoke local -f {function name} -p {event.json 파일의 경로}
# function name은 yml에 명시한 이름이고 확장자는 생략한다.
'개발 > AWS' 카테고리의 다른 글
AWS EC2 ami / snapshot 수명 주기 관리 (0) | 2020.12.29 |
---|---|
AWS Lambda EFS 탑재 (0) | 2020.12.16 |
AWS RDS PROXY - 1 - RDS PROXY 설정 (0) | 2020.06.11 |
DMS - Database Migration Service - 3 - 테이블 매핑, 테이블 이름 변경 (0) | 2020.06.10 |
DMS - Database Migration Service - 2 - 타계정 DMS, VPC 라우팅 (0) | 2020.06.10 |