s3 getObject 함수 및 putItem 함수를 사용하여 AWS Lambda를 DynamoDB에 삽입하지만 아무 일도 일어나지 않음

AR

이것은 node.js 코드입니다.

'use strict';

const AWS = require("aws-sdk");

AWS.config.update({
    region: 'eu-west-1'});

const docClient = new AWS.DynamoDB.DocumentClient();

const tableName = 'Fair';

const s3 = new AWS.S3();

exports.handler = async (event) => {
    var getParams = {
        Bucket: 'dataforfair', //s3 bucket name
        Key: 'fairData.json' //s3 file location
    }
    
    const data = await s3.getObject(getParams).promise()
    .then( (data) => {
        //parse JSON 
        let fairInformations = JSON.parse(data.Body.toString());

        fairInformations.forEach(function(fairInformationEntry) {
            console.log(fairInformationEntry);
            var params = {
                TableName: tableName,
                Item: {
                    "year": fairInformationEntry.year,
                    "fairName":  fairInformationEntry.fairName,
                    "info": fairInformationEntry.info
                }
            };
        
            docClient.put(params, function(err, data) {
                console.log('*****test');
            if (err) {
                console.error("Unable to add fairInformation", fairInformationEntry.fairName, ". Error JSON:", JSON.stringify(err, null, 2));
            } else {
                console.log("PutItem succeeded:", fairInformationEntry.fairName);
            }
            });
        });
       })
       .catch((err) => {
           console.log(err);
       });
      

    const response = {
        statusCode: 200,
        body: JSON.stringify(data),
    };
    return response;
};

안녕하세요 여러분,

s3 버킷에서 JSON 파일을 가져온 후 데이터를 Dynamo DB에 저장하고 싶습니다. JSON 가져 오기가 작동하고 console.log (fairInformationEntry); 여전히 트리거되지만 docClient.put ()은 호출되지 않습니다. 나는 오류가 없습니다. 나는 무엇이 잘못되었고 왜 그것이 작동하지 않는지 모른다. 적절한 IAM 역할과 필요한 모든 것에 액세스 할 수 있습니다.

당신이 나를 도울 수 있기를 바랍니다!

Ashish Modi

문제는 promise, callback 및 async / await의 혼합입니다. 또한 foreach 내에서 비동기 작업을 수행하려고합니다. 코드는 다음과 같아야합니다.

"use strict";

const AWS = require("aws-sdk");

AWS.config.update({
  region: "eu-west-1"
});

const docClient = new AWS.DynamoDB.DocumentClient();

const tableName = "Fair";

const s3 = new AWS.S3();

exports.handler = async event => {
  var getParams = {
    Bucket: "dataforfair", //s3 bucket name
    Key: "fairData.json" //s3 file location
  };

  const data = await s3.getObject(getParams).promise();
  //parse JSON
  let fairInformations = JSON.parse(data.Body.toString());

  await Promise.all(
    fairInformations.map(fairInformationEntry => {
      console.log(fairInformationEntry);
      var params = {
        TableName: tableName,
        Item: {
          year: fairInformationEntry.year,
          fairName: fairInformationEntry.fairName,
          info: fairInformationEntry.info
        }
      };
      return docClient.put(params).promise();
    })
  );

  const response = {
    statusCode: 200,
    body: JSON.stringify(data)
  };
  return response;
};

도움이 되었기를 바랍니다

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관