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

本文涉及的产品
函数计算FC,每月15万CU 3个月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。

云栖号:https://yqh.aliyun.com
第一手的上云资讯,不同行业精选的上云企业案例库,基于众多成功案例萃取而成的最佳实践,助力您上云决策!

前言

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

函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息参考。
Aliyun Serverless VSCode Extension: 是阿里云 Serverless 产品 函数计算 Function Compute 的 VSCode 插件,该插件结合了函数计算 Funcraft:Funcraft 工具以及函数计算 SDK ,是一款 VSCode 图形化开发调试函数计算以及操作函数计算资源的工具。
Funcraft:Funcraft 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。Fun 的更多文档参考。

目标

本文打算以一个简单的 Serverless 函数计算项目为例,尝试使用 typescript + nodejs 进行开发,搭建一个简单的工程项目,实现如下小目标:

  1. 使用 typescript 编写业务代码
  2. 可以通过 Serverless VSCode 插件本地调试 typescript 代码
  3. 通过插件将项目代码部署到云端

项目示例图

project_guide

实践

1. 前期准备 (可选)

market

  • 根据 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.jsdist/index.js.map 文件

至此,我们搭建了一个常规的 typescript 项目,有 tsconfig.jsonpackage.jsonsrc 源码目录dist 结果目录。其中,src/index.ts 文件中定义了一个 handler 方法,该方法符合函数计算中函数入口方法的定义。

3. 结合函数计算

  1. 在项目根目录新建 index.js 文件,文件内容如下:

    const { handler } = require('./dist/index');
    
    module.exports.handler = (event, context, callback) => {
      handler(event, context, callback);
    }

    这里又定义了一个 handler 方法,该方法中调用了编译后 js 文件中的 handler 方法。

  2. 在项目根目录新建 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 插件,那么可以尝试下插件的智能提示,效果如图:

    template_quick

至此,我们就成功的将 typescript 项目结合到了函数计算中。我们的做法是:将 typescript 源码文件放置在 src 目录,将编译后的 js 文件放置在 dist 目录,最后在项目根目录中编写了 index.js 文件,文件中的 handler 处理函数调用了编译后 index 文件的入口函数。

4. 本地调试与部署

  • 本地调试

    • index.js 以及 src/index.ts 文件中插入一些断点。
    • 点击 VSCode 左侧栏目中的函数计算图标,展开本地资源树
    • 点击函数名右侧的调试按钮,即可调试 ts 源代码。

ts_debug

  • 部署函数

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

ts_deploy

  • 远端调用函数

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

ts_invoke

总结

目前阿里云 Function Compute 没有原生支持 Typescript,但是通过本文的方式可以做到在本地开发调试时使用 Typescript。接下来总结下这种实践方法的优点和不足:

优点

  1. 使用 Typescript 进行开发
  2. 支持本地调试 Typescript 代码
  3. 项目部署到云端后,可以在云端查看 Typescript 源码

不足

  1. 本地调试时需要在项目根目录的 index.js 文件中插入一个断点。
  2. 更新代码后,在调试以及部署前需要手工进行一次 Typescript 代码到 js 代码的编译。

本文中介绍的实践方式只是一种思路,欢迎大家提供其他的思路。

云栖号在线课堂,每天都有产品技术专家分享
立即加入圈子:https://c.tb.cn/F3.Z8gvnK
与专家面对面,及时了解课程最新动态!

原文发布时间:2020-01-09
本文作者:泽尘
本文来自:“阿里云云栖社区”,了解相关信息可以关注“阿里云云栖社区

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
3月前
|
JavaScript 前端开发 安全
TypeScript的优势与实践:提升JavaScript开发效率
【10月更文挑战第8天】TypeScript的优势与实践:提升JavaScript开发效率
|
4天前
|
负载均衡 Serverless 持续交付
云端问道9期实践教学-省心省钱的云上Serverless高可用架构
详细介绍了云上Serverless高可用架构的一键部署流程
29 10
|
17天前
|
人工智能 Serverless API
尽享红利,Serverless构建企业AI应用方案与实践
本次课程由阿里云云原生架构师计缘分享,主题为“尽享红利,Serverless构建企业AI应用方案与实践”。课程分为四个部分:1) Serverless技术价值,介绍其发展趋势及优势;2) Serverless函数计算与AI的结合,探讨两者融合的应用场景;3) Serverless函数计算AIGC应用方案,展示具体的技术实现和客户案例;4) 业务初期如何降低使用门槛,提供新用户权益和免费资源。通过这些内容,帮助企业和开发者快速构建高效、低成本的AI应用。
62 12
|
26天前
|
Serverless 开发工具 开发者
活动实践 | 西游再现,函数计算一键部署 Flux 超写实文生图模型部署
这些图片展示了阿里巴巴云开发者生态的多个方面,包括开发工具、技术文档、社区交流、培训认证等内容,旨在为开发者提供全方位的支持和服务。
|
26天前
|
存储 弹性计算 关系型数据库
活动实践 | 告别资源瓶颈,函数计算驱动多媒体文件处理测评
本方案介绍了一种高效处理文件的方法,适用于企业办公和社交媒体应用。通过阿里云的函数计算、对象存储OSS和轻量消息队列,实现文件的异步处理,如格式转换和水印添加,有效减轻了核心应用的负担,提高了业务稳定性和资源利用率。方案包括云服务器ECS、云数据库RDS、OSS存储等组件,支持快速部署和资源清理。
|
2月前
|
监控 Serverless 云计算
探索Serverless架构:开发实践与优化策略
本文深入探讨了Serverless架构的核心概念、开发实践及优化策略。Serverless让开发者无需管理服务器即可运行代码,具有成本效益、高可扩展性和提升开发效率等优势。文章还详细介绍了函数设计、安全性、监控及性能和成本优化的最佳实践。
|
2月前
|
弹性计算 算法 搜索推荐
活动实践 | 通过函数计算部署ComfyUI以实现一个AIGC图像生成系统
ComfyUI是基于节点工作流稳定扩散算法的新一代WebUI,支持高质量图像生成。用户可通过阿里云函数计算快速部署ComfyUI应用模板,实现个性化定制与高效服务。首次生成图像因冷启动需稍长时间,之后将显著加速。此外,ComfyUI允许自定义模型和插件,满足多样化创作需求。
|
2月前
|
弹性计算 自然语言处理 搜索推荐
活动实践 | 基于函数计算部署GPT-Sovits模型实现语音生成
通过阿里云函数计算部署GPT-Sovits模型,可快速实现个性化声音的文本转语音服务。仅需少量声音样本,即可生成高度仿真的语音。用户无需关注服务器维护与环境配置,享受按量付费及弹性伸缩的优势,轻松部署并体验高质量的语音合成服务。
|
2月前
|
前端开发 JavaScript
手敲Webpack 5:React + TypeScript项目脚手架搭建实践
手敲Webpack 5:React + TypeScript项目脚手架搭建实践
|
3月前
|
JavaScript 数据管理 编译器
揭秘 ArkTS 与 TypeScript 的神秘差异:鸿蒙系统开发者的必备知识与实战技巧
【10月更文挑战第18天】ArkTS 是华为为鸿蒙系统(HarmonyOS)推出的开发语言,作为 TypeScript 的超集,它针对鸿蒙系统的分布式特性和需求进行了优化和扩展。ArkTS 强化了分布式数据管理、类型系统、编译与运行时性能,并支持声明式 UI 和专为鸿蒙设计的 API,使开发者能够更高效地开发跨设备协同工作的应用。
198 6

相关产品

  • 函数计算