오늘의 인기 글
최근 글
최근 댓글
Today
Total
05-06 00:00
관리 메뉴

우노

[AWS API Gateway] DynamoDB, Lambda 를 사용한 CRUD API 구축 본문

AWS/API Gateway

[AWS API Gateway] DynamoDB, Lambda 를 사용한 CRUD API 구축

운호(Noah) 2021. 8. 9. 10:42

DynamoDB + Lambda 를 통해 DynamoDB 테이블 항목을 조작하는 RESTful API 생성

  • 구현 순서
    1. DynamoDB 콘솔을 사용하여, DynamoDB 테이블 생성
    2. DynamoDB 콘솔을 사용하여, DynamoDB 항목 생성
    3. AWS Lambda 콘솔을 사용하여, Lambda 함수 생성
    4. API Gateway 콘솔을 사용하여, REST API 생성
    5. API 테스트
  • 실행 순서
    • 사용자가 REST API 를 호출하면, API Gateway 는 요청을 Lambda 함수로 라우팅
    • Lambda 함수는 DynamoDB 와 상호 작용하고, API Gateway 에 대한 응답을 반환
    • API Gateway 는 Lambda 로부터 받은 응답을 사용자에게 반환

1. DynamoDB 테이블 생성

  1. https://console.aws.amazon.com/dynamodb/ 에서 DynamoDB 콘솔을 엽니다.

  2. [테이블 만들기] 를 선택합니다.

  3. [테이블 이름] 을 입력합니다.

    — 해당 포스트에서는 "unho-check-spark-executor-call-db" 로 입력

  4. [기본 키] 를 입력합니다.

    — 해당 포스트에서는 "method" 로 입력

  5. [생성] 를 선택합니다.

2. DynamoDB 항목 생성

  1. https://console.aws.amazon.com/dynamodb/ 에서 좌측 [테이블] 을 클릭합니다.

  2. 생성한 DynamoDB 테이블을 클릭합니다.

  3. [테이블 만들기] 를 선택합니다.

  4. 우측 상단 네비게이션 바에서 [항목] 을 클릭한 뒤, [항목 만들기] 를 클릭합니다.

  5. 항목을 만든 뒤, [저장] 합니다.

3. Lambda 함수 생성 (python)

DynamoDB 에서 항목을 업데이트하는 Lambda 함수를 생성합니다.

  1. https://console.aws.amazon.com/lambda에서 Lambda 콘솔에 로그인합니다.

  2. [함수 생성] 을 선택합니다.

  3. [함수 이름] 을 입력합니다.

    — 해당 포스트에서는 "unho-check-spark-executor-call-function" 으로 입력

  4. [런타임] 을 Python 3.8 로 선택합니다.

  5. 권한에서 [기본 실행 역할 변경]을 선택합니다.

  6. [AWS 정책 템플릿에서 새 역할 생성]을 선택합니다.

  7. [역할 이름] 을 입력합니다.

    — 해당 포스트에서는 "unho-check-spark-executor-call-role" 으로 입력

  8. 정책 템플릿에서 [단순 마이크로 서비스 권한] 을 선택합니다.

    — 이 정책은 Lambda 함수에 DynamoDB 와 상호 작용할 수 있는 권한을 부여합니다.

  9. [함수 생성] 을 선택합니다.

  10. 콘솔의 코드 편집기에서 [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"]))
        }
  11. 상단의 [Deploy] 를 선택하여 함수를 업데이트합니다.

4. REST API 생성 (POST 메소드 등록)

  1. https://console.aws.amazon.com/apigateway에서 API Gateway 콘솔에 로그인합니다.

  2. [API 생성] 을 선택한 다음 [REST API][구축] 을 클릭합니다.

  3. API 이름을 입력합니다.

    — 해당 포스트에서는 "unho-check-spark-executor-call-api" 로 입력

  4. 다른 설정은 하지 않고, [API 생성] 을 클릭합니다.

  5. 리소스를 생성합니다.

  6. 리소스 이름을 입력한 뒤, [리소스 생성] 을 클릭합니다.

    — 해당 포스트에서는 "unho-check-spark-executor-call-resource" 으로 입력

  7. POST 메서드를 생성한 뒤, 체크 표시를 클릭합니다.

  8. [Lambda 함수]를 입력한 뒤, [저장] 을 클릭합니다.

    — 해당 포스트에서는 "unho-check-spark-executor-call-function" 으로 입력

  9. [통합 요청] 을 클릭합니다.

  10. 하단의 [매핑 템플릿] 을 클릭합니다.

  11. [정의된 템플릿이 없는 경우 (권장)] 을 클릭한 뒤, [매핑 템플릿 추가] 를 클릭하고, [application/json] 을 입력한 뒤, 체크 표시를 클릭합니다.

  12. 스크롤을 내려, [템플릿 생성] 에서 [메서드 요청 패스스루] 를 클릭한 뒤, [저장] 합니다.

  13. 상단 [작업][CORS 활성화] 를 클릭합니다.

  14. [Access-Control-Allow-Headers]['Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token, Accept'] 로 입력한 뒤, [CORS 활성화 및 기존의 CORS 헤더 대체] 를 클릭합니다.

  15. 상단 [작업][API 배포] 를 클릭합니다.

  16. [배포 스테이지][새 스테이지] 를 선택한 뒤, [스테이지 이름] 을 입력하고 [배포] 클릭

    — 해당 포스트에서는 "unho-check-spark-executor-call-stage" 로 입력

  17. [스테이지][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
Comments