我需要在aws lambda中上传可执行文件(确切地说是wkhtmltopdf)以及功能代码。我正在使用无服务器框架。我尝试了不同的方法,但是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:找不到命令” 如何在无服务器的环境下工作?
答案 0 :(得分:2)
我确实可以使用一个版本。
这就是我所做的:
1)创建一个package.json并添加:
“依赖项”:{
“ wkhtmltopdf”:“ ^ 0.3.4”,
“ memorystream”:“ ^ 0.3.1”
},
2)运行ndm install
3)在目录中添加了WKhtmltopdf:
4)在serverless.yml中添加了它
包装:
包括:
-wkhtmltopdf
5)在lambda中添加了此代码:
var wkhtmltopdf = require('wkhtmltopdf');
var MemoryStream = require('memorystream');
就是这样希望对您有所帮助。
答案 1 :(得分:0)
我可以建议使用Python,因为这是我最近在项目中实现的。我将所有的lambda脚本和依赖项python脚本放在一个zip中,并将它们放在堡垒服务器上。为了使这些文件更易于执行和上传,我实现了cow + click cli,以确保获得正确版本的zip,然后将其上传到s3存储桶位置。当基于s3事件触发lambda时,它将在存储库中查找所需的参数文件或输入文件(仅是s3存储桶)。