람다 간단하대서 써볼려했더니.. 엄청 삽질했네요;;
Lamda + API Gateway를 활용하여 간단한 API를 개발해보겠습니다.
1. API 규격
이번에 만들 api 는 GET/test 입니다.
GET /test
- queryString으로 first_name과 last_name이 있을 경우 :
body에 hello {first_name} {last_name} 반환
- queryString이 비어있을 경우 :
body에 hello anonymous 반환
2. Lambda 함수 생성
AWS Lambda > 함수생성 > 새로작성
test라는 이름의 함수를 하나 만들어 주었습니다.
새로 생성한 함수로 들어가서
코드 탭에서 코드를 원하는대로 편집합니다.
람다에서는, event 인자를 통해 request인자들이 들어옵니다.
queryString의 first_name과 last_name에 따라 분기 및 응답값 설정이 이루어지도록 아래와 같이 람다함수를 작성해줍니다.
import json
def lambda_handler(event, context):
message = 'hello anonymous'
if event['queryStringParameters'] and 'first_name' in event['queryStringParameters'] and 'last_name' in event['queryStringParameters']:
message = 'Hello {} {}!'.format(event['queryStringParameters']['first_name'], event['queryStringParameters']['last_name'])
return {
'statusCode': 200,
'body': json.dumps(message, ensure_ascii=False)
}
참고) json.dumps 한글 깨짐 수정 반영
응답값에 한글이 포함되면 응답이 깨져서 보이는데,
json.dumps(result, ensure_ascii=False)
옵션을 넣어주면 이를 해결할 수 있습니다.
3. API Gateway에서 Lamda 트리거
람다함수를 외부에서 호출하려면 API게이트웨이를 연결해주어야 합니다.
구성 > 트리거 추가
추가 트리거 구성은 아래와 같이 했습니다.
API 게이트웨이 트리거가 생성되었네요.
API 엔드포인트라고 되어 있는 url을 클릭하면 새로운 탭에서 람다함수가 호출된 모습을 볼 수 있습니다.
4. API Gateway에서 Query String 전달
api gateway에서 전달받은 인자들을 lambda에 넘겨주도록 설정해보겠습니다.
구성에서 API 게이트의 세부 화면으로 들어갑니다 (위 화면 기준 API 게이트웨이 : test-API 클릭 )
통합 요청 클릭
메소드 설정에서 Lambda 프록시 통합 사용에 체크박스를 활성화시켜줍니다.
참고) event와 queryStringParameters
람다 내의 테스트 패널과 실제 api 호출 시 전달되는 패러미터가 조금 달라 헷갈리는 부분이 있습니다.
api call에서 쿼리패러미터는 event 패러미터 안에 queryStringParameters = {'key1' : 'value1', 'key2': 'value' .. } 형태로 전달됩니다.
import json
def lambda_handler(event, context):
print("event1", event)
if 'queryStringParameters' in event and event['queryStringParameters']:
message = 'hello queryStringParameters'
if 'first_name' in event['queryStringParameters'] and 'last_name' in event['queryStringParameters']:
message = 'Hello {} {}!'.format(event['queryStringParameters']['first_name'], event['queryStringParameters']['last_name'])
return {
'statusCode': 200,
'body': json.dumps(message, ensure_ascii=False)
}
'개발 > AWS' 카테고리의 다른 글
[AWS] CDK 시작하기 & Argument of type 'this' is not assignable to parameter of type 'Construct' 이슈 해결 (0) | 2022.04.28 |
---|---|
[AWS] 컨테이너 기반 Lambda 생성하기, Lambda에서 S3업로드 (0) | 2022.04.23 |
[AWS] AWS CDK 시작하기 (1) | Javascript, AWS Configure, CDK Init, CDK deploy, lambda, api gateway (0) | 2022.03.12 |
AWS 솔루션 아키텍트 AWS-SAA(C02) 공부방법/합격후기 (0) | 2021.08.09 |
AWS 솔루션 아키텍트 AWS-SAA(C02) 시험공부 (팁 & 주요 개념) (0) | 2021.08.08 |