В Lambda вы можете запускать практически все, что угодно, если оно совместимо с двоичными данными со средой выполнения Lambda и может вписываться в пакет развертывания.Но вы должны обернуть его в функцию, написанную на одном из поддерживаемых языков.Это на удивление более эффективно и эффективно, чем вы могли бы ожидать, особенно если вы можете написать свой код на другом языке, чтобы он мог порождаться один раз для каждого контейнера и обмениваться сериализованными сообщениями с функцией Lambda.Или вы можете просто запустить внешнюю программу один раз за вызов.
В Lambda-консоли есть «план», называемый node-exec
, который иллюстрирует простой пример.Его источник таков:
'use strict';
const exec = require('child_process').exec;
exports.handler = (event, context, callback) => {
if (!event.cmd) {
return callback('Please specify a command to run as event.cmd');
}
const child = exec(event.cmd, (error) => {
// Resolve with result of process
callback(error, 'Process complete!');
});
// Log process stdout and stderr
child.stdout.on('data', console.log);
child.stderr.on('data', console.error);
};
Этого достаточно, чтобы дать вам представление о том, как это можно сделать.
Системный Perl в среде выполнения Lambda / Node 6 - perl5 (редакция5 версия 16 subversion 3).
Там, где задачу можно одинаково эффективно выполнить с одним из поддерживаемых на родном языке языков, использование одного из поддерживаемых языков - это почти наверняка путь ... и если вы знаете Perlи, в частности, если вы также работали с асинхронными средами, такими как Mojolicious, вы, возможно, не так уж далеки от возможности продуктивно работать с Node за относительно короткое время.
Но один пример, когда запуск Perl в Lambda былподходящим выбором для меня было декодирование устаревших данных, сериализованных с Storable::freeze()
и затем закодированных в base64.Storable - это формат сериализации, специфичный для Perl.Лямбда-функция My Node передает данные события в сценарий Perl (порожденный child_process.exec
) как JSON на STDIN, который записывает декодированный результат (также в JSON) в STDOUT, где код Node захватывает его и вызывает обратный вызов.Скрипт Perl продолжает выполняться между вызовами.Время выполнения для всего вызова в нагретом контейнере составляет <4 мс. </p>