우노
[AWS API Gateway] DynamoDB, Lambda 를 사용한 CRUD API 구축 본문
DynamoDB + Lambda 를 통해 DynamoDB 테이블 항목을 조작하는 RESTful API 생성
- 구현 순서
- 실행 순서
- 사용자가 REST API 를 호출하면, API Gateway 는 요청을 Lambda 함수로 라우팅
- Lambda 함수는 DynamoDB 와 상호 작용하고, API Gateway 에 대한 응답을 반환
- API Gateway 는 Lambda 로부터 받은 응답을 사용자에게 반환
1. DynamoDB 테이블 생성
https://console.aws.amazon.com/dynamodb/ 에서 DynamoDB 콘솔을 엽니다.
[테이블 만들기] 를 선택합니다.
[테이블 이름] 을 입력합니다.
— 해당 포스트에서는 "unho-check-spark-executor-call-db" 로 입력
[기본 키] 를 입력합니다.
— 해당 포스트에서는 "method" 로 입력
[생성] 를 선택합니다.
2. DynamoDB 항목 생성
https://console.aws.amazon.com/dynamodb/ 에서 좌측 [테이블] 을 클릭합니다.
생성한 DynamoDB 테이블을 클릭합니다.
[테이블 만들기] 를 선택합니다.
우측 상단 네비게이션 바에서 [항목] 을 클릭한 뒤, [항목 만들기] 를 클릭합니다.
항목을 만든 뒤, [저장] 합니다.
3. Lambda 함수 생성 (python)
DynamoDB 에서 항목을 업데이트하는 Lambda 함수를 생성합니다.
https://console.aws.amazon.com/lambda에서 Lambda 콘솔에 로그인합니다.
[함수 생성] 을 선택합니다.
[함수 이름] 을 입력합니다.
— 해당 포스트에서는 "unho-check-spark-executor-call-function" 으로 입력
[런타임] 을 Python 3.8 로 선택합니다.
권한에서 [기본 실행 역할 변경]을 선택합니다.
[AWS 정책 템플릿에서 새 역할 생성]을 선택합니다.
[역할 이름] 을 입력합니다.
— 해당 포스트에서는 "unho-check-spark-executor-call-role" 으로 입력
정책 템플릿에서 [단순 마이크로 서비스 권한] 을 선택합니다.
— 이 정책은 Lambda 함수에 DynamoDB 와 상호 작용할 수 있는 권한을 부여합니다.
[함수 생성] 을 선택합니다.
콘솔의 코드 편집기에서 [lambda_function.py] 를 열고 내용을 다음 코드로 삽입합니다.
import json import boto3 from boto3.dynamodb.conditions import Key # dynamodb table 선언 dynamodb = boto3.resource('dynamodb') table = dynamodb.Table('unho-check-spark-executor-call-db') # 항목 업데이트 함수 def update_item(event_method, event_count): response = table.update_item( # 기본 키 Key={ 'method': event_method }, UpdateExpression="SET #pre_count = #pre_count + :val", ExpressionAttributeValues={ ':val': event_count }, ExpressionAttributeNames={ '#pre_count' : 'count' } ) return response def lambda_handler(event, context): # Update 함수 return { 'statusCode': 200, 'body': json.dumps(update_item(event["body-json"]["method"],event["body-json"]["count"])) }
상단의 [Deploy] 를 선택하여 함수를 업데이트합니다.
4. REST API 생성 (POST 메소드 등록)
https://console.aws.amazon.com/apigateway에서 API Gateway 콘솔에 로그인합니다.
[API 생성] 을 선택한 다음 [REST API] 의 [구축] 을 클릭합니다.
API 이름을 입력합니다.
— 해당 포스트에서는 "unho-check-spark-executor-call-api" 로 입력
다른 설정은 하지 않고, [API 생성] 을 클릭합니다.
리소스를 생성합니다.
리소스 이름을 입력한 뒤, [리소스 생성] 을 클릭합니다.
— 해당 포스트에서는 "unho-check-spark-executor-call-resource" 으로 입력
POST 메서드를 생성한 뒤, 체크 표시를 클릭합니다.
[Lambda 함수]를 입력한 뒤, [저장] 을 클릭합니다.
— 해당 포스트에서는 "unho-check-spark-executor-call-function" 으로 입력
[통합 요청] 을 클릭합니다.
하단의 [매핑 템플릿] 을 클릭합니다.
[정의된 템플릿이 없는 경우 (권장)] 을 클릭한 뒤, [매핑 템플릿 추가] 를 클릭하고, [application/json] 을 입력한 뒤, 체크 표시를 클릭합니다.
스크롤을 내려, [템플릿 생성] 에서 [메서드 요청 패스스루] 를 클릭한 뒤, [저장] 합니다.
상단 [작업] 의 [CORS 활성화] 를 클릭합니다.
[Access-Control-Allow-Headers] 를 ['Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token, Accept'] 로 입력한 뒤, [CORS 활성화 및 기존의 CORS 헤더 대체] 를 클릭합니다.
상단 [작업] 의 [API 배포] 를 클릭합니다.
[배포 스테이지] 는 [새 스테이지] 를 선택한 뒤, [스테이지 이름] 을 입력하고 [배포] 클릭
— 해당 포스트에서는 "unho-check-spark-executor-call-stage" 로 입력
[스테이지] 의 [POST] 메소드를 클릭한 뒤 URL 복사
5. API 테스트
복사한 URL 로 POST 테스트 (DynamoDB 의 항목이 정상적으로 업데이트 되는지 확인)
curl \ -X POST "API주소" \ -H "Content-Type: application/json" \ -d '{ "method" : "right dense", "count": 1 }'
참고
'AWS > API Gateway' 카테고리의 다른 글
[AWS API Gateway] AWS Lambda + API Gateway 로 RESTful API 생성 (0) | 2021.08.13 |
---|