来源 | Serverless

作者 | 孙飞宇

头图 | 下载于视觉中国

前言

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

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

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

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

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

1. 你需要做什么

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

  • 将字体复制到 fonts 目录;

  • 使用 fun deploy 进行部署。

2. 工具安装

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

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

1$ fun --version
23.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
3var fontList = require('font-list')
4
5module.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:

 1ROSTemplateFormatVersion: '2015-09-01'2Transform: 'Aliyun::Serverless-2018-04-03'3Resources:4  fonts-service: # 服务名5    Type: 'Aliyun::Serverless::Service'6    Properties:7      Description: fonts example8    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 -a23├── fonts(+)4│   ├── Hack-Bold.ttf5│   ├── Hack-BoldItalic.ttf6│   ├── Hack-Italic.ttf7│   └── Hack-Regular.ttf8├── index.js9├── package.json
10└── template.yml2)安装依赖
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),环境变量以及大依赖场景的情况。

更多阅读推荐

  • 乱中有变,云原生从“大爆发”说起

  • 疫情中的2021,云原生会走向哪里

  • 分布式架构的王者?Kubernetes凭什么

  • Mendix入局中国低代码,开发者们你准备好了吗

  • 信息如何实现病毒式传播?一文看懂Gossip协议

  • 看穿容器的外表,Linux容器实现原理演示

更多阅读推荐

  • 都在说云原生,它的技术图谱你真的了解吗?

  • SRE 是如何保障稳定性的

  • 如何写出让 CPU 跑得更快的代码?

  • Serverless 在 SaaS 领域的最佳实践

  • 云原生人物志|Pulsar翟佳:社区的信任最重要

  • 一目了然的 Docker 环境配置指南

小困惑,关于 Serverless 函数计算的字体安装相关推荐

  1. 基于阿里云 Serverless 函数计算开发的疫情数据统计推送机器人

    一.Serverless函数计算 什么是Serverless? 在<Serverless Architectures>中对 Serverless 是这样子定义的: Serverless w ...

  2. 从零入门 Serverless | 函数计算的可观测性

    作者 | 夏莞 阿里巴巴函数计算团队 本文整理自<Serverless 技术公开课>,关注"Serverless"公众号,回复"入门",即可获取 S ...

  3. 百度 Serverless 函数计算引擎 EasyFaaS 正式开源

    "2021年4月,百度函数计算引擎 EasyFaaS,正式开源!" 1.什么是 EasyFaaS? EasyFaaS 是一个依赖轻.适配性强.资源占用少.无状态且高性能的函数计算服 ...

  4. 从零入门 Serverless | 函数计算的开发与配置

    作者 | 孔德慧(夏莞)  阿里云函数计算开发工程师 来源 | Serverless 公众号,本文整理自<Serverless 技术公开课> 导读:在本篇文章中,"基本概念&qu ...

  5. C++小作业-用友元函数计算Boat和Car类对象的总重量

    一.问题描述 [问题描述]定义Boat与Car两个类,二者都有weight属性,定义二者的一个友元函数totalWeight(),计算二者的重量和. [输入形式]卡车和轮船的重量 [输出形式]卡车和轮 ...

  6. Serverless 实战 —— 函数计算 + Typescript 实践

    Serverless 实战 -- 函数计算 + Typescript 实践 前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务 ...

  7. 从函数计算到 Serverless 架构

    作者:秋雨陈 前言 随着 Serverless 架构不断发展,各云厂商和开源社区都已经布局 Serverless 领域,一方面表现在云厂商推出传统服务/业务的 Serverless 化版本,或者 Se ...

  8. 场景实践:使用函数计算打包下载OSS文件

    体验简介 本场景将提供一台配置了Centos 7.7版本的ECS实例(云服务器)和对象存储OSS实例. 通过本教程的操作,您可以基于已有的环境使用函数计算将对象存储OSS上多个文件(Object)打包 ...

  9. 深度揭秘阿里云函数计算异步任务能力

    作者: 渐意 在上篇文章<解密函数计算异步任务能力之「任务的状态及生命周期管理」>中,我们介绍了任务系统的状态管理,并介绍了用户应如何根据需求,对任务状态信息进行实时的查询等操作.在本篇中 ...

最新文章

  1. VC++生成序列号和注册机总结
  2. LaTeX单栏和双栏设置
  3. 内容创业时代,粉丝已死
  4. boost::test模块测试从数据集对主测试套件的访问
  5. 服务器安全:浏览器同源策略与跨域请求、XSS攻击原理及防御策略、如何防御CSRF攻击
  6. Symfony2Book03:使用Symfony2创建页
  7. 康美药业财务造假给股民造成的损失,股民该怎么办?
  8. Android之解决aidl里面函数参数太大不能跨进程通信的问题
  9. .net VS Java 到底谁吃香?
  10. makefile函数集锦【转】
  11. 小米路由器3潘多拉固件刷机教程
  12. 阿里 java 面试题 p6_「独家」五面阿里P6:Java开发面试题及答案
  13. python学习 —— post请求方法的应用
  14. adb: failed to install xxx Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]
  15. BT源代码学习心得(六):跟踪服务器(Tracker)的代码分析(初始化) -- 转贴自 wolfenstein (NeverSayNever)
  16. python 图灵机器人
  17. resnet50中的bottleneck
  18. python opencv设置不同的视频编解码器参数
  19. 从零开始系统学习C/C++,深度理解一门编程语言的应用与未来发展
  20. 模式,动态,数据化及其他

热门文章

  1. Java7运行applet_Java applet不会在JRE7下运行,控制台中不会显示错误
  2. hbuid 集成svn_HBuilder如何配置SVN的步骤详解
  3. php输入安全验证漏洞,PHP 输入验证错误漏洞
  4. 超实用!18 个开箱即用的 Shell 脚本,拿好了~
  5. 12名高校教师被降级!打破职称终身制,山东在行动!
  6. 如果唐朝人拿到一篇现代文章……
  7. 又一位…8月,痛失6位院士!
  8. 如何假装自己读懂了《时间简史》
  9. TCP/IP协议详解 卷一(阅读指导)
  10. osg布告板技术(Billboard)