在AWS Lambda中包含自定义字体

时间:2017-09-29 09:50:54

标签: amazon-web-services lambda fonts

对于AWS Lambda,EC2中是否有人知道类似 ebextensions [2]的内容?

目标是在AWS Lambda执行环境中安装自定义字体。

有很多方法可以为库和工具提供字体,但最简单的方法是通过操作系统包含它们。

还在AWS论坛上回复询问: https://forums.aws.amazon.com/thread.jspa?messageID=807139&#807139

[2] How I install specific fonts on my AWS EC2 instance?

5 个答案:

答案 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.otfBitter-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函数的目录中,执行以下操作:

  • 在我的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>
  • 最后,在serverless.yml中添加以下目录,以便您的fonts和fonts.conf将包含在lambda中。
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} })