Serverless 解惑——函数计算如何安装字体

服务器
Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。

 本文转载自微信公众号「Serverless」,作者孙飞宇。转载本文请联系Serverless公众号。

前言

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

函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。

[[337725]]
[[337725]]

Fun:Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。Fun 的更多文档 参考

 

[[337726]]

 

[[337725]]

 

 

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

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

 

1. 你需要做什么

在代码(CodeUri)目录新建一个 fonts 目录;

将字体复制到 fonts 目录;

使用 fun deploy 进行部署。

2. 工具安装

建议直接从这里下载二进制可执行程序,解压后即可直接使用。下载地址[[337725]]

 

执行 fun --version 检查 Fun 是否安装成功。

  1. $ fun --version 
  2. 3.6.7 

3. 示例

demo 涉及的代码,托管在 github 上。项目目录结构如下:

 

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

index.js 中代码:

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

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

template.yml:

  1. ROSTemplateFormatVersion: '2015-09-01' 
  2. Transform: 'Aliyun::Serverless-2018-04-03' 
  3. Resources: 
  4.   fonts-service: # 服务名 
  5.     Type: 'Aliyun::Serverless::Service' 
  6.     Properties: 
  7.       Description: fonts example 
  8.     fonts-function: # 函数名 
  9.       Type: 'Aliyun::Serverless::Function' 
  10.       Properties: 
  11.         Handler: index.handler 
  12.         Runtime: nodejs8 
  13.         CodeUri: ./ 
  14.         InstanceConcurrency: 10 
  15.       Events: 
  16.         http-test: 
  17.           Type: HTTP 
  18.           Properties: 
  19.             AuthType: ANONYMOUS 
  20.             Methods: 
  21.               - GET 
  22.               - POST 
  23.               - PUT 
  24.  
  25.   tmp_domain: # 临时域名 
  26.     Type: 'Aliyun::Serverless::CustomDomain' 
  27.     Properties: 
  28.       DomainName: Auto 
  29.       Protocol: HTTP 
  30.       RouteConfig: 
  31.         Routes: 
  32.           /: 
  33.             ServiceName: fonts-service 
  34.             FunctionName: fonts-function 

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

1)下载字体

你可以通过 这里 下载自定义字体 Hack,然后复制字体到 fonts 目录。

此时 demo 目录结构如下:

  1. $ tree -L 2 -a 
  2.  
  3. ├── fonts(+) 
  4. │   ├── Hack-Bold.ttf 
  5. │   ├── Hack-BoldItalic.ttf 
  6. │   ├── Hack-Italic.ttf 
  7. │   └── Hack-Regular.ttf 
  8. ├── index.js 
  9. ├── package.json 
  10. └── template.yml 

2)安装依赖

  1. $ npm install 

3)部署到函数计算

可以通过 fun deploy 直接发布到远端。

 

4)预览线上效果

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

 

打开浏览器,输入临时域名并回车:

 

可以看到字体 Hack 已生效!!!

原理介绍

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

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

  • 将 fonts 目录添加到 .nas.yml;
  • 将 fonts 对 nas 的映射目录追加到 .fonts.conf 配置。

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

总结

你只需要在代码(CodeUri)目录新建一个 fonts 目录,然后复制所有字体到该目录即可。Fun 会自动帮你处理配置文件(.fonts.conf),环境变量以及大依赖场景的情况。如果大家在使用 Fun 的过程中遇到了一些问题,可以在 github 上提 issue,或者加入我们的钉钉群进行反馈(钉钉搜索群号 11721331 即可进群)。

 

责任编辑:武晓燕 来源: Serverless
相关推荐

2017-09-12 15:56:43

边缘计算云计算架构

2012-03-23 14:02:11

云计算

2015-01-13 11:18:21

云计算十大困惑

2020-04-03 13:12:09

函数架构 Serverless

2021-01-29 12:33:21

云计算Serverless架构

2015-01-13 10:40:22

云计算十大困惑

2010-04-01 16:04:26

CentOS系统

2021-01-11 13:46:02

云计算Serverless 数字化

2022-12-27 08:10:00

2009-12-10 09:40:01

linux安装字体

2010-04-08 09:09:21

IT外包

2018-02-27 12:41:21

Serverless边缘计算存储

2009-08-17 07:43:42

Linux命令行安装字linux命令行安装彩色字体设置

2015-01-13 10:11:21

云计算十大困惑

2022-05-06 19:53:33

Java serve

2018-05-24 13:58:03

LinuxGoogle Web字Font Finder

2022-07-19 16:54:50

iPaaSServerlessFaaS平台

2023-08-27 15:20:58

Serverless架构开发

2022-04-01 06:13:03

Serverless数据库

2010-01-07 10:14:41

点赞
收藏

51CTO技术栈公众号