对于AWS Lambda,EC2中是否有人知道类似 ebextensions [2]的内容?
目标是在AWS Lambda执行环境中安装自定义字体。
有很多方法可以为库和工具提供字体,但最简单的方法是通过操作系统包含它们。
还在AWS论坛上回复询问: https://forums.aws.amazon.com/thread.jspa?messageID=807139󅃣
答案 0 :(得分:5)
这就是我需要使用pandoc / xelatex在AWS Lambda上自定义字体的工作。
我在项目中创建了一个fonts
目录,并将所有字体放置在那里。同样在该目录中,我创建了一个fonts.conf
文件,如下所示:
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<dir>/var/task/fonts/</dir>
<cachedir>/tmp/fonts-cache/</cachedir>
<config></config>
</fontconfig>
然后,在我的(基于node.js的)处理函数中,在炮轰出pandoc之前,我设置了一个ENV变量来告诉fontconfig在哪里找到字体。
process.env.FONTCONFIG_PATH='/var/task/fonts'
完成此操作后,我可以在模板中按名称(仅Bitter
引用一种字体,例如Bitter
,然后使用pandoc / xelatex / fontconfig /无论知道使用哪种字体(例如Bitter-Bold.otf
与Bitter-Italic.otf
之类的内容)是基于任何一点文字都应该具有的样式。
我是根据该项目中的技巧弄明白这一点的,以使RSVG可以在Lambda上使用自定义字体:https://github.com/claudiajs/rsvg-convert-aws-lambda-binary/blob/master/README.md#using-custom-fonts
答案 1 :(得分:1)
关于在Lambda上使用字体的这个问题的很多答案都有些不完整。
我的方案需要结合使用自定义字体和Imagemagick。我签出了branch with Imagemagick and Freetype support,并完成了README。我的用例的关键是在需要freetype支持才能访问我的字体的函数中使用的lambda或lambda层。我正在使用TTF。
在部署lambda层之后,在我的Lambda函数的目录中,执行以下操作:
fonts
目录。
fonts
目录中,添加TTF或您的字体。
/var/task/fonts
。fonts
目录中包含以下fonts.conf
。<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<dir>/var/task/fonts/</dir>
<cachedir>/tmp/fonts-cache/</cachedir>
<config></config>
</fontconfig>
package:
include:
- fonts/**
因为现在可以在lambda层中访问freetype,所以可以访问fonts目录中的所有字体。可能还需要动态下载所需的字体,但我决定在我的lambda函数中选择“ include”。
答案 2 :(得分:0)
论坛帖子上的官方AWS回复仍然是正确的。
目前,无法自定义Lambda环境。如果您需要其他软件包,可以在Amazon Linux上构建并将它们放入您上传的zip文件中。
这就是您可以在Lambda环境中“安装”任何内容的程度。
最简单的方法是通过操作系统包含它们。
可以说是这样,但这并不是Lambda的工作方式。
答案 3 :(得分:0)
将资产与代码打包在一起,或者让它从s3中获取。这是我们使用Lambda自定义字体生成PDF的方式。
Serverless Framework之类的内容会自动为您执行此操作(上传代码+ deps资产)。
当你deploy
时,它会创建一个zip文件,其中包含您的代码,依赖项以及该文件夹中的其他内容。然后它会自动将其上传到S3,并在CloudFormation的帮助下进行部署。
答案 4 :(得分:0)
我按照this gist上的说明进行了操作,尽管它很吸引人(尽管在我的“配置fontconfig”和“安装和缓存字体”部分中,/tmp/…/fontconfig
似乎真的是{{1} })