操作场景
Serverless Cloud Framework 提供了多个基础资源组件,用户可以通过不同组件的结合使用,快速完成云端资源的创建与部署,本教程将指导您如何使用已有组件,构建您自己的多组件 Serverless 应用模板。
前提条件
已经安装 Serverless Cloud Framework 1.0.2以上版本。详情见 安装 Serverless Cloud Framework。您可以执行以下命令查看 Serverless Cloud Framework 的版本信息:
$ scf –v
组件全量配置文档
基础组件列表框架组件列表
操作步骤
本文以部署一个使用 Layer + Egg 框架项目 为例,指导您如何在项目中引入多个组件,并快速完成部署,步骤如下:
步骤 1:创建项目
新建项目 app-demo
并进入该目录下:
$ mkdir app-demo && cd app-demo
步骤 2:构建 Egg 项目
1. 在 app-demo
目录下,新建 src
文件夹,并在文件夹中新建 Egg 项目:
$ mkdir src && cd src$ npm init egg --type=simple$ npm i y
2. 在 src
目录下,编写配置文件 serverless.yml
:
$ touch serverless.yml
egg 组件的 yml 文件示例如下(全量配置文件可参考 Eggjs 组件全量配置):
# serverless.ymlapp: app-demo #应用名称,同一个应用下每个组件的 app、stage、org 参数必须保持一一致stage: devcomponent: egg name: app-demo-egg # (必填) 创建的实例名称
inputs: src: src: ./ # 需要上传的项目路径 exclude: # 除去 node_modules 以及 .env 文件 - .env - node_modules region: ap-guangzhou functionName: eggDemo # 函数配置 runtime: Nodejs10.15 apigatewayConf: protocols: # API 网关触发器配置,默认新创建网关 - http - https environment: release
注意同一个应用下,每一个组件创建的资源的 app、stage、org 参数必须保持一致,name 参数必须唯一。Egg 组件实际上创建的是一个 API 网关触发器 + 云函数资源,此处可根据您的实际开发场景,选择不同组件,配置方法相似,详情请参考 组件全量配置。
步骤 3:创建层
回到 app-demo
根目录下,新建 layer
文件夹,并在里面新建 layer 配置文件 serverless.yml
:
$ cd ..$ mkdir layer && cd layer$ touch serverless.yml
serverless.yml
可以按照如下模板配置(更多配置请参考 Layer 组件全量配置):
# serverless.ymlapp: app-demo #应用名称,同一个应用下每个组件的 app、stage、org 参数必须保持一致stage: devcomponent: layer name: app-demo-layer # (必填) 创建的实例名称
inputs: region: ap-guangzhou src: src: ../src/node_modules # 您想要上传到层的项目路径,此处以 node_modules 为例 targetDir: /node_modules # 上传后的文件打包目录 runtimes: - Nodejs10.15
注意同一个应用下,每一个组件创建的资源的 app、stage、org 参数必须保持一致,name 参数必须唯一。layer 组件也支持从 COS 桶导入项目,详情参考 Layer 组件全量配置,填写 bucket
参数时注意不要带 -${appid}
,组件会自动为您添加。
步骤 4:组织资源关系
同一个应用内,用户可以根据各个资源的依赖关系组织资源的创建顺序,以该项目为例,用户需要先创建好 layer,再在 Egg 项目里使用该 layer,因此需要保证资源的创建顺序为 layer > eggjs 应用,具体操作如下:修改 Egg 项目的 yml 配置文件,在层配置部分按以下语法进行配置,引用 Layer 组件的部署输出作为 Egg 项目的部署输入,即可保证 Layer 组件一定在 Egg 项目之前完成创建:
$ cd ../src
在 serverless.yml
里,inputs
部分增加 layer 配置:
inputs: src: src: ./ exclude: - .env - node_modules region: ap-guangzhou functionName: eggDemo runtime: Nodejs10.15 layers: # 增加 layer 配置 - name: ${output:${stage}:${app}:app-demo-layer.name} # layer 名称 version: ${output:${stage}:${app}:app-demo-layer.version} # 版本 apigatewayConf: protocols: - http - https environment: release
变量引用格式请参考 变量引用说明。此时已完成 Serverless 应用的构建,项目目录结构如下:
./app-demo├── layer│ └── serverless.yml # layer 配置文件├── src│ ├── serverless.yml # egg 组件配置文件│ ├── node_modules # 项目依赖文件│ ├── ...│ └── app # 项目路由文件└── .env # 环境变量文件
步骤 5:部署应用
在项目根目录下,执行 scf deploy
,即可完成 Layer 创建,并将 Layer 组件的输出作为 Egg 组件的输入,完成 Egg 框架上云。
$ scf deploy
serverless-cloud-framework
app-demo-layer: region: ap-guangzhou name: layer_component_xxx bucket: scf-layer-ap-guangzhou-code object: layer_component_xxx.zip description: Layer created by serverless component runtimes: - Nodejs10.15 version: 3 vendorMessage: null
app-demo-egg: region: ap-guangzhou scf: functionName: eggDemo runtime: Nodejs10.15 namespace: default lastVersion: $LATEST traffic: 1 apigw: serviceId: service-xxxx subDomain: service-xxx.gz.apigw.tencentcs.com environment: release url: https://service-xxx.gz.apigw.tencentcs.com/release/ vendorMessage: null
76s › app-demo › "deploy" ran for 2 apps successfully.
单击 apigw
输出的 URL,即可访问您已经创建好的应用,执行 scf info
,可以查看部署的实例状态,执行 scf remove
,可以快速移除应用。
步骤 6:发布应用模板
完成模板构建后,Serverless Cloud Framework 支持您将自己的 Serverless 项目模板发布在 Serverless Registry 应用中心中,提供给团队和他人使用。
1. 创建配置文件
根目录下,新建 serverless.template.yml
文件,此时项目目录结构如下:
./app-demo├── layer│ └── serverless.yml # layer 配置文件├── src│ ├── serverless.yml # egg 组件配置文件│ ├── node_modules # 项目依赖文件│ ├── ...│ └── app # 项目路由文件├── .env # 环境变量文件└── serverless.template.yml # 模板项目描述文件
2. 配置项目模板文件并发布
# serverless.template.ymlname: app-demo # 项目模板的名字,模板唯一标识,不可重复displayName: 基于 layer 创建的 eggjs 项目模板 #项目模板展示在控制台的名称(中文)author: Tencent Cloud, Inc. # 作者的名字org: Tencent Cloud, Inc. # 组织名称,可选type: template #项目类型,可填 template 或 component,此处为模板description: Deploy an egg application with layer. # 描述您的项目模板description-i18n: zh-cn: 基于 layer 创建的 eggjs 项目模板 # 中文描述keywords: tencent, serverless, eggjs, layer # 关键字repo: # 源代码,通常为您的 github reporeadme: # 详细的说明文件,通常为您的 github repo README 文件license: MIT # 版权声明src: # 描述项目中的哪些文件需要作为模板发布 src: ./ # 指定具体的相对目录,此目录下的文件将作为模板发布 exclude: #描述在指定的目录内哪些文件应该被排除 # 通常希望排除 # 1. 包含 secrets 的文件 # 2. .git git 源代码管理的相关文件 # 3. node_modules 等第三方依赖文件 - .env - '**/node_modules' - '**/package-lock.json'
serverless.template.yml
文件配置完成后,便可以使用发布命令 scf publish
将此项目作为模板发布到应用中心。
$ scf publish
serverless ⚡registryPublishing "app-demo@0.0.0"...
Serverless › Successfully published app-demo
3. 复用模板
完成发布后,其他人可通过 scf init
指令,快速下载您的模板并进行项目复用。
$ scf init app-demo --name example$ cd example$ npm install
变量引用说明
serverless.yml
支持多种方式引用变量:Serverless 基本参数引用
在 inputs
字段里,支持直接引用 Serverless 基本参数配置信息,引用语法如下:${org}
、${app}
环境变量引用在 serverless.yml
中,可以直接通过 ${env}
的方式,直接引用环境变量配置(包含 .env 文件中的环境变量配置,以及手动配置在环境中的变量参数)。例如,通过 ${env:REGION}
,引用环境变量 REGION。引用其它组件输出结果
如果希望在当前组件配置文件中引用其他组件实例的输出信息,可以通过如下语法进行配置:${output:[app]:[stage]:[instance name].[output]}
示例 yml:
app: democomponent: scfname: rest-apistage: dev
inputs: name: ${stage}-${app}-${name} # 命名最终为 "acme-prod-ecommerce-rest-api" region: ${env:REGION} # 环境变量中指定的 REGION= 信息 vpcName: ${output:prod:my-app:vpc.name} # 获取其他组件中的输出信息 vpcName: ${output:${stage}:${app}:vpc.name} # 上述方式也可以组合使用
官网1折活动,限时活动,即将结束,速速收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠
转转请注明出处:https://www.yunxiaoer.com/149001.html