내가 일하는 회사는 현재 기존 코드베이스를 AWS Lambda로 이전하려고합니다. 우리는 node.js 4.3 (람다를 위해 제공되는 가장 높은 버전)을 실행 중이고 VPC 내부에서 실행되어 RDS 데이터베이스에 연결합니다. 람다 함수는 데이터베이스에 잘 연결되어 있지만, MySQL 테이블에 대한 간단한 select 쿼리는 에러를 반환하거나 실행하지 않습니다.AWS Lambda가 node.js를 실행하지 않음 MySQL 쿼리
exports.handler = (event, context, callback) => {
/**
* Require Config file
**/
var config = require('./config.js');
/**
* AWS/MWS Configuration
**/
var AWS = require('aws-sdk');
var MWS = require('mws');
var mws = require('./lib/mws-reports/lib/mws.js');
var XML = require('./lib/mws-reports/pixl-xml');
var mwsReportsAPI = require('./lib/mws-reports/lib/reports.js');
var mwsFeedsAPI = require('./lib/mws-reports/lib/feeds.js');
AWS.config.region = config.AWS.region;
AWS.config.credentials = config.AWS.credentials;
var client = new mws.Client(
config.MWS.credentials.accessKeyId,
config.MWS.credentials.secretAccessKey,
config.MWS.credentials.sellerID,
{}
);
/**
* Configure DB
* @var Promise - A library to maintain Promises (used for chained MySQL queries)
* @var Utils - A wrapper for utility functions.
* @var connection - The MySQL DB Connection
**/
var Promise = require('bluebird');
var utils = require('./lib/Utils');
var mysql = require('mysql');
var MySQLConnection = mysql.createConnection(config.mysql);
MySQLConnection.connect(function (err) {
if(err) {
console.log("Error connection: " + err.stack);
return;
}
console.log("Connected as id " + connection.threadId);
});
var connection = Promise.promisifyAll(MySQLConnection);
var InventoryHealth = require('./app/models/InventoryHealth');
var Items = require('./app/models/Items');
connection.query("SELECT * FROM items", function(err, rows) {
rows.forEach(function(item) {
console.log(JSON.stringify(item));
});
});
connection.end();
context.done(null, "Finished :)");
}
내가 언급 한 바와 같이,이 모든 것의 가장 이상한 부분은 내가 람다에서 얻을 응답의 부족 : 여기에 우리가하려고하는 코드입니다. 이것은 내게 알려주는 것입니다 :
START RequestId: f726f0ba-ecec-11e6-b0b3-9d51c554a5ac Version: $LATEST
2017-02-07T04:22:01.123Z f726f0ba-ecec-11e6-b0b3-9d51c554a5ac (node) crypto.createCredentials is deprecated. Use tls.createSecureContext instead.
END RequestId: f726f0ba-ecec-11e6-b0b3-9d51c554a5ac
REPORT RequestId: f726f0ba-ecec-11e6-b0b3-9d51c554a5ac Duration: 4232.01 ms Billed Duration: 4300 ms Memory Size: 128 MB Max Memory Used: 22 MB
놀라운 조언이 있습니다. 고맙습니다.
첫째 :
코드가 무엇을보고하지 않고, 나는이 코드를 테스트하지 않은, 당신의 라인에 뭔가 더 필요 모듈의 모든 초기화가 당신이 당신의 핸들러 함수 밖에서해야한다. 둘째 : 콜백 작동 방식을 읽어야합니다. context.done을 호출하기 전에 콜백이 호출되기를 기다리지 않습니다. 내 제안 자바 스크립트/노드 콜백 및 그 사용하는 방법을 읽는 것입니다. – doorstuck