[자습서: API Gateway에서 Lambda 사용]를 기반으로 작성한 내용
DynamoDB와 REST API 생성하여, DynamoDB에 데이터를 생성/수정 해보자.
AWS lambda로 가서 함수를 만든다. 함수 생성을 누르고, 함수 이름은 LambdaFunctionOverHttps
로 하고 런타임은 Python 3.9
로 지정했다. 함수가 만들어지면 아래 코드를 붙여넣고 핸들러는 LambdaFunctionOverHttps.handler
로 수정한다.
from __future__ import print_function
import boto3
import json
print('Loading function')
def handler(event, context):
'''Provide an event that contains the following keys:
- operation: one of the operations in the operations dict below
- tableName: required for operations that interact with DynamoDB
- payload: a parameter to pass to the operation being performed
'''
#print("Received event: " + json.dumps(event, indent=2))
operation = event['operation']
if 'tableName' in event:
dynamo = boto3.resource('dynamodb').Table(event['tableName'])
operations = {
'create': lambda x: dynamo.put_item(**x),
'read': lambda x: dynamo.get_item(**x),
'update': lambda x: dynamo.update_item(**x),
'delete': lambda x: dynamo.delete_item(**x),
'list': lambda x: dynamo.scan(**x),
'echo': lambda x: x,
'ping': lambda x: 'pong'
}
if operation in operations:
return operations[operation](event.get('payload'))
else:
raise ValueError('Unrecognized operation "{}"'.format(operation))
boto3
: Python용 AWS SDK(Software Development Kit). Python 애플리케이션, 라이브러리 또는 스크립트를 S3, EC2, DynamoDB 등 AWS 서비스와 통합할 수 있게 한다.
API Gateway 콘솔을 열어 API 생성 버튼을 누르고 REST API 구축 버튼을 누르면 API 생성 페이지가 나온다. API 이름을 DynamoDBOperations
으로 하고, 엔드포인트 유형을 리전(지역)
으로 하고 API 생성 버튼을 누르면 완료.
작업 > 리소스 생성
순서로 클릭하면 리소스를 만들 수 있다. DynamoDBManager
라는 이름의 리소스를 만든다. 이름을 입력하면 /dynamodbmanager
로 자동으로 경로 설정이 된다.
작업 > 메서드 생성 > POST
순서로 클릭하면 POST 메서드를 만들 수 있다. Lambda 함수를 선택하고, AWS 리전은 서울로 선택하고(ap-northeast-2
), 함수 이름은 아까 만들었던 이름 (LambdaFunctionOverHttps
)을 입력하고 저장한다.
DynamoDB 콘솔의 테이블 페이지에서 Create table을 선택한다. 테이블 이름은 lambda-apigateway
, 파티션 키는 id
, 데이터 유형은 문자열
로 설정하고 테이블을 만든다.
API Gateway로 돌아가서 test를 클릭한다.
그리고 아래의 request body에 id
가 1234ABCD
이고, number
가 5
인 JSON을 붙여넣어보자.
{
"operation": "create",
"tableName": "lambda-apigateway",
"payload": {
"Item": {
"id": "1234ABCD",
"number": 5
}
}
}