实战:使用腾讯云快速搭建并部署 Serverless 应用

1,124 阅读3分钟

这是我参与8月更文挑战的第17天,活动详情查看:8月更文挑战

很多开发者一定多少听过 Serverless Framework。既用更少的服务架构,甚至是无服务器,去实现整个工程的开发。开发者不需要关心底层资源、性能等问题,就可以部署完整的 Serverless 应用。这篇文章的场景,是通过腾讯云提供的 Serverless Framework 搭建并部署一个 Egg.js 应用的实战教程。

Serverless 的应用场景

基于云函数的开发

腾讯云提供的 Serverless Framework,可以让开发者通过命令行或者控制台的方式进行开发、部署和调试应用,结合腾讯云的云函数、API 网关以及数据库等资源,可以完整的开发、部署全栈应用。 腾讯云的云函数有两种,事件型和 web 型,前者支持多种触发方式,例如网关触发、定时触发、COS 资源触发和消息中间件等,而后者目前仅支持 API 网关触发。

传统项目的快速迁移

倘若需要将现有的项目快速迁移至 Serverless Framework,例如 Egg、Koa 等,只需要通过几行代码的改造即可快速迁移。

快速搭建并部署

这里采用的是命令行的方式进行搭建和部署,在此之前需要拥有腾讯云账号并完成实名认证,建议在开始前仔细阅读相关产品的文档。

确认环境

安装腾讯云提供的 Serverless Framework,需要确保你的开发环境拥有 Node10 以上的版本和 Npm。

$ node -v
v12.18.0

$ npm -v
7.0.10

安装 serverless

npm install -g serverless

搭建 Egg 应用

根据 Egg.js 官方文档,本地初始化一个项目,示例:

npm init egg --type=simple

npm install

在项目根目录启动命令,运行项目

npm run dev

open http://localhost:7001

编写 serverless.yml

Serverless Framework 通过项目配置文件 serverless.yml 完成应用的类型识别与资源配置,本地开发完成后的项目,必须先配置 yml 文件,才可以通过运行 sls deploy 命令,将 serverless.yml 中的配置文件和 inputs 中指定参数或代码目录会都被传入 Serverless Components 部署引擎中,从而完成云端部署。启动部署命令时,serverless 会根据配置自动的创建相关服务并部署,一个基础的 yml 文件如下:

#serverless.yml
app: expressDemoApp #  应用名称,默认为与组件实例名称
stage: ${env:STAGE} #  用于开发环境的隔离,默认为dev

component: express # (必填) 引用 component 的名称,当前用到的是 express-tencent 组件
name: expressDemo # (必填) 组件创建的实例名称
inputs:
 src:
   src: ./ 
   exclude:
     - .env
 region: ap-guangzhou
 runtime: Nodejs10.15

但这只是自动部署了一个 Serverless 应用,需要配置事件型的云函数,还要配置网关触发,具体如下: 配置云函数

functionName: xxx

functionConf:
    eip: false # 是否固定出口 IP
    timeout: 10 # 函数最长执行时间,单位为秒,可选值范围 1-900 秒,默认为 3 秒
    memorySize: 128 #函数运行时内存大小,默认为 128M,可选范围 64、128MB-3072MB,并且以 128MB 为阶梯

配置 API 网关,这里额外配置了认证方式为应用认证,并关联授权对应的 app 应用,app 应用需要在腾讯云 API 网关控制台创建并获取。

serviceName: xxx
 
apigatewayConf:
    isDisabled: false # 关闭自动创建 API 网关功能。默认值为否,即默认自动创建 API 网关。
    serviceTimeout: 60 # Api 超时时间,单位: 秒
    protocols: # 前端请求的类型,如 http,https,http 与 https
      - http
      - https
    environment: release # 发布环境. 目前支持三种发布环境: test(测试), prepub(预发布) 与 release(发布)
    enableCORS: false, # 开启跨域。默认值为否
    autoCreateDns: false
    endpoints:
      - path: /
        method: ANY
        authType: APP
        responseType: JSON
        function:
          isIntegratedResponse: true
          functionQualifier: $LATEST
          functionName: xxx
        app:
          name: xxx
          id: app-xxx
          description: xxx

命令行部署

在控制台执行以下命令即可部署上云,系统会自动配置云函数和 API 网关,部署后可以在控制台查看应用详情和网关入口。

sls deploy

如果没有在 .env 中配置 Secretid 和 Secretkey,那么在部署是需要扫码授权,授权后会生成临时的 Secretid 和 Secretkey。 也可以在部署时查看具体的日志信息

sls deploy --debug

欢迎阅读其它文章