当前位置: 首页 > 科技观察

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

时间:2023-03-11 21:44:05 科技观察

本文转载请联系Serverless公众号。前言首先介绍了本文中出现的几个重要概念:函数计算:函数计算是一个事件驱动的服务。通过函数计算,用户无需管理服务器的运行,只需要编写代码并上传即可。函数计算以弹性伸缩的方式准备计算资源和运行用户代码,用户只需为实际代码运行消耗的资源付费。Fun:Fun是一款支持Serverless应用部署的工具,可以帮助您轻松管理函数计算、API网关、日志服务等资源。它通过一个资源配置文件(template.yml)协助您开发、构建和部署。Fun参考更多文档注意:本文中介绍的技巧需要Fun版本大于等于3.6.7。函数计算运行环境内置了一些常用的字体,但仍然不能满足部分用户的需求。如果需要在应用中使用其他字体,则需要走很多弯路。本文将介绍如何通过Fun工具将自定义字体部署到函数计算中,并在应用中正确引用。1.你需要做什么在代码(CodeUri)目录下新建一个fonts目录;将字体复制到字体目录;使用fundeploy进行部署。2、建议直接从这里下载二进制可执行程序进行工具安装,解压后直接使用。在下载地址执行fun--version查看Fun是否安装成功。$fun--version3.6.73。示例demo中涉及的代码托管在github上。项目目录结构如下:$tree-L-a1├──index.js├──package.json└──template.ymlindex.jscode:'usestrict';varfontList=require('font-list')模块。exports.handler=asyncfunction(request,response,context){response.setStatusCode(200);response.setHeader('content-type','application/json');response.send(JSON.stringify(awaitfontList.getFonts(),null,4));};系统可用的字体在node包font-list的帮助下列在index.js中。template.yml:ROSTemplateFormatVersion:'2015-09-01'Transform:'Aliyun::Serverless-2018-04-03'Resources:fonts-service:#ServicenameType:'Aliyun::Serverless::Service'Properties:Description:fontsexamplefonts-function:#FunctionnameType:'Aliyun::Serverless::Function'Properties:Handler:index.handlerRuntime:nodejs8CodeUri:./InstanceConcurrency:10Events:http-test:Type:HTTPProperties:AuthType:ANONYMOUSMethods:-GET-POST-PUTtmp_domain:#临时域名Type:'Aliyun::Serverless::CustomDomain'Properties:DomainName:AutoProtocol:HTTPRouteConfig:Routes::ServiceName:fonts-serviceFunctionName:fonts-functiontemplate.yml定义了fonts-service服务,这个服务定义了一个名为fonts-function的http触发函数。在tmp_domain中配置自定义域名中路径(/)与功能(fonts-service/fonts-function)的映射关系。1)下载字体您可以从这里下载自定义字体Hack,然后将字体复制到fonts目录。此时的demo目录结构如下:$tree-L2-a├──fonts(+)│├──Hack-Bold.ttf│├──Hack-BoldItalic.ttf│├──Hack-Italic.ttf│└──Hack-Regular.ttf├──index.js├──package.json└──template.yml2)安装依赖$npminstall3)部署到函数计算可以直接发布到远端通过有趣的部署。4)预览在线效果。fundeploy部署过程中,会为该功能生成一个时间敏感的临时域名:打开浏览器,输入临时域名回车:可以看到字体Hack生效了!!!fundeploy时介绍过原理,如果检测到CodeUri下有fonts目录,会在CodeUri目录下为用户生成一个.fonts.conf配置文件。在这个配置中,相对于原来的/etc/fonts/fonts.conf配置,增加了/code/fonts作为字体目录。在template.yml中自动添加环境变量,FONTCONFIG_FILE=/code/.fonts.conf,以便函数运行时可以正确读取自定义字体目录。如果依赖过大,超过了函数计算的限制(50M),则:将fonts目录添加到.nas.yml;在.fonts.conf配置中追加字体到nas的映射目录。fundeploy对大依赖的支持,请参考《开发函数计算的正确姿势——轻松解决大依赖部署》总结只需要在代码(CodeUri)目录下创建一个fonts目录,然后将所有字体复制到该目录即可。Fun会自动为您处理配置文件(.fonts.conf)、环境变量和大依赖场景。如果您在使用趣味的过程中遇到一些问题,可以在github上提issue,或者加入我们的钉钉群反馈(群聊搜索群号11721331进群)。