【发布时间】:2019-01-28 13:50:45
【问题描述】:
我需要上传一个可执行文件(确切地说是 wkhtmltopdf)以及我在 aws lambda 中的函数代码。我正在使用无服务器框架。我尝试了不同的方法,但没有上传 exe。通过 aws 仪表板压缩和上传代码时,该功能运行良好。
下面给出的是需要上传的函数的目录结构
node_modules index.js wkhtmltopdf
这是我的 serverless.yml
service: consult-payment-api
frameworkVersion: ">=1.1.0 <2.0.0"
package:
individually: true
provider:
name: aws
region: us-west-2
runtime: nodejs8.10
stage: dev
timeout: 300
functions:
UserPackageCharge:
handler: payment/module/chargePackage.create
package:
include:
- packages/wkhtmltopdf
events:
- http:
path: payment/module/package
method: post
cors:
origin: '*'
headers:
- Content-Type
- X-Amz-Date
- Authorization
- X-Api-Key
- X-Amz-Security-Token
- X-Amz-User-Agent
- My-Custom-Header
这是我的 index.js(处理程序)
var wkhtmltopdf = require('wkhtmltopdf');
var MemoryStream = require('memorystream');
process.env['PATH'] = process.env['PATH'] + ':' + process.env['LAMBDA_TASK_ROOT'];
exports.handler = function(event, context) {
var memStream = new MemoryStream();
var html_utf8 = new Buffer(event.html_base64, 'base64').toString('utf8');
wkhtmltopdf(html_utf8, event.options, function(code, signal) { context.done(null, { pdf_base64: memStream.read().toString('base64') }); }).pipe(memStream);
};
但我仍然收到错误“错误:/bin/bash: wkhtmltopdf: command not found” 如何让它在无服务器中工作?
【问题讨论】:
-
你使用的是什么操作系统?
-
您包含在 lambda zip 文件中的所有内容都部署在 lambda 执行中的 /var/task 中。通过这种方式,您可以在 zip 中添加二进制文件,并在调用路径 /var/task/ 的代码中检索它。请记住,您的二进制文件应该使用静态选项编译,以避免由于依赖关系而导致的错误。
-
包含您自己的可执行文件很容易;只需将它们打包到您上传的 ZIP 文件中,然后在您从 Node.js 或您之前启动的其他进程中调用它们时引用它们(包括您创建的 ZIP 文件中的相对路径)。确保在函数代码的开头包含以下内容: process.env['PATH'] = process.env['PATH'] + ':' + process.env['LAMBDA_TASK_ROOT']
-
@Erndob Lambda 使用 Amazon Linux 我猜
-
感谢您的建议。但是这些并不能帮助我在无服务器框架上工作
标签: amazon-web-services aws-lambda wkhtmltopdf serverless-framework serverless