小困惑,关于 Serverless 函数计算的字体安装
來源 | 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.73. 示例
demo 涉及的代碼,托管在??github?上。項目目錄結構如下:
1$?tree?-L?-a?1 2 3├──?index.js 4├──?package.json 5└──?template.ymlindex.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-functiontemplate.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 函数计算的字体安装的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Kubernetes 稳定性保障手册(极
- 下一篇: 月入过万的副业你要不要?不需要编程知识,