>

여기서 목표는 AWS CloudWatchLogs.startQuery 를 사용하는 것입니다.  AWS Lambda의 핸들러 함수 내에서 함수. 이 방법은 nodejs를 통해 로컬로 실행할 때 존재하지만 핸들러 내에서 실행할 때 정의되지 않습니다. 나는 두 곳에서 같은 일을하고 있다고 생각하지만 다른 결과를 얻습니다. 비교를 위해, 나는 filterLogEvents 를 볼 수 있습니다  예상대로 두 곳에서 방법. 두 방법 모두 AWS 자바 스크립트 SDK 에 설명되어 있습니다. 람다 안에서 왜이 기능을 볼 수 없습니까?

내 nodejs 코드 :

var AWS = require('aws-sdk');
AWS.config.loadFromPath('./aws_credentials.json');
AWS.config.update({
    region: 'us-east-1',
    apiVersion: '2014-03-28'
});
var cloudwatchlogs = new AWS.CloudWatchLogs();
var filterlogevents_type = typeof cloudwatchlogs.filterLogEvents;
var startquery_type = typeof cloudwatchlogs.startQuery;
console.log(startquery_type);      // function 
console.log(filterlogevents_type); // function

람다의 index.js 파일에서 :

var AWS = require('aws-sdk');
AWS.config.update({
    region: 'us-east-1',
    apiVersion: '2014-03-28'
});
exports.handler = async (event) => {
    var cloudwatchlogs = new AWS.CloudWatchLogs();
    var filterlogevents_type = typeof cloudwatchlogs.filterLogEvents;
    var startquery_type = typeof cloudwatchlogs.startQuery;
    const response = {
        body: JSON.stringify({
            startQuery: startquery_type,           // undefined
            filterLogEvents: filterlogevents_type  // function
        }),
    };
    return response;
};


  • 답변 # 1

    연결 시점에 Lambda는 2018 년 8 월부터 런타임에 AWS SDK 버전 2.290.0을 포함합니다. 그러나 StartQuery는 2018 년 11 월에만 릴리스되어 SDK의 버전 2.364.0에 나타났습니다. 해결 방법은 포함 된 라이브러리에 의존하지 않고 최신 버전의 SDK를 직접 패키지하는 것입니다.

관련 자료

  • 이전 javascript - js - settimeout이 완료되었거나 취소되었는지 확인
  • 다음 c# - 프로세스가 다른 프로세스에서 사용 중이므로 exe 파일에 액세스 할 수 없습니다