Cloud Engineering/AWS

[AWS] Lambda 와 API Gateway 로 서버리스 API 구축하기 - GET 요청에서 parameter 보내기

minjiwoo 2023. 11. 19. 20:23
728x90

Lambda 함수를 trigger 거는 방법에는 여러가지가 있지만 그중에서도 AWS 외부에서 lambda 에 요청을 보내기 위해서 API Gateway 와 연동하게 되면, lambda 함수를 빠르게 서버리스로 배포할 수 있다. API Gateway 와 Lambda 서비스를 사용하여 Serverless HTTP API 를 배포하는 방법에 대해 알아보자

우선 AWS 에서 API Gateway > Create API 를 선택하고, HTTP API 타입을 선택한다. 

생성하게 될 HTTP API 이름을 적는다. 

HTTP method 를 여기서도 정의할 수 있지만 우선 넘어가고, 나중에 한번에 정의하도록 한다. 

API 배포를 관리하기 위한 Stage 이름을 정한다. 

구성 내용을 확인하고 Create 버튼을 눌러 API Gatway 를 생성한다. 

API 생성 후에, Route 와 Method 를 정할 것이다. 우선 GET 방식으로 /students 경로를 생성하자. 

생성하게 되면 다음과 같이 route와 GET 방식으로 설정해 놓은 것이 보이게 된다. 

GET 요청시 'name'이라는 parameter 를 받을 수 있도록 다음과 같이 경로를 지정한다. ->  /students/{name}

AWS > Lambda 서비스로 넘어가서, 이번에는 새로운 lambda 함수를 생성한다. 

 

Lambda 함수는 다음과 같이 구성하였다. event를 통해 GET 요청이 왔을 때 lambda에서 'name' 이라는 parameter를 성공적으로 받은 경우 200을 return 하도록 구성했다. 반면 'name' 이라는 parameter 를 받지 못하면 400을 return 하고 error message를 body 에 보내도록 구성했다. 

참고로 lambda에서 API Gateway 를 통해 event를 받을 때 'queryStringParameters' 하위에서 parameter들을 파싱할 수 있다.  

import json

def lambda_handler(event, context):
    print("EVENT TYPE:", type(event))
    print("EVENT:", json.dumps(event))
    print("queryStringParameters:", json.dumps(event['queryStringParameters']))

    name = event['queryStringParameters']['name']
    
    if name: 
        response = {
            "statusCode": 200,
            "body": f"[SUCCESS] Parameter 'name':  {name}"
        }
    else: 
        response = {
            "statusCode": 400, 
            "body": "[Error] Parameter 'name' not found in the request"
        }
        
    return response

다시 API Gateway 서비스로 넘어가서 위에서 생성한 lambda 함수와 연동하는 작업을 진행할 것이다. /students > GET 에서 'Attach Integration' 을 선택한다. 

위에서 생성한 lambda 함수를 선택하면 된다. 

Lambda와 Gateway API 가 통합되면 아래와 같이 GET 방식 옆에 'AWS Lambda' 라는 표시가 뜨게 된다. /students/{name} 경로를 통한 GET요청에 대해서도 위와 동일한 lambda 함수를 연동해준다. 아래에서 'Attach Integration' 버튼을 누르면 된다. 

아래와 같이 보이게 되면 Lambda 함수와의 연동이 제대로 된 것이다. 

 

API에서 CORS 설정 탭을 눌러서, 설정을 해준다. CORS 는 테스트를 위해 모든 방식 접근 허용 & 모든 IP 허용으로 설정해주었다. 

Lambda 서비스로 가서 위에서 생성한 함수를 확인해보면 다음과 같이 API Gateway 가 Trigger로 연결이 되어 있는 것을 확인할 수 있다. 

Configuration > Triggers 를 보면 2개의 경로에 대해 연동이 되어 있는 것을 확인할 수 있다. 

 

마지막으로, 실제로 연동이 잘 되었는지 curl 명령어로 API Gateway 에 다음과 같이 GET요청을 보내서 확인해본다. 

 

동일하게, 웹브라우저에서도 접근이 가능한 것이 확인된다. 

 

위와 같이, 간단한 lambda 함수를 빠르게 배포해서 사용하는 경우 API Gateway 와 연동해서 써볼 수 있을 것 같다!! 몇번의 클릭이면 배포가 되는 서버리스 특성상 빠르고 쉽게 배포할 수 있는 것 같다. aws 서비스들 중에서도 클라우드 서비스의 장점이 보이는 서비스라고 느껴진다. 

728x90