Q. lambda log 에서 비동기부분은 어디에서 볼수있나요?

라균2 2020. 02. 10.


s3.putObject(uploadParams, (err, data) => {
    if (data) {
        console.log("Upload Success", data); //이부분
    } else if (err) {
        console.log("Error", err); //또는 이부분
    }
});

lambda log보는 중인데

s3.putObject 의 callback 에서 로그 남기는곳이 있는데 이부분이 안보여서요..
로그 남길때 비동기부분은 로그 안남기고 다른곳으로 가는지 궁금합니다

---------------------------------------------------------------------

02-10 16:18분 추가

다른 커뮤니티에서도 같은 글을 올렸는데 같은 내용으로 올리실꺼 같아서 추가하면

cloudwatch 에서 로그를 보고 있습니다.

console.log('5. 엑셀 파일 업로드');
s3.putObject(uploadParams, (err, data) => {
    if (data) {
        console.log("Upload Success", data); //이부분
    } else if (err) {
        console.log("Error", err); //또는 이부분
    }
});
console.log('6. 엑셀 파일 업로드 태그 확인');

이런식으로 5. 6. 번을 추가 해줬을때 제 예상은

5. 엑셀 파일 업로드
6. 엑셀 파일 업로드 태그 확인
Upload Success OR Error 였는데 

실제 로그에서

callback 부분 로그가 비어있습니다.

공유하고 보상받기 ♥︎
댓글 0

1개의 답변이 있습니다.

질문자 & 큐레이터 채택
빌리보이 답변자인증
https://github.com/kangisworking 2020. 02. 10
100%의 채택

안녕하세요?

모든 코드를 다 안올리셔서 추측으로만 답변드립니다.

1. 코드시작

2. console.log(5. 엑셀 파일 업로드)

3. putObject 비동기 시작

4. console.log(6. 엑셀 파일 업로드 태그 확인)

5. lambda 종료

6. putObject 비동기 완료 및 console.log 실행(이지만, lambda 가 종료되서 cloudwatch 에 안남음)

위의 순서대로 지금 작동해서 console.log 가 찍히지 않는것이 유력합니다.

lambda 를 종료하는 callback 을 putObject 안에다가 넣으시던지 async await 을 사용해서 putObject 결과를 기다리고 callback 을 호출해야 정상작동할것으로 보입니다. 아니면 Promise 를 사용해서 then/catch 안에 callback을 넣으셔도 됩니다.

예시 1) putObject 의 콜백 함수안에서 callback 호출하기

exports.handler = function(event, context, callback) {
  s3.putObject(uploadParams, (err, data) => {
    if (data) {
        console.log("Upload Success", data); //이부분
        callback(data)
    } else if (err) {
        console.log("Error", err); //또는 이부분
        callback(err)
    }
  });
}

예시 2) async await 사용하기

exports.handler = async function(event, context, callback) {
  const result = await s3.putObject(uploadParams)
  console.log('result:', result)
  callback()
}

예시 3) Promise 의 then / catch 에서 callback 호출

exports.handler = function(event, context, callback) {
  new Promise((resolve, reject) => {
      s3.putObject(uploadParams, (err, data) => {
        if (data) {
            console.log("Upload Success", data); //이부분
            resolve(data)
        } else if (err) {
            console.log("Error", err); //또는 이부분
            reject(err)
        }
  }).then(res => {
     console.log('res:', res)
     callback()
   }).catch(err => {
     console.log('err:', err)
     callback(err)
   })
}

대충.. 요런식입니다. 도움이 되셨으면 좋겠습니다.

수고하세요. 해피코딩~

댓글 0