在ws lambda中的Wkhtmltopdf

时间:2018-03-23 21:40:58

标签: aws-lambda wkhtmltopdf

我正在https://www.drivenbycode.com/creating-pdfs-from-html-with-aws-lambda-and-api-gateway/

上尝试样本

我陷入了考验。当我进行测试运行时,我得到如下错误:

    Execution result: failed(logs)
Details
The area below shows the result returned by your function execution. Learn more about returning results from your function.
{
  "errorMessage": "RequestId: e518cd5c-2ee0-11e8-9af4-abd55dea481f Process exited before completing request"
}
Summary

Code SHA-256
kFqfcOZdsw5hmmn2VZ62QVULXrwqdh3jMDh90EJR4gI=
Request ID
e518cd5c-2ee0-11e8-9af4-abd55dea481f
Duration
1383.09 ms
Billed duration
1400 ms
Resources configured
128 MB
Max memory used
40 MB
Log output
The area below shows the logging calls in your code. These correspond to a single row within the CloudWatch log group corresponding to this Lambda function. Click here to view the CloudWatch log group.
START RequestId: e518cd5c-2ee0-11e8-9af4-abd55dea481f Version: $LATEST
2018-03-23T21:26:49.954Z    e518cd5c-2ee0-11e8-9af4-abd55dea481f    TypeError: Cannot read property 'toString' of null
    at Response.<anonymous> (/var/task/index.js:25:45)
    at Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:364:18)
    at Request.callListeners (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:105:20)
    at Request.emit (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
    at Request.emit (/var/task/node_modules/aws-sdk/lib/request.js:683:14)
    at Request.transition (/var/task/node_modules/aws-sdk/lib/request.js:22:10)
    at AcceptorStateMachine.runTo (/var/task/node_modules/aws-sdk/lib/state_machine.js:14:12)
    at /var/task/node_modules/aws-sdk/lib/state_machine.js:26:10
    at Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:38:9)
    at Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:685:12)
END RequestId: e518cd5c-2ee0-11e8-9af4-abd55dea481f
REPORT RequestId: e518cd5c-2ee0-11e8-9af4-abd55dea481f  Duration: 1383.09 ms    Billed Duration: 1400 ms    Memory Size: 128 MB Max Memory Used: 40 MB  
RequestId: e518cd5c-2ee0-11e8-9af4-abd55dea481f Process exited before completing request

我已按要求准备了索引文件。我做的唯一改变就是桶的名称。

当测试运行退出时,它会在正确的存储桶中创建test.pdf,但具有以下内容:

AccessDeniedAccess DeniedA6FF69637CAFDA68RjoN8UiT+V5MzrWN0G4h3SeIKgdu6eybNCtQMf+h+x5WxFwI1OyvF0Z2K6fhMP0RRn3RtStEKps=

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

从您的pdf var看起来是不确定的。

遵循相同的指南时,我遇到了这个问题。

这是因为您没有在lambda函数项目根目录中包含wkhtmltopdf二进制文件。

这时您有两个选择。您可以自己在Amazon Linux AMI EC2实例中构建二进制文件,我听说这很麻烦,也可以从其他人那里获取二进制文件,如果它来自非官方来源,我不推荐这样做,但是,您可以找到版本12.4(当前撰写本文时,版本为12.5)here

如果您想自行构建,AWS Lambda可以在Amazon Linux AMI上运行,则可以找到当前版本here。 (有关在AWS Lambda中运行可执行文件的更多info信息。

一旦有了二进制文件,请将其包含在项目根目录中并确保其可执行文件chmod +x wkhtmltopdf

希望这对遇到此问题的其他人有所帮助。

其他有用的链接:

发生AccessDeniedAccess错误是因为存储桶及其内容不是公开的。要以授权用户身份下载文件,您必须通过aws控制台中文件的属性菜单下载文件,而不是尝试访问链接。 S3 download guide

答案 1 :(得分:0)

您只需要使用合适版本的wkhtmltopdf.sh文件。 lambda支持64位二进制文​​件(仅64位)。