카테고리 없음

(AWS) 공공데이터포털 데이터 Lambda로 불러와서 dynamoDB에 저장

Neda 2023. 4. 16. 05:25

 

  1. Lambda(node.js)에서 openapi로 데이터 요청(request)
  2. openapi로 부터 json 파일을 받음(response)
  3. 받은 json파일을 parsing하여 dynamoDB로 저장(put)
  4. cloudwatch에서 로그 확인

 

 

DynamoDB examples using SDK for JavaScript (v3) - AWS SDK for JavaScript

Thanks for letting us know this page needs work. We're sorry we let you down. If you've got a moment, please tell us how we can make the documentation better.

docs.aws.amazon.com

 

@aws-sdk/lib-dynamodb | AWS SDK for JavaScript v3

@aws-sdk/lib-dynamodb Overview The document client simplifies working with items in Amazon DynamoDB by abstracting away the notion of attribute values. This abstraction annotates native JavaScript types supplied as input parameters, as well as converts ann

docs.aws.amazon.com

import https from 'https';
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import { PutCommand,DynamoDBDocumentClient } from "@aws-sdk/lib-dynamodb";

const ddbClient = new DynamoDBClient({ region: 'ap-northeast-2' });
const ddbDocClient = DynamoDBDocumentClient.from(ddbClient);

export async function handler(event) {
  return new Promise((resolve, reject) => {
    const options = {
      hostname: 'apis.data.go.kr',
      path: '/1360000/EqkInfoService/getEqkMsg?serviceKey=<serviceKey>&pageNo=1&numOfRows=10&dataType=JSON&fromTmFc=20230414&toTmFc=20230415',
      method: 'GET'
    };

    const req = https.request(options, (res) => {
      console.info(`statusCode: ${res.statusCode}`);

      let responseBody = '';

      res.on('data', (chunk) => {
        responseBody += chunk;
      });

      res.on('end', async() => {
        const body = JSON.parse(responseBody);
        
        
        for(const item of body['response']['body']['items']['item']) {
          console.info(item);
          const params = {
            TableName: "EarthquakeInfo",
            Item: {
              eqkId: String(item.tmEqk),
              eqkTime: item.tmEqk,
            },
          };
          try {
            const data =  await ddbDocClient.send(new PutCommand(params));
            console.log("Success - item added or updated", data);
          } catch(err) {
            console.log("Error",err.stack)}
        }
        resolve(responseBody);
      });
    });

    req.on('error', (error) => {
      console.error(error);
      reject(error);
    });

    req.end();
  });
}

https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/modules/_aws_sdk_lib_dynamodb.html