Serverless 实战 —— 函数计算 + Typescript 实践
前言
首先介绍下在本文出现的几个比较重要的概念:
函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息参考。
Aliyun Serverless VSCode Extension: 是阿里云 Serverless 产品 函数计算 Function Compute 的 VSCode 插件,该插件结合了函数计算 Funcraft:Funcraft 工具以及函数计算 SDK ,是一款 VSCode 图形化开发调试函数计算以及操作函数计算资源的工具。
Funcraft:Funcraft 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。Fun 的更多文档参考。
目标
本文打算以一个简单的 Serverless 函数计算项目为例,尝试使用 typescript + nodejs 进行开发,搭建一个简单的工程项目,实现如下小目标:
- 使用 typescript 编写业务代码
- 可以通过 Serverless VSCode 插件本地调试 typescript 代码
- 通过插件将项目代码部署到云端
项目示例图

实践
1. 前期准备 (可选)
- 在 VSCode 插件市场中搜索 Aliyun Serverless 插件并安装。

- 根据 aliyun/fun 中的教程安装并配置 Docker。
前期准备的目的是为了方便开发和调试,目前阿里云 Function Compute 提供了命令行工具 Funcraft 以及图形化 VSCode 插件。安装 Docker 是为了在本地模拟线上环境进行调试,如果想快速浏览下 nodejs + typescript 工程项目的搭建,可以跳过。
2. 环境搭建
配置 tsconfig.json
- 执行
tsc --init,将会在项目根目录生成tsconfig.json - 配置
tsconfig.json内容为:
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"noImplicitAny": true,
"outDir": "./dist/",
"sourceMap": true
},
"include": [
"./src"
]
}- 执行
配置 package.json
- 执行
npm init,将会在项目根目录生成package.json - 配置
package.json内容为:
{
"name": "fc-ts",
"version": "1.0.0",
"description": "Function Compute + Typescript",
"main": "index.js",
"scripts": {
"compile": "tsc -p ./"
}
}- 执行
编写业务代码
- 新建 src/index.ts 文件,编写内容如下:
export const handler = (
event: any,
context: any,
callback: (err: any, data: any) => void,
) => {
console.log(new String(event));
callback(null, 'hello world');
}将 ts 代码编译为 js 代码
- 在 Terminal 中输入
npm run compile - 完成后在项目根目录会有
dist文件夹以及dist/index.js、dist/index.js.map文件
- 在 Terminal 中输入
至此,我们搭建了一个常规的 typescript 项目,有 tsconfig.json、package.json、src 源码目录、dist 结果目录。其中,src/index.ts 文件中定义了一个 handler 方法,该方法符合函数计算中函数入口方法的定义。
3. 结合函数计算
在项目根目录新建
index.js文件,文件内容如下:const { handler } = require('./dist/index'); module.exports.handler = (event, context, callback) => {
handler(event, context, callback);
}这里又定义了一个 handler 方法,该方法中调用了编译后 js 文件中的 handler 方法。
在项目根目录新建
template.yml文件,文件内容如下:ROSTemplateFormatVersion: '2015-09-01'
Transform: 'Aliyun::Serverless-2018-04-03'
Resources:
demo: # service name
Type: 'Aliyun::Serverless::Service'
Properties:
Description: This is FC service
func01: # function name
Type: 'Aliyun::Serverless::Function'
Properties:
Handler: index.handler
Runtime: nodejs8
CodeUri: ./
MemorySize: 1024
Timeout: 15该文件中对我们的资源(即函数计算中的服务以及函数)进行了定义,具体内容可以参考:Fun 规范文档。
如果安装了 Serverless VSCode 插件,那么可以尝试下插件的智能提示,效果如图:
至此,我们就成功的将 typescript 项目结合到了函数计算中。我们的做法是:将 typescript 源码文件放置在 src 目录,将编译后的 js 文件放置在 dist 目录,最后在项目根目录中编写了 index.js 文件,文件中的 handler 处理函数调用了编译后 index 文件的入口函数。
4. 本地调试与部署
本地调试
- 在
index.js以及src/index.ts文件中插入一些断点。 - 点击 VSCode 左侧栏目中的函数计算图标,展开本地资源树
- 点击函数名右侧的调试按钮,即可调试 ts 源代码。
- 在

部署函数
- 点击 VSCode 左侧栏目中的函数计算图标
- 右键本地资源树中的函数名,点击部署按钮

远端调用函数
- 点击远端资源树中函数名右侧的调用按钮

