前言

首先介绍下在本文呈现的几个比拟重要的概念:

函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需治理服务器等运行状况,只需编写代码并上传。函数计算筹备计算资源,并以弹性伸缩的形式运行用户代码,而用户只需依据理论代码运行所耗费的资源进行付费。函数计算更多信息 参考 Fun:Fun 是一个用于反对 Serverless 利用部署的工具,能帮忙您便捷地治理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件(template.yml),帮助您进行开发、构建、部署操作。Fun 的更多文档 参考。

备注: 本文介绍的技巧须要 Fun 版本大于等于 3.6.7。

函数计算运行环境中内置一些罕用字体,但仍不满足局部用户的需要。如果利用中须要应用其它字体,须要走很多弯路。本文将介绍如何通过 Fun 工具将自定义字体部署到函数计算,并正确的在利用中被援用。

你须要做什么

  1. 在代码(CodeUri)目录新建一个 fonts 目录;
  2. 将字体复制到 fonts 目录;
  3. 应用 fun deploy 进行部署。

工具装置

倡议间接从这里下载二进制可执行程序,解压后即可间接应用。下载地址

执行 fun --version 查看 Fun 是否装置胜利。

$ fun --version3.6.7

示例

demo 波及的代码,托管在 github 上。我的项目目录构造如下:

$ tree -L -a 1├── index.js├── package.json└── template.yml

index.js 中代码:

'use strict';var fontList = require('font-list')module.exports.handler = async function (request, response, context) { response.setStatusCode(200); response.setHeader('content-type', 'application/json'); response.send(JSON.stringify(await fontList.getFonts(), null, 4));};

index.js 中借助 node 包 font-list 列出零碎上可用的字体。

template.yml:

ROSTemplateFormatVersion: '2015-09-01'Transform: 'Aliyun::Serverless-2018-04-03'Resources:  fonts-service: # 服务名    Type: 'Aliyun::Serverless::Service'    Properties:      Description: fonts example    fonts-function: # 函数名      Type: 'Aliyun::Serverless::Function'      Properties:        Handler: index.handler        Runtime: nodejs8        CodeUri: ./        InstanceConcurrency: 10      Events:        http-test:          Type: HTTP          Properties:            AuthType: ANONYMOUS            Methods:              - GET              - POST              - PUT  tmp_domain: # 长期域名    Type: 'Aliyun::Serverless::CustomDomain'    Properties:      DomainName: Auto      Protocol: HTTP      RouteConfig:        Routes:          /:            ServiceName: fonts-service            FunctionName: fonts-function

template.yml 中定义了名为 fonts-service 的服务,此服务下定义一个名为 fonts-function 的 http trigger 函数。tmp_domain 中配置自定义域名中门路(/)与函数(fonts-service/fonts-function)的映射关系。

1. 下载字体

你能够通过这里下载自定义字体 Hack,而后复制字体到 fonts 目录。

此时 demo 目录构造如下:

$ tree -L 2 -a├── fonts(+)│   ├── Hack-Bold.ttf│   ├── Hack-BoldItalic.ttf│   ├── Hack-Italic.ttf│   └── Hack-Regular.ttf├── index.js├── package.json└── template.yml

2. 装置依赖

$ npm install

3. 部署到函数计算

能够通过 fun deploy 间接公布到远端。

4. 预览线上成果

fun deploy 部署过程中,会为此函数生成有时效性的长期域名:

关上浏览器,输出长期域名并回车:

能够看到字体 Hack 已失效!!!

原理介绍:

  1. fun deploy 时,如果检测到 CodeUri 上面有 fonts 目录,则为用户在 CodeUri 目录生成一个 .fonts.conf 配置文件。在该配置中,相比于原来的 /etc/fonts/fonts.conf 配置,增加了 /code/fonts 作为字体目录。
  2. 主动在 template.yml 中增加环境变量,FONTCONFIG_FILE = /code/.fonts.conf,这样在函数运行时就能够正确的读取到自定义字体目录。

如果依赖过大,超过函数计算的限度(50M)则:

  1. 将 fonts 目录增加到 .nas.yml;
  2. 将 fonts 对 nas 的映射目录追加到 .fonts.conf 配置。

fun deploy 对大依赖的反对可参考《开发函数计算的正确姿态——轻松解决大依赖部署》

总结

你只须要在代码(CodeUri)目录新建一个 fonts 目录,而后复制所有字体到该目录即可。Fun 会主动帮你解决配置文件(.fonts.conf),环境变量以及大依赖场景的状况。如果大家在应用 Fun 的过程中遇到了一些问题,能够在 github 上提 issue,或者退出咱们的钉钉群进行反馈(钉钉搜寻群号 11721331 即可进群)。