실습
목표
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 데이터 조회!!
감사합니다.