brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Jun 01. 2020

10탄- APIGW이용 DynamoDB 조회하기

실습

목표

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

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

API용 SDK 생성

S3로 사이트 구축



<1>  구성 

<2>  API GW 생성

<3>  API용 SDK 생성

<4>  s3 웹사이트 구축




<1>  구성 


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





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"

}



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






<2>  API Gateway 생성


1

API Gateway  > REST API  >   구축 



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


7

seo-detail 클릭

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



8

> Lambda 함수 

seo-dynamo-query

or

seo-detail-lambda

> 저장


9

CORS 활성화

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


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의 내용을 수정해야 함!!!








<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 데이터 조회!!



감사합니다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari