brunch

10탄- APIGW이용 DynamoDB 조회하기

실습

by Master Seo

목표

S3로 만든 웹 사이트에 접속해서, DynamoDB 데이터 조회하자

API Gateway를 사용하여 DynamoDB 테이블에 액세스 하기 위한 Lambda 함수용 API 생성

API용 SDK 생성

S3로 사이트 구축



<1> 구성

<2> API GW 생성

<3> API용 SDK 생성

<4> s3 웹사이트 구축




<1> 구성


API Gateway ------ Lambda------- DynamoDB

10 apigw.png





1. DynamoDB 테이블 생성


테이블 만들기

book


기본키

bookname


항목 만들기

텍스트

{

"no": "1",

"division": "aws",

"bookname": "aws discovery book",

"easy": "easy",

"pub": "2019.09",

"money": "22500"

}


{

"no": "2",

"division": "aws",

"bookname": "aws devops descovry book",

"easy": "middle",

"pub": "2019.02",

"money": "22500"

}


{

"no": "3",

"division": "html",

"bookname": "생활코딩 html+css",

"easy": "easy",

"pub": "2019.01",

"money": "24300"

}


{

"no": "4",

"division": "python",

"bookname": "점프투 파이썬",

"easy": "middle",

"pub": "2019.06",

"money": "16920"

}


{

"no": "5",

"division": "linux",

"bookname": "centos 8 linux express",

"easy": "easy",

"pub": "2020.03",

"money": "35000"

}


10 bookname.png


2. 람다를 위한 IAM role 생성 : scan role , query role 생성

iam > role > lambda > 정책 생성

seo-dynamodb-scan-policy3

seo-dynamodb-query-policy3


scan role 생성

{

"Version": "2012-10-17",

"Statement": [

{

"Action": [

"dynamodb:Query",

"dynamodb:Scan",

"s3:GetObject",

"s3:PutObject",

"dynamodb:BatchWriteItem",

"dynamodb:*"

],

"Resource": [

"*"

],

"Effect": "Allow"

}

]

}

seo-dynamodb-scan-role3



query role 생성

{

"Version": "2012-10-17",

"Statement": [

{

"Action": [

"dynamodb:Query"

],

"Resource": "*",

"Effect": "Allow"

}

]

}

seo-dynamodb-query-role3




3. Lambda 생성

seo-dynamo-scan

node.js 12.x

기본 실행 역할 변경

기존 역할 사용

seo-dynamodb-scan-role3


index.js

var doc = require('aws-sdk');

var dynamo = new doc.DynamoDB();

var fun = function(event, context) {

var getParams = {

TableName:'book'

};

dynamo.scan(getParams, function(err, data){

if (err) console.log(err, err.stack); // an error occurred

else {

context.succeed(data);

}

});

};

exports.handler = fun;


deply 저장



4

test 탭

{}



5

쿼리 람다 생성

seo-dynamo-query

node.js 12.x

기본 실행 역할 변경

기존 역할 사용

seo-dynamodb-query-role3


index.js

var doc = require('aws-sdk');

var dynamo = new doc.DynamoDB();

var fun = function(event, context) {

condition = {};

condition["bookname"] = {

ComparisonOperator: 'EQ',

AttributeValueList:[{S: event.bookname}]

}

var getParams = {

TableName:'book',

KeyConditions: condition

};

dynamo.query(getParams, function(err, data){

if (err) console.log(err, err.stack); // an error occurred

else {

context.succeed(data);}

});

};

exports.handler = fun;



6

테스트

{

"bookname": "aws discovery book"

}



7

20 bookname.png






<2> API Gateway 생성


1

API Gateway > REST API > 구축

20 apigw-rest api.png



2

REST API > 구축 > 새 API

seo-api1

seo-api1-description

> API 생성



3

리소스 2개 생성하기


작업 > 리소스 생성 > 리소스 이름

seo-list

> 리소스 생성


4

작업 > 리소스 생성 > 리소스 이름

seo-detail

> 리소스 생성


5

seo-list 클릭

작업 > 메서드 작성 > POST > check POST


6

> Lambda 함수

seo-dynamo-scan

or

seo-list-lambda

25 seo-list.png


7

seo-detail 클릭

작업 > 메서드 작성 > POST > check POST



8

> Lambda 함수

seo-dynamo-query

or

seo-detail-lambda

> 저장


9

CORS 활성화

seo-list > 작업 > CORS 활성화 > CORS 활성화 및 기존의 CORS 해더 대체

27 cors.png


10

CORS 활성화

seo-detail > 작업 > CORS 활성화 > CORS 활성화 및 기존의 CORS 해더 대체


11

작업 > API 배포 > 배포 스테이지 : 새 스테이지>

test 1

> 배포




<3> API용 SDK 생성


1

API용 SDK 생성

SDK생성 탭 > 플랫폼 : 자바 스크립트

> SDK생성 클릭

xxxxxxx.zip 파일 다운로드

압축 풀기


2

압축 푼 디렉터리에 index.html 복사

실행

// 원하는 걸 만들려면 index.html의 내용을 수정해야 함!!!


30 sdk 생성.png







<4> s3 웹사이트 구축


1

S3 > Create bucket >

seo-bucket191



2

모든 퍼블릭 허용 블록 체크 해지

인지함 체크


3

정책 적용

{

"Version": "2012-10-17",

"Statement": [

{

"Sid": "PublicReadForGetBucketObjects",

"Effect": "Allow",

"Principal": "*",

"Action": "s3:GetObject",

"Resource": "arn:aws:s3:::BUCKET/*"

}

]

}

// 버킷은 seo-bucket191로 교체


4

호스팅 웹사이트로 설정


5

java script 폴더 끌어서 넣기


6.

접속 확인

http://BUCKET.s3-website-us-west-2.amazonaws.com/apiGateway-js-sdk/index.html


http://seo-bucket191.s3-website-us-west-2.amazonaws.com/apiGateway-js-sdk/index.html


S3 웹사이트 접속 > API Gateway > 람다 > DynamoDB 데이터 조회!!

10 apigw.png



감사합니다.

keyword
매거진의 이전글 10탄-Lambda로 DynamoDB 쿼리하기