On the journey of
[AWS 사전공인교육] 3. Lambda ~ 3.1 Hello World API 본문
Lambda를 활용해 서비스를 배포한다고 해보자. 이 경우 크게 아래의 흐름을 따라가게 된다.
- Function 생성
- function type
- language 선택
- 코딩
- 이벤트 생성
- 테스트
- 배포
- 배포 버튼 클릭
- 함수 URL 생성
Lambda의 장점은 아래와 같이 크게 4가지가 있는데, 디버깅이 어렵다는 단점이 있다.
- 유연한 스케일링: Lambda 함수는 요청에 따라 자동으로 스케일링되므로 사용자의 부하에 따라 자원을 최적으로 활용할 수 있습니다.
- 높은 가용성: Lambda는 다중 가용 영역에서 실행됩니다. 따라서 Lambda 함수가 실행되는 동안 장애가 발생해도 다른 가용 영역에서 자동으로 실행됩니다.
- 효율적인 비용 관리: Lambda 함수는 실행된 시간에 대해서만 과금이 이루어집니다. 따라서 사용자는 자신의 함수가 실행되는 시간과 빈도를 조절하여 효율적으로 비용을 관리할 수 있습니다.
- 쉬운 개발: Lambda 함수는 다양한 프로그래밍 언어로 작성될 수 있습니다. 따라서 사용자는 자신이 선호하는 언어로 함수를 작성할 수 있습니다.
3-1. Hello World API
- AWS → Lambda → 함수 생성
- Python 선택 → 함수 생성
- 테스트 이벤트 구성
- 이벤트 공유 설정 : 공유 가능
- lambda function 작성
{
"event_name": "amazon",
"method": "function"
}
#lambda_function.py
import json
def lambda_handler(event, context):
message = event.get('event_name', "default")
print(message)
return {
'statusCode': 200,
'body': f'Hello {message}!'
}
- Deploy 버튼으로 배포
- Test 버튼으로 실행
- 함수 URL 생성
- 구성 → 함수 URL → 함수 URL 생성
- 인증 유형은 상황에 따라 선택 ( 지금은 NONE 선택 ) → 저장
- 생성된 함수 URL 로 호출 테스트
- 파라메터 추가
- get 방식 form 으로 데이터를 넘겼을 때, 어떻게 나오는지 확인
- https://5s생략qyy.lambda-url.ap-northeast-2.on.aws/?**event_name=HongKillDong**
- lambda_handler 의 파라메터 값을 출력 하여 확인 가능
- 로그는 [모니터링] → CloudWatch Logs 에서 확인 가능
print(event)
print(context)
#json
{
"version":"2.0",
"routeKey":"$default",
"rawPath":"/",
"rawQueryString":"event_name=HongKillDong",
"headers":{
"content-length":"33",
"x-amzn-tls-version":"TLSv1.2",
"x-forwarded-proto":"https",
"postman-token":"107d71f8-8264-42f6-add6-c6ddb47ad4dc",
"x-forwarded-port":"443",
"x-forwarded-for":"121.168.63.229",
"accept":"*/*",
"x-amzn-tls-cipher-suite":"ECDHE-RSA-AES128-GCM-SHA256",
"x-amzn-trace-id":"Root=1-642d7a9b-1a53f7a824d3fed522309a26",
"host":"5sfxjssjwaqthhhn5qdfonlz7a0uiqyy.lambda-url.ap-northeast-2.on.aws",
"content-type":"application/json",
"accept-encoding":"gzip, deflate, br",
"user-agent":"PostmanRuntime/7.29.2"
},
"queryStringParameters":{
"event_name":"HongKillDong"
},
"requestContext":{
"accountId":"anonymous",
"apiId":"5sfxjssjwaqthhhn5qdfonlz7a0uiqyy",
"domainName":"5sfxjssjwaqthhhn5qdfonlz7a0uiqyy.lambda-url.ap-northeast-2.on.aws",
"domainPrefix":"5sfxjssjwaqthhhn5qdfonlz7a0uiqyy",
"http":{
"method":"GET",
"path":"/",
"protocol":"HTTP/1.1",
"sourceIp":"121.168.63.229",
"userAgent":"PostmanRuntime/7.29.2"
},
"requestId":"3dcdd40a-e040-411e-9acd-64c056a26832",
"routeKey":"$default",
"stage":"$default",
"time":"05/Apr/2023:13:41:47 +0000",
"timeEpoch":1680702107531
},
"body":"",
"isBase64Encoded":false
}
- 파라메터를 출력하려면 아래와 같이 소스 수정(수정했다면 배포 필요) 및 결과
#json 으로 진행
# message = event.get('event_name', "default")
message = event.get('queryStringParameters', {}).get('event_name', 'everybody')
'Experiences & Study > AWS' 카테고리의 다른 글
[AWS 사전공인교육] Streamlit 활용하기 (2) (1) | 2023.10.07 |
---|---|
[AWS 사전공인교육] Streamlit 활용하기 (1) (1) | 2023.10.04 |
[AWS 사전공인교육] 10-1.Crawling 기본코드 정리 (0) | 2023.09.28 |
[AWS 사전공인교육] 2. AWS Cloud9 - Hello World API 및 실행 (0) | 2023.09.16 |
[AWS 사전공인교육] 1. Cloud와 Serverless (0) | 2023.09.16 |