
前言
首先介紹下在本文出現的幾個比較重要的概念:
函數計算(Function Compute): 函數計算是一個事件驅動的服務,通過函數計算,使用者無需管理伺服器等運作情況,隻需編寫代碼并上傳。函數計算準備計算資源,并以彈性伸縮的方式運作使用者代碼,而使用者隻需根據實際代碼運作所消耗的資源進行付費。函數計算更多資訊 參考 。Fun: Fun 是一個用于支援 Serverless 應用部署的工具,能幫助您便捷地管理函數計算、API 網關、日志服務等資源。它通過一個資源配置檔案(template.yml),協助您進行開發、建構、部署操作。Fun 的更多文檔![]()
Serverless 解惑——函數計算如何安裝字型
備注: 本文介紹的技巧需要 Fun 版本大于等于 3.6.7。
函數計算運作環境中内置一些常用字型,但仍不滿足部分使用者的需求。如果應用中需要使用其它字型,需要走很多彎路。本文将介紹如何通過
Fun工具将自定義字型部署到函數計算,并正确的在應用中被引用。
你需要做什麼?
- 在代碼(CodeUri)目錄建立一個 fonts 目錄
- 将字型複制到 fonts 目錄
- 使用 fun deploy 進行部署
工具安裝
建議直接從這裡下載下傳二進制可執行程式,解壓後即可直接使用。
下載下傳位址執行
fun --version
檢查 Fun 是否安裝成功。
$ fun --version
3.7.0
示例
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 已生效!!!
原理介紹:
- 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、容器、Service Mesh 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,做最懂雲原生開發者的技術圈。”