当前位置:主页 > 查看内容

Serverless 应用中心 应用管理 - 进阶指南

发布时间:2021-10-15 00:00| 位朋友查看

简介:概述 每次执行 sls deploy ,都是部署一个serverless应用。一个serverless应用是由单个或者多个组件实例构成,每个组件对应一个实例。 每个实例都会涉及一个serverless.yml文件,该文件定义了组件的一些参数,这些参数在部署时用于生成实例的信息。例如 regi……

概述

每次执行sls deploy,都是部署一个serverless应用。一个serverless应用是由单个或者多个组件实例构成,每个组件对应一个实例。

每个实例都会涉及一个serverless.yml文件,该文件定义了组件的一些参数,这些参数在部署时用于生成实例的信息。例如 region,定义了资源的所在区。

单实例应用与多实例应用在项目组织上会有一些差别,如下图所示:

单实例应用

项目中只引入一个组件,部署时只生成一个组件实例,这样的应用为单实例应用。

单实例应用一般不需要关心应用名称配置,如果有需要自定义应用名称,可直接在组件的 serverless.yml 中配置。

多实例应用

项目中引入多个组件,部署时生成多个组件实例,这样的应用为多实例应用。

多实例应用需要自定义应用名称,以保证所有组件在统一的应用下进行管理。一般会把应用名称定义在项目目录的 serverless.yml 中,以便所有的组件继承同一个应用名。

Serverless.yml 文件

serverless.yml 文件中定义了应用组织参数及组件 inputs 参数,每次部署时会根据 serverless.yml 文件中的配置信息进行资源的创建、更新和编排。

一份简单的 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
 functionName: ${name}-${stage}-${app} #云函数名称
 apigatewayConf:
   protocols:
     - http
     - https
   environment: release

yml 文件中配置信息:

应用信息

参数 说明
org 组织信息,默认腾讯云 APPID。保留字段,不建议使用。
app 应用名称,默认与组件信息中的实例名称一致。对于单实例应用和多实例应用 app 参数的定义方式会有不同,详情请参考 部署应用。
stage 环境信息,默认为 dev。通过定义不同的 stage,为serverless应用开发、测试、发布提供独立的运行环境。详情请参考 环境隔离。

组件信息

参数 说明
component 引用 component 的名称,sls registry 查询您可以引入的组件。
name 创建的实例名称,每个组件在部署时将创建一个实例。

参数信息

inputs 下的参数为组件配置参数,不同的组件参数不同。为保证环境隔离,资源唯一,组件资源名称默认会采用 ${name}-${stage}-${app} 格式。

部署应用

单实例应用

serverless.yml 文件中不配置应用名称 app,部署时会默认生成与实例名称 name 相同的 app 应用名称。

例如创建一个 SCF 项目,项目目录如下:

scfDemo
|- index.js
└── serverless.yml

其中 serverless.yml 文件配置如下:

component: scf
name: myscf
inputs:
 src: ./
 runtime: CustomRuntime
 region: ap-guangzhou
 functionName: ${name}-${stage}-${app} #云函数名称
  events:
   - apigw:
       parameters:
         endpoints:
           - path: /
             method: GET

在 scfDemo 目录下执行 sls deploy 进行部署,默认将生成一个 app 为 myscf 的应用,该应用下包含一个叫 myscf 的 SCF 实例。

对于单实例应用项目,一般使用默认应用名称即可。如果要自定义应用名称,可直接在 serverless.yml 中定义,如:

app: scfApp #自定义 app 为 scfApp
component: scf
name: myscf
inputs:
 src: ./
 runtime: CustomRuntime
 region: ap-guangzhou
  events:
   - apigw:
       parameters:
         endpoints:
           - path: /
             method: GET

在 scfDemo 目录下执行 sls deploy 进行部署,将生成一个app为scfApp的应用,该应用下包含一个叫 myscf 的 SCF 实例。

多实例应用

项目包含多个组件,必须给所有组件统一应用名称。一般我们会在项目根目录下定义一个 serverless.yml 文件进行应用名称配置。

例如部署 Vue + Express + PostgreSQL 全栈网站,项目目录如下:

fullstack
|- api
|   |- sls.js
|   |- ...
|      └── serverless.yml
|- db
|      └── serverless.yml
|- frontend
|   |- ...
|      └── serverless.yml
|- vpc
|      └── serverless.yml
|- scripts
└── serverless.yml

项目目录 fullstack 下的 severless.yml 文件配置了 app:

#项目应用信息
app: fullstack

每个组件目录下的 severless.yml 文件配置了组件信息和参数信息,如 api 目录下的 serverless.yml:

#api配置信息
component: express
name: fullstack-api
inputs:
 src:
   src: ./
   exclude:
     - .env
 functionName: ${name}-${stage}-${app}
 region: ${env:REGION}
 runtime: Nodejs10.15
 functionConf:
   timeout: 30
   vpcConfig:
     vpcId: ${output:${stage}:${app}:fullstack-vpc.vpcId}
     subnetId: ${output:${stage}:${app}:fullstack-vpc.subnetId}
   environment:
     variables:
       PG_CONNECT_STRING: ${output:${stage}:${app}:fullstack-db.private.connectionString}
 apigatewayConf:
   enableCORS: true
   protocols:
     - http
     - https
说明:

旧版本的模板示例中,会把应用名称 app 写到每个组件里,前提必须保证项目下所有组件的应用名称一致,后续不建议此使用方式。


本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!
上一篇:比较函数和运算符 - 日志服务 下一篇:没有了

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