【问题标题】:node-canvas build for AWS Lambda为 AWS Lambda 构建节点画布
【发布时间】:2016-02-29 00:45:45
【问题描述】:

我是 Linux 和节点菜鸟。我正在尝试在 AWS Lambda 中运行 FabricJS(需要节点画布)。我已经能够按照说明在 AWS Linux EC2 上启动和运行,但是,Lambda 让我束手无策。有人对如何为 AW Lambda 编译此文件有任何提示或指示吗?

【问题讨论】:

    标签: fabricjs aws-lambda node-canvas


    【解决方案1】:

    这是一个 gulp 插件,它可以上传您的文件以及 node-canvas 及其专为 aws lambda 构建的依赖项二进制文件。

    NPM Package

    '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 
    });
    

    【讨论】:

      【解决方案2】:

      我在Node Canvas GitHub site 中发现了这个问题。提问者也试图在 Lambda 中运行 FabricJS。以下是相关部分的答案:

      1. 确保您在 lambda 当前使用的同一个 AMI 上编译它: http://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html

      2. Lambda 运行在 /var/task(这是解压缩时的路径),因此 zip 文件根目录下的 something.so 将位于 /var/task/something.so。

      然后我们想使用“rpath”来构建我们的库:

         export LDFLAGS=-Wl,-rpath=/var/task/
      
      1. 根据:https://github.com/Automattic/node-canvas/wiki/Installation---Amazon-Linux-AMI-%28EC2%29编译库

      您可能希望设置前缀= ~/canvas 以将所有文件放在一个位置。

      1. 使用 npm 安装 node-canvas

      2. cd 节点模块/画布;节点gyp重建

      3. mkdir ~/pkg 和 cp 那里的 .so 文件 (~/canvas/lib/*.so),使用 -L 取消引用符号链接。

      4. scp 将 pkg 目录复制到本地 lambda 文件夹,可能会将文件放在正确的位置。 (.so 在根目录,node_modules/canvas 和其他库)。您可能需要重新排列。

      【讨论】:

        猜你喜欢
        • 2017-08-14
        • 2017-03-01
        • 2016-05-22
        • 1970-01-01
        • 2022-07-20
        • 2016-05-13
        • 1970-01-01
        • 2021-01-10
        • 1970-01-01
        相关资源
        最近更新 更多