본문 바로가기

Back-end

[AWS] nodejs + Lambda + dynamodb 를 통해 데이터 가져와서 저장하기


[AWS] nodejs + Lambda + dynamodb 를 통해 데이터 가져와서 저장하기

사용할려고 하는 API가 한달에 1000건의 데이터만 허용을 하지않아 데이터를 서버에 가지고있을 필요가 생겼습니다.
그래서 lambda를 통해 데이터를 매시간 요청한 뒤 dynamodb에 저장하고자 하였습니다.

권한생성

시작에 앞서 IAM으로 들어가줍니다.

role 선택

그 후 create role 버튼을 누르면 아래와 같은 화면이 나옵니다.

사용할려는 lambda클릭 그 후 dyna를 검색 후 dynamoDB Full Access권할을 줍니다.

dynamoDB 생성


테이블 이름을 정해줍니다. 기본키의 경우 mongodb에서 objectID의 역활을 하는 기본키입니다.
테이블을 생성합니다.

lambda생성

내용이 많지 않으므로 새로 작성클릭

트리거의 경우 람다식을 트리거할 delegate패턴 같은 내용입니다. 우선 없이 다음으로 눌러줍니다.

이름과 런타임 작성

예제소스

1const http = require('http');
2const AWS = require('aws-sdk'); //AWS
3const docClient = new AWS.DynamoDB.DocumentClient({apiVersion: '2012-08-10'});
4const url = "http://example.com"
5
6exports.handler = (event, context, callback) => {
7 var result = ""; // result
8
9 http.get(url, function(res) {
10 res.on('data', function(chunk) {
11 result += chunk;
12 });
13 res.on('end', function() {
14 result = JSON.parse(result)
15 docClient.put({
16 //
17 TableName: "exData",
18 Item:{
19 // timestamp id .
20 // id .
21 //Date timestamp .
22 "id":result.timestamp.toString(),
23 // key value
24 "data":result
25 }
26 },function(err,data){
27 if(err){
28 //DB
29 context.fail('fail to add data'+err);
30 }else{
31 //DB
32 console.log(" ");
33 context.succeed();
34 }
35 })
36 });
37
38 }).on('error', function(e) {
39 console.log("Got error: " + e.message);
40 context.fail(' ');
41 });
42
43};

트리거설정



트리거 추가를 통해 트리거를 설정해줍니다. coludWatch Event를 설정 후


일반적으로 사용하는 cron에서의 시간 표현식을 사용할 수 있습니다.

cron 표현식


출처: AWS coludwatch docs

rate 표현식


출처: AWS coludwatch docs

이외에도 트리거를 사용하면 s3 용량이 설정 범위를 넘을때나 혹은 오토스케일링이 필요할때
codecommit등 다양한 상황에 응용하여 사용할 수 있습니다.