Лямбда-функция AWS с nodejs в ssh к ec2 и командой запуска, при тестировании дает 200 успехов, но ничего не делает - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть файл index.js, написанный в файле node.js 8.10, с загруженными необходимыми модулями узлов и файлом pem в лямбда-функции aws.Лямбда-функция должна выполнить ssh для экземпляра ec2 и запустить внутри него скрипт python (создающий другой файл внутри каталога).

При выполнении теста у меня 200 успехов, но я не вижу новый файл (предполагаемый вывод скрипта).Я использую simple-ssh для запуска сценария ec2.

'use strict';

console.log('Loading lambda function');

exports.handler = function(event, context, callback) {

  let bag_size = event.bag_size === undefined ? 10 : event.bag_size;

  var SSH = require('simple-ssh');
  var fs = require('fs');
  var ssh = new SSH({
      host: '##############',
      user: 'ubuntu',
      key: fs.readFileSync('key.pem'),
      passphrase: '##########'
      //pass: 'password'
  });

  var pythonCommand = 'python lambda_test.py ' + bag_size;

  ssh.exec('cd /home/ubuntu/***/***/***').exec('ls -al', {
   out: function(stdout) {
      console.log('ls -al got:');
      console.log(stdout);
      console.log('now launching command');
      console.log(pythonCommand);
   }
  }).exec('' + pythonCommand, {
  out: console.log.bind(console),
  exit: function(code, stdout, stderr) {
      console.log('operation exited with code: ' + code);
      console.log('STDOUT from EC2:\n' + stdout);
      console.log('STDERR from EC2:\n' + stderr);
      context.succeed('Success!');
  }
  }).start();


  var response = {
  statusCode: 200,
  headers: {
    "Access-Control-Allow-Credentials" : true, // Required for cookies, authorization headers with HTTPS 
    "Access-Control-Allow-Origin":"*",
    "Access-Control-Allow-Methods":"POST,GET,OPTIONS",
    "Access-Control-Allow-Headers":"Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token",
    "Content-Type":"application/json"
  },
  body: JSON.stringify({ "message": "Success" })
};

  // Return response to the caller
  callback(null, response); 
};

Вывод журнала из CloudWatch:

START RequestId: 247cd************************480b Version: $LATEST
END RequestId: 247cd************************480b
REPORT RequestId: 247247cd************************5b480b0b  Duration: 10962.61 ms   Billed Duration: 11000 ms   Memory Size: 128 MB Max Memory Used: 49 MB  

Я не уверен, где я иду не так.Пожалуйста, помогите!

1 Ответ

0 голосов
/ 05 апреля 2019

Похоже, что вы вызываете функцию обратного вызова обработчика до завершения функции exec, поскольку она продолжает работать асинхронно, что приводит к завершению лямбды.

Обязательно перезванивайте только после того, как это будет сделано. (это можно сделать, передав параметр обратного вызова в функцию start).

Чек https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...