Using Lambda with API Gateway
aws
Using Lambda with API Gateway
Create a DynamoDB table
Lambda 함수가 사용하는 DynamoDB 테이블을 생성합니다.
- DynamoDB 콘솔에 접속합니다.
- 테이블 생성을 클릭합니다.
- 테이블 세부 사항을 설정합니다.
- 원하는 테이블 이름을 설정합니다. (ex. encryptDynamoDB)
- 파티션 키를 id 로 입력합니다. (타입은 문자열입니다)
- 테이블 생성을 클릭합니다.
Create the Lambda function
API Gateway 에서 호출할 Lambda 함수를 생성합니다.
- Lambda 콘솔에 접속합니다.
- 함수 생성을 클릭합니다.
- 함수 세부 사항을 설정합니다.
- 원하는 함수 이름을 설정합니다. (ex. functionForDynamoDB)
- 함수의 런타임을 설정합니다. (이번 POC 에선 Python 3.8 사용)
- 함수 생성을 클릭합니다.
Write a function
from __future__ import print_function
import boto3
import json
dynamo = boto3.client('dynamodb')
def lambda_handler(event, context):
operation = event['operation']
print(event['operation'])
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))
Grant permission to Lambda function
Lambda 함수가 DynamoDB 로 요청할 수 있도록 권한을 부여합니다.
- IAM 콘솔에 접속합니다.
- 역할 탭에 접속합니다.
- Lambda 함수의 역할을 선택합니다.
- 정책을 연결합니다.
- 이번 POC 에선 AmazonDynamoDBFullAccess 를 부여합니다.
Test the Lambda function
Lambda 함수가 적절한 응답을 하는지 테스트합니다.
- Lambda 콘솔에 접속합니다.
- 테스트하고자 하는 함수를 클릭합니다.
- 하단의 테스트 탭에서 이벤트 페이로드를 정의해, 테스트합니다.
Ping & Pong
Request
{
"operation": "ping"
}
Response
정상적인 응답이 내려옵니다.
"pong"
Create
Request
{
"operation": "create",
"payload": {
"TableName": "encryptDynamoDB",
"Item": {
"id": {
"S": "some id"
},
"text": {
"S": "some text"
}
}
}
}
Response
Http Status code 가 200(정상) 입니다.
{
"ResponseMetadata": {
...
"HTTPStatusCode": 200,
}
}
DynamoDB 테이블 내 항목에도 추가되었군요.
이제 Lambda -> DynamoDB 의 연결은 확인되었습니다.
API Gateway 연결만 진행하면 되겠군요.
Create the API Gateway
Lambda 함수를 호출하기 위한 API Gateway 를 생성합니다.
Create the API
- API Gateway 콘솔에 접속합니다.
- API 생성을 클릭합니다.
- REST API 에서 구축을 클릭합니다.
- 세부사항을 설정합니다.
- 프로토콜은 REST 입니다.
- 새 API 를 생성합니다.
- 원하는 API 이름을 설정합니다. (ex. DynamoDBOperations)
- 엔드포인트를 지역으로 선택합니다.
- API 생성을 클릭합니다.
Create a resource
REST API 의 리소스를 생성합니다.
- API 의 리소스 트리에서 루트(/) 를 선택합니다.
- 작업을 선택하고, 리소스 생성을 클릭합니다.
- 세부사항을 설정합니다.
- 리소스 이름에 DynamoDBOperator 입력합니다.
- 리소스 경로 설정을 /dynamodboperator로 유지합니다.
- 리소스 생성을 클릭합니다.
Create a POST method on the resource
리소스에서 POST 메소드를 생성합니다.
- API 의 리소스 트리에서 /dynamodboperator 를 선택합니다.
- 작업을 선택하고, 메소드 생성을 클릭합니다.
- 드롭다운 메뉴에서 POST 를 선택한 후, 체크 표시를 클릭합니다.
- 설정 창에서 세부사항을 설정합니다.
- 통합 유형은 Lambda 함수입니다.
- 생성했 람다 함수를 선택합니다.
- 저장 버튼을 클릭합니다.
Integration test
API Gateway 를 이용한 DynamoDB 항목 생성 테스트를 진행합니다.
- API Gateway 의 리소스 탭을 접속합니다.
- 생성한 POST 메소드를 클릭합니다.
- 좌측의 테스트를 클릭합니다.
- Request Body 내에 JSON 값을 전달합니다.
- 테스트 버튼을 클릭합니다.