Сборка node-canvas для AWS Lambda
Я Linux и нуб нуб. Я пытаюсь запустить FabricJS (которая требует node-canvas) в AWS Lambda. Я смог следовать инструкциям по установке и запуску на AWS Linux EC2, однако у Lambda меня хватило ума. У кого-нибудь есть какие-либо советы или указатели о том, как это скомпилировать для AW Lambda?
2 ответа
Я нашел эту проблему на сайте GitHub Node Canvas. Спрашивающий пытался запустить FabricJS и в Lambda. Вот соответствующий раздел с ответом:
Убедитесь, что вы компилируете это на том же AMI, который в настоящее время использует lambda: http://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html
Лямбда запускается в /var/task (это путь, когда вы распаковываете), поэтому что-то.so в корне zip-файла будет в /var/task/something.so.
Затем мы хотим собрать наши библиотеки, используя "rpath":
export LDFLAGS=-Wl,-rpath=/var/task/
- Компилируйте библиотеки в соответствии с: https://github.com/Automattic/node-canvas/wiki/Installation---Amazon-Linux-AMI-%28EC2%29
Вы можете установить префикс = ~/canvas, чтобы все файлы были в одном месте.
Установите node-canvas с помощью npm
cd node_modules/canvas; восстановление узла
mkdir ~/pkg и cp файлы.so (~/canvas/lib/*.so), использующие -L для разыменования символических ссылок.
scp каталог pkg в локальную лямбда-папку, возможно, разместив файлы в нужных местах. (. Так в корне, node_modules/canvas с другими библиотеками). Возможно, вы захотите изменить это.
Вот плагин gulp, который может загружать ваши файлы вместе с node-canvas и его двоичным файлом зависимостей, специально созданным для aws lambda.
'use strict';
//This is a sample gulp file that can be used.
//npm install --save gulp gulp-zip gulp-awslambda
const gulp = require('gulp');
const zip = require('gulp-zip');
const path = require('path');
const lambda = require('gulp-awslambda');
const aws_lambda_node_canvas = require('./');
let runtime = 'nodejs4.3' // nodejs or nodejs4.3
const lambda_params = {
FunctionName: 'NodeCanvas', /* Lambda function name */
Description: 'Node canvas function in aws lambda', //Description for your lambda function
Handler: 'main.lambda_handler', //Assuming you will provide main.py file with a function called handler.
MemorySize: 128,
Runtime: runtime,
Role : 'ROLE_STRING',//eg:'arn:aws:iam::[Account]:role/lambda_basic_execution'
Timeout: 50
};
var opts = {
region : 'ap-southeast-2'
}
gulp.task('default', () => {
return gulp.src(['main.js', '!node_modules/**/*','!dist/**/*','!node_modules/aws-lambda-node-canvas/**/*']) //Your src files to bundle into aws lambda
.pipe(aws_lambda_node_canvas({runtime : runtime})) //Adds all the required files needed to run node-canvas in aws lambda
.pipe(zip('archive.zip'))
.pipe(lambda(lambda_params, opts))
.pipe(gulp.dest('dist')); //Also place the uploaded file
});