AWS Lambda는 코드 중간에 실행을 중지합니다.

스리 나스

s3에서 csv 파일 업로드를 트리거하고 람다를 사용하여 파일의 데이터를 데이터베이스에 삽입하려고합니다.

몇 초 간격으로 코드를 연속적으로 실행하면 대부분의 경우 코드가 성공적으로 실행됩니다.

그러나 때때로 내가 직면하는 문제는 코드가 콘솔에서 실행을 중지 console.log('about to get the data');하고 나머지 코드를 무시하는 것 mysql connection gets time out입니다.

20 초 이상의 간격으로 람다 코드를 테스트 할 때만 문제가 발생한다는 것을 알 수 있습니다. 그래서 이것이 콜드 스타트 ​​문제라고 생각합니다.

s3 트리거 하나도 놓치고 싶지 않습니다. 따라서이 문제를 일으키는 코드의 결함을 찾는 데 도움이 필요합니다.

   const AWS = require('aws-sdk');
    const s3 = new AWS.S3({region: 'ap-south-1', apiVersion: '2006-03-01'});
    var mysql= require('mysql');

    var conn = mysql.createPool({
        connectionLimit: 50,
        host: 'HOST',
        user: 'USER',
        password: 'PASSWORD',
        database: 'DATABASE'
      })

    async function mainfunc (event, context, callback) {
        console.log("Incoming Event: ", JSON.stringify(event));
        const bucket = event.Records[0].s3.bucket.name;
        const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));

        const params = {
            Bucket: bucket,  
            Key:  filename
        };


        console.log('about to get the data'); //Code stops here some times

          return await getresult(params);


    };

    async function getresult(params){
        var result =  await s3.getObject(params).promise();


        var recordList = result.Body.toString('utf8').split(/\r?\n/).filter(element=>{
            return element.length> 5;
          })
          recordList.shift()
          var jsonValues = [];
          var jsonKeys = result.Body.toString('utf8').split(/\r?\n/)[0]

          recordList.forEach((element) => {
            element = element.replace(/"{2,}/g,'"').replace(/, /g,"--").replace(/"{/, "{").replace(/}"/, "}").replace(/,/g, ';').replace(/--/g,', ').split(';');
            jsonValues.push(element)
          });

          var lresult = await query(jsonKeys, jsonValues);        
          return lresult;

    }

    async function query(jsonKeys, jsonValues){
      var qresult = await conn.getConnection(function(err, connection) {
        if (err){
          console.log(err,'------------------------------------');// Sometimes i get Sql Connection timeout error here
        } else {
        console.log("Connected!");
        var sql = "INSERT INTO reports ("+jsonKeys+") VALUES ?";
        connection.query(sql, [jsonValues], function (err, result) {
          if (err){
            console.log(err);
            connection.release()
            return err;
          } else {
          console.log("1 record inserted");
          console.log(result);
          connection.release()
          return result;
          }
        });
      }
      })

    }



      exports.handler = mainfunc
스리 나스

"쿼리"기능에서 promise를 사용하여 문제를 해결했습니다.

function query(jsonKeys, jsonValues){
      return new Promise(function(resolve, reject) {
      conn.getConnection(function (err, connection) {
        if (err) {
          console.log(err, '------------------------------------');
        }
        else {
          console.log("Connected!");
          var sql = "INSERT INTO principal_reports (" + jsonKeys + ") VALUES ?";
          connection.query(sql, [jsonValues], function (err, result) {
            if (err) {
              console.log(err);
              connection.release();
              reject(err)
            }
            else {
              console.log("1 record inserted");
              console.log(result);
              connection.release();
              resolve(result)
            }
          });
        }
      })
    })
    }

코드를 변경했습니다.

var lresult = await query(jsonKeys, jsonValues);

...에

var lresult = await query(jsonKeys, jsonValues).then(data =>{
            return data;
          }).catch(error =>{
            return error;
          });

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

UDPClient.Receive ()는 코드 실행을 중지합니다.

분류에서Dev

AWS Lambda 함수는 다중 레코드 이벤트 페이로드에 어떻게 응답합니까? 즉, Lambda 코드가 배치 당 한 번 또는 여러 번 실행됩니까?

분류에서Dev

Java의 PHP IDE는 코드 창 중간에 줄을 표시합니다.

분류에서Dev

특정 날짜에 코드 실행을 중지하는 방법

분류에서Dev

다중 실행에 대한 행렬 정규화,이 코드는 무엇을합니까?

분류에서Dev

주어진 기간 내에 R 코드를 실행 한 다음 중지하는 방법은 무엇입니까?

분류에서Dev

이 코드는 중간에 중지됩니다.

분류에서Dev

jquery는 기능의 Focusout에서 이중 실행 코드를 수행합니다.

분류에서Dev

AWS Lambda는 코드 초기화에 소요 된 시간에 대해 요금을 부과합니까?

분류에서Dev

AWS Lambda가 실행 중일 때 AWS Lambda의 stderr 또는 stdout을 얻을 수있는 방법이 있습니까?

분류에서Dev

":"을 쓰는 이유-줄 뒤의 코드 중간에-코드가 떨어지지 않습니다.

분류에서Dev

이 코드 중 일부는 실행되지 않습니다.

분류에서Dev

나머지 코드 실행을 중지하는 Android setError

분류에서Dev

나머지 코드 실행을 중지하는 방법-javascript

분류에서Dev

Node.js getContext가 추가 코드 실행을 중지합니다.

분류에서Dev

if로 코드 실행을 일찍 중지하는 용어?

분류에서Dev

C ++ 코드 실행을 중지하는 방법

분류에서Dev

두 열에 중복 값이 있지만 다른 열에 고유 한 레코드가있는 레코드를 표시하는 쿼리를 실행합니다.

분류에서Dev

메서드에서 실행을 중지하는 가장 간단한 방법

분류에서Dev

AWS Lambda는 별도의 Firecracker VM에서 모든 호출을 실행합니까?

분류에서Dev

Javascript는 OR의 나머지 실행을 중지합니다.

분류에서Dev

ng 빌드가 "Angular CLI 8.0 이상에서 지원되지 않는 Node.js 버전 v8.11.3을 실행 중입니다."와 함께 실패합니다.

분류에서Dev

JavaScript 코드는 시작시 중지보다 한 번 실행됩니다.

분류에서Dev

코드는 뷰에서 사용자 입력을 기다리지 않고 모든 onStartup ()을 실행합니다.

분류에서Dev

Lambda에서 실행되는 dotnet 코어 코드에서 MySQL에 대한 AWS IAM 인증

분류에서Dev

AWS-AWS Lambda에서 코드를 실행하는 동안 현재 프로젝트 경로 가져 오기

분류에서Dev

파이썬 셸이 32 비트 또는 64 비트에서 실행 중인지 확인하는 코드를 작성했습니다. 그러나 코드는 64 대신 8을 인쇄합니다.

분류에서Dev

Django는 코드 중복없이 다른 def에서 def index (reuqest)를 실행합니다.

분류에서Dev

비동기의 True 루프는 Discord.py 작동에서 코드의 다른 부분을 중지합니다.

Related 관련 기사

  1. 1

    UDPClient.Receive ()는 코드 실행을 중지합니다.

  2. 2

    AWS Lambda 함수는 다중 레코드 이벤트 페이로드에 어떻게 응답합니까? 즉, Lambda 코드가 배치 당 한 번 또는 여러 번 실행됩니까?

  3. 3

    Java의 PHP IDE는 코드 창 중간에 줄을 표시합니다.

  4. 4

    특정 날짜에 코드 실행을 중지하는 방법

  5. 5

    다중 실행에 대한 행렬 정규화,이 코드는 무엇을합니까?

  6. 6

    주어진 기간 내에 R 코드를 실행 한 다음 중지하는 방법은 무엇입니까?

  7. 7

    이 코드는 중간에 중지됩니다.

  8. 8

    jquery는 기능의 Focusout에서 이중 실행 코드를 수행합니다.

  9. 9

    AWS Lambda는 코드 초기화에 소요 된 시간에 대해 요금을 부과합니까?

  10. 10

    AWS Lambda가 실행 중일 때 AWS Lambda의 stderr 또는 stdout을 얻을 수있는 방법이 있습니까?

  11. 11

    ":"을 쓰는 이유-줄 뒤의 코드 중간에-코드가 떨어지지 않습니다.

  12. 12

    이 코드 중 일부는 실행되지 않습니다.

  13. 13

    나머지 코드 실행을 중지하는 Android setError

  14. 14

    나머지 코드 실행을 중지하는 방법-javascript

  15. 15

    Node.js getContext가 추가 코드 실행을 중지합니다.

  16. 16

    if로 코드 실행을 일찍 중지하는 용어?

  17. 17

    C ++ 코드 실행을 중지하는 방법

  18. 18

    두 열에 중복 값이 있지만 다른 열에 고유 한 레코드가있는 레코드를 표시하는 쿼리를 실행합니다.

  19. 19

    메서드에서 실행을 중지하는 가장 간단한 방법

  20. 20

    AWS Lambda는 별도의 Firecracker VM에서 모든 호출을 실행합니까?

  21. 21

    Javascript는 OR의 나머지 실행을 중지합니다.

  22. 22

    ng 빌드가 "Angular CLI 8.0 이상에서 지원되지 않는 Node.js 버전 v8.11.3을 실행 중입니다."와 함께 실패합니다.

  23. 23

    JavaScript 코드는 시작시 중지보다 한 번 실행됩니다.

  24. 24

    코드는 뷰에서 사용자 입력을 기다리지 않고 모든 onStartup ()을 실행합니다.

  25. 25

    Lambda에서 실행되는 dotnet 코어 코드에서 MySQL에 대한 AWS IAM 인증

  26. 26

    AWS-AWS Lambda에서 코드를 실행하는 동안 현재 프로젝트 경로 가져 오기

  27. 27

    파이썬 셸이 32 비트 또는 64 비트에서 실행 중인지 확인하는 코드를 작성했습니다. 그러나 코드는 64 대신 8을 인쇄합니다.

  28. 28

    Django는 코드 중복없이 다른 def에서 def index (reuqest)를 실행합니다.

  29. 29

    비동기의 True 루프는 Discord.py 작동에서 코드의 다른 부분을 중지합니다.

뜨겁다태그

보관