总结
目前阿里云 Function Compute 没有原生支持 Typescript,但是通过本文的方式可以做到在本地开发调试时使用 Typescript。接下来总结下这种实践方法的优点和不足:
优点
- 使用 Typescript 进行开发
- 支持本地调试 Typescript 代码
- 项目部署到云端后,可以在云端查看 Typescript 源码
不足
- 本地调试时需要在项目根目录的 index.js 文件中插入一个断点。
- 更新代码后,在调试以及部署前需要手工进行一次 Typescript 代码到 js 代码的编译。
本文中介绍的实践方式只是一种思路,欢迎大家提供其他的思路。
本文作者:泽尘
本文为阿里云内容,未经允许不得转载。
Serverless 实战 —— 函数计算 + Typescript 实践的更多相关文章
- Serverless 解惑——函数计算如何安装字体
前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算准 ...
- 从零入门 Serverless | 函数计算如何粘合云服务,提供端到端解决方案
作者 | 西流 阿里云技术专家 导读:阿里云 Serverless 产品函数计算可以作为粘合剂,串联其他云服务提供端到端解决方案,从而简化编程模型,快速实现最上层的业务目标. 传统单体应用的拆解 首先 ...
- Serverless 在大规模数据处理的实践
作者 | 西流 阿里云技术专家 前言 当您第一次接触 Serverless 的时候,有一个不那么明显的新使用方式:与传统的基于服务器的方法相比,Serverless 服务平台可以使您的应用快速水平扩展 ...
- 阿里云函数计算上部署.NET Core 3.1
使用阿里云ECS或者其他常见的VPS服务部署应用的时候,需要手动配置环境,并且监测ECS的行为,做补丁之类的,搞得有点复杂.好在很多云厂商(阿里云.Azure等)提供了Serverless服务,借助于 ...
- 在腾讯云云函数计算上部署.NET Core 3.1
云厂商(腾讯云.Azure等)提供了Serverless服务,借助于Serverless,开发人员可以更加专注于代码的开发,减少运维的成本.腾讯云的函数计算提供了很多运行库,对.NET的支持需要通过c ...
- 从函数计算架构看 Serverless 的演进与思考
作者 | 杨皓然 阿里巴巴高级技术专家 导读:云计算之所以能够成为 DT 时代颠覆性力量,是因为其本质是打破传统架构模式.降低成本并简化体系结构,用全新的思维更好的满足了用户需求.而无服务器计算(S ...
- 一元建站-基于函数计算 + wordpress 构建 serverless 网站
前言 本文旨在通过 快速部署一个 wordpress 网站到阿里云函数计算平台 这个示例来展示 serverless web 新的开发模式, 包括 FUN 工具一键初始化 NAS, 同步网站到 NAS ...
- 函数计算: 让小程序开发进入 Serverless 时代
点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 | 吴天龙(木吴 ...
- 函数计算自动化运维实战 2 -- 事件触发 eip 自动转移
函数计算 阿里云函数计算是一个事件驱动的全托管计算服务.通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传.函数计算会为您准备好计算资源,以弹性.可靠的方式运行您的代码,并提供日志查询,性能 ...
随机推荐
- 学用 TStringGrid [6] - Options
本例运行效果图: 一般修改 TStringGrid 的 Options 直接在设计时选一下 True 或 False 就行了; 代码中可以像下面操作: StringGrid1.Options := ...
- Babel编译:类
编译前 class Fruit{ static nutrition = "vitamin" static plant(){ console.log('种果树'); } name; ...
- 宏定义 #define CH_SENS(a,b) 0x##a##b
#define Bin(n) LongToBin(0x##n##L) " ## ",属于宏定义中的字符(串)连接符,即,将符号两端的字符(串)接为一个整体,如以上代码中,在调用Bi ...
- MySQL-快速入门(6)连接查询、子查询、正则表达式查询、数据的插入删除更新
1.内连接查询:inner join ... on 只有满足条件的记录才能够出现在结果关系中,即完全相等.自连接查询是一种特殊的内连接查询. 2.外连接查询: 1>左外连接 / 左连接:返回包括 ...
- C++ 14 auto
C++14标准最近刚被通过,像以前一样,没有给这个语言带来太大变化,C++14标准是想通过改进C++11 来让程序员更加轻松的编程,C++11引入auto关键字(严格来说auto从C++ 03 开始就 ...
- Projection Pursuit Regression----读书笔记
The central idea is to extract linear combinations of the inputs as derived features, and then model ...
- [集合]Map的 entrySet() 详解以及用法(四种遍历map的方式)
Entry 由于Map中存放的元素均为键值对,故每一个键值对必然存在一个映射关系. Map中采用Entry内部类来表示一个映射项,映射项包含Key和Value (我们总说键值对键值对, 每一个键值对也 ...
- python中,a=10.0 b=10.0 a is b 为什么输出是false
>>>a=10.0>>>b=10.0>>>a is bFalse为什么当a=10,b=10时,a is b输出的是True呢? >>& ...
- 输入某年某月某日,判断这一天是这一年的第几天?(可以用 Python 标准 库)
import datetime def dayofyear(): year = input("请输入年份:") month = input("请输入月份:") ...
- Python字符串中添加、插入特定字符
分析 我们将添加.插入.删除定义为: 添加: 在字符串的后面或者前面添加字符或者字符串 插入: 在字符串之间插入特定字符 在Python中,字符串是不可变的.所以无法直接删除.插入字符串之间的特定字符 ...