在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:Serverless Components开源软件地址:https://gitee.com/serverless-framework/Serverless-Components开源软件介绍:Serverless Components 当前已正式发布上线 查看旧版本 Component Serverless Components 是 Serverless Framework 重磅推出的基础设施编排能力,支持开发者通过 Serverless Components 构建,组合并部署你的 Serverless 应用。
下面通过一个 Serverless Framework Component 的例子,可以看出 Component 多么易用: # serverless.ymlcomponent: express # 注册中心的组件名称name: express-api # 组件实例的名称inputs: # 对应的组件配置 src: ./src # 代码路径,在此处代码路径指定为 src 文档说明
一键部署通过 NPM 安装最新版本的 Serverless Framework : $ npm i -g serverless 之后在命令行中输入 $ serverlessServerless: 当前未检测到 Serverless 项目,是否希望新建一个项目? (Y/n) yServerless: 请选择你希望创建的 Serverless 应用 (Use arrow keys)❯ Express.js app SCF Function Website appServerless: 请输入项目名称 tinatesttinatest 项目已成功创建!Serverless: 是否希望立即将该项目部署到云端? (Y/n) yPlease scan QR code login from wechat.Wait login...Login successful for TencentCloud.serverless ⚡ frameworkAction: "deploy" - Stage: "dev" - App: "scfApp" - Instance: "scfdemo"FunctionName: scfFunctionNameDescription:Namespace: defaultRuntime: Nodejs10.15Handler: index.main_handlerMemorySize: 128Triggers: apigw: - https://service-9k0ggfbe-1250000000.gz.apigw.tencentcs.com/release/index23s › scfdemo › Success 部署完毕后,访问命令行中输出的网页链接,即可访问已经部署成功的应用。 访问 Serverless Framework 控制台,查看你的 Serverless 应用的状态和监控信息。
快速开始通过 NPM 安装最新版本的 Serverless Framework : $ npm i -g serverless 之后,通过 serverless create --template-url https://github.com/serverless-components/tencent-express/tree/v2/example$ cd example 执行如下命令,安装 express 应用的对应依赖 $ cd src && npm install 在 serverless.yml 文件下的目录中运行 serverless deploy 进行 express 项目的部署: $ serverless deploy 部署完毕后,你可以在命令行的输出中查看到你 express 应用的 URL 地址,点击地址即可访问你的 express 项目。 通过运行 $ serverless dev 除了实时日志输出之外,针对 Node.js 应用,当前也支持云端调试能力。在开启 serverless dev 命令之后,将会自动监听远端端口,并将函数的超时时间临时配置为 900s。此时你可以通过访问 chrome://inspect/#devices 查找远端的调试路径,并直接对云端代码进行断点等调试。在调试模式结束后,需要再次部署从而将代码更新并将超时时间设置为原来的值。 详情参考开发模式和云端调试。 当前支持在 Express 组件中引用其他的组件联合进行部署。例如,如果希望引用 org: your-org # Your Orgapp: your-app # Your Appcomponent: expressname: express-apiinputs: src: ./src env: websiteURL: ${outputs:${stage}:${app}:my-website.api} 特点简洁Serverless Components 可以实现高阶应用场景,例如网站、博客或者支付系统等。开发者无需关心底层基础设施的配置细节,仅通过简单的配置就可以实现场景的构建。 像下面的例子,仅通过最简单的配置,你可以部署一个静态网站托管应用,将你的静态网站托管到腾讯云对象存储 COS 中,同时支持为这个静态网站配置自定义域名和免费的 SSL 证书: # serverless.ymlorg: acme # Your Orgapp: ecommerce # Your Appcomponent: tencent-website # A Component in the Registryname: my-website # The name of your Component Instanceinputs: # The configuration the Component accepts src: src: ./src hook: npm run build dist: ./dist hosts: - host: www.mystore.com
快速部署Serverless Components 的部署可以在秒级别完成,通过支持实时部署的 Components,从而无需在本地环境模拟云服务的使用或调试。 $ serverless deploy5s > my-express-app › Successfully deployed 灵活构建Serverless Components 可以通过 YAML 中的配置灵活组合 (serverless.yml),这些配置是通过可复用的 javascrpt 库实现的(serverless.js),实现语法简单,设计思想受到了组件化的开发框架如 React 的启发。 // serverless.jsconst { Component } = require('@serverless/core');class MyBlog extends Component { async deploy(inputs) { console.log('Deploying a serverless blog'); // Leave a status update for users deploying your Component with --debug this.state.url = outputs.url; // Save state return outputs; }}module.exports = MyBlog; 注册中心 Registry任何人都能构建自己的 Serverless 组件(Component) 或者 Serverless 项目模板(Template), 并且将其发布在注册中心中,提供团队和他人使用。关于如何开发组件和项目模板请参看此文档中对应的开发 Components 和开发模板章节。 $ serverless registry publish[email protected] › Published 无服务化 ServerlessServerless Components 主要支持 Serverless 化的云服务,为了提供更好的产品体验,Serverless 化的云产品支持用户按需付费,无需付费即可享受到最好的服务。 Serverless Components 的设计是非云厂商绑定的,支持你方便的使用不同云厂商的不同服务。例如 腾讯云云函数,对象存储 COS 服务,AWS 的 Lmabda 服务,Azure Functions,Twilio,Stripe,Algolia,Cloudflare Workers 等。 概述Serverless Components 主要通过 Javascript 库封装各种服务的功能,使其变得易用和可复用。该平台专注于提供后端的场景和用例,并且更多的支持 Serverless 化的基础云服务,这样可以使用户通过更少的开销,更低的成本来构建应用。Serverless Components 更适合后端的场景,对应的 React 组件则更适合前端的场景。 Serverless Components 既可以提供基础设施服务(例如,对象存储 COS),也可以提供更高阶的场景——这也是组件最擅长的部分。例如以下的场景:
开发 Serverless Components 的语法可以直接调用和封装低维度的组件,并且部署对应的资源。这样的设计可以让你无需考虑底层基础设施的配置,快速构建更高阶的组件。 Serverless Components 可以通过声明的方式使用(通过 如果你希望尽可能简单快速的部署一个 Serverless 应用,并且不会复用这个组件的话,那么用声明的方式来调用组件就可以满足你的需求。 如果你希望构建一个可复用的组件,那么应该用编程的方式来使用这些基础的组件,并且快速构建自己的 Serverless 应用。 Serverless Component 是免费的,同时任何人都可以将他们开发的组件发布在注册中心 Registry 中,供团队或他人使用。 使用 ComponentsServerless.yml 介绍Serverless Components 完全借助云资源进行部署,可以通过注册中心进行组件的复用和二次开发。当前注册中心的 API 已经发布并可以使用,但当前并未提供可视化的搜索能力。如果当前使用注册中心则需要运行 使用 Serverless Component 需要在 # serverless.ymlcomponent: express # The name of the Component in the Registryorg: tencent # Your Serverless Framework Orgapp: fullstack # Your Serverless Framework Appname: rest-api # The name of your instance of this Componentinputs: # The configuration the Component accepts according to its docs src: ./src 当使用 Serverless Components 部署时,不需要在本地安装任何组件,而是在运行 deploy 命令时, 注意,当前的的 Serverless Component 在 注: 当前 Serverless Components 不能用在存量的 Serverless Framework 项目中(例如,项目文件中存在 输入每个 Serverless Component 都支持通过 有一些 inputs: src: src: ./src # Source files 源文件 hook: npm run build # Build hook to run on every "serverless deploy" dist: ./dist # Location of the distribution folder to upload 你也可以使用支持 glob 语法的 exclude 表达式来排除特定的文件或者文件夹被上传,如下所示: inputs: src: src: ./src # Source files exclude: - .env # exclude .env file in ./src - '.git/**' # exclude .git folder and all subfolders and files inside it - '**/*.log' # exclude all files with .log extension in any folder under the ./src 提升 Component 的 Input 类型是我们当前高优先级在解决的问题。 除了部署动作支持通过 inputs 传递变量外,其他的动作(比如 remove,或者其他 Component 的自定义动作)也可以支持配置 inputs,如下所示: commandInputs: remove: keepResource: true myComponentMethod: message: hello 一旦配置了自定义动作的 inputs 参数,Component 开发者可以在相关的自定义方法中通过传入的第一个参数接收到这些输入。例如上面的配置中,当 Component 用户使用 此外,所有的 inputs 参数都可以使用命令行的方式进行覆盖,例如上例中如果用户执行 部署当前 Serverless Framework 框架可以通过 $ serverless deploy Serverless Components 支持秒级别的部署,但在第一次部署时往往会花更久的时间(可能比二次部署慢 5 倍),因为创建云资源耗时更久,而更新已有的云资源配置则相对更快。 状态Serverless Components 自动将状态存储的云端,因此你可以很方便的将你的组件发布到 Github,Gitlab,Coding 等代码托管平台。并且可以和团队中其他人一起协作,只要确保这些协作组都在 org: tencent-team # 相同主账号下的子账户即可进行协作app: ecommercecomponent: my-componentname: rest-api 版本Serverless Components 通过如下配置指定版本信息: component: [email protected] 当你在配置中指定版本时,则会在项目中固定使用该版本的 Component。当不指定版本信息时,Serverless Framework 就会自动获取最新版本的组件。在正式项目中,建议指定 Component 为固定的版本号。 输出当 Component 部署完毕时,会输出 输出通常包含了部署 Component 实例时最重要的信息,比如 API 或者网站的 URL 等。 输出可以被其它 Component 在 # Syntax 语义${output:[stage]:[app]:[instance].[output]}# Examples 例子${output:prod:ecommerce:products-api.url}${output:prod:ecommerce:products-database.name} 账号配置在部署时,无论是使用 部署过程中,如果 如果你按照如下方式配置,这些秘钥可以被 以下是目前支持的秘钥配置: 腾讯云账号配置
TENCENT_SECRET_ID=123456789TENCENT_SECRET_KEY=123456789 组件也可以通过 { "secret_id": "123456789", "secret_key": "123456789", "region": "ap-guangzhou"} 环境Serverless Components 提供了 Stage 的概念,支持通过 Stage 的方式区分并部署完全不同的 Component 实例,从而做到开发、测试和生产环境的隔离。 默认的环境配置为 org: my-orgapp: my-appcomponent: [email protected]name: my-component-instancestage: prod # 更新环境信息 此外,也可以通过在环境变量中填写 SERVERLESS_STAGE=prod 另外可以通过在部署过程中指定 Stage 参数来进行环境的指定和切换,该方式会覆盖 $ serverless deploy --stage prod 注: CLI 中配置参数的方式会覆盖 近期 Serverless Component 已经支持通过不同的 该使用方式的一个最佳实践为,如果希望通过不同的云账户来区分不同的环境,则需要在 变量你可以直接通过变量的方式在 org: acmeapp: ecommercecomponent: expressname: rest-apistage: prodinputs: name: ${org}-${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} # 上述方式也可以组合使用 变量:Org当前支持通过 org: acmeapp: ecommercecomponent: expressname: rest-apistage: prodinputs: name: ${org}-api # 该例子中的 name 值为 "acme-api" 注: 如果未指定 $ serverless deploy --org my-other-org 变量:Stage当前支持通过 org: acmeapp: ecommercecomponent: expressname: rest-apistage: prodinputs: name: ${stage}-api # 该例子中的 name 值为 "prod-api" 注: 如果未指定 $ serverless deploy --stage prod 变量:App当前支持通过 org: acmeapp: ecommercecomponent: expressname: rest-apistage: prodinputs: name: ${app}-api # 该例子中的 name 值为 "ecommerce-api" 注: 如果未指定 $ serverless deploy --app my-other-app 变量:Name当前支持通过 org: acmeapp: ecommercecomponent: expressname: rest-apistage: prodinputs: name: ${name} # 该例子中的 name 值为 "rest-api" 变量:环境变量 Environment Variables你可以直接在 例如,如果你希望引用环境变量 component: expressorg: acmeapp: ecommercename: rest-apistage: prodinputs: region: ${env:REGION} 变量:输出 Outputs将其他 Component 部署完成后的输出作为变量进行传递是变量引用最重要的功能之一。该能力支持在不同的 Component 方便的共享配置信息,对于构建 Serverless 架构不可或缺。 如果你希望在 Component 中引用其他 Component 的输出信息,可以通过如下语法进行配置: component: expressorg: acmeapp: ecommercename: rest-apistage: prodinputs: roleArn: ${output:[STAGE]:[APP]:[INSTANCE].arn} # 获取已经部署的其他 Component 中的 output 信息 当前支持获取相同组织(Org)下,不同 App,实例以及不同环境(Stage)中的输出信息。 该能力的一个应用场景是可以支持横跨不同环境(Stage)共享资源信息,当一个开发者在个人的环境中开发一个 Component 实例时,如果他希望获取公共的 “dev” 环境中的配置信息时,即可采用该方式引用。例如获取 DB 的参数配置等。用这种方式团队中的开发者无需重新为个人环境部署一套全新资源即可完成特性开发、bug 修复等工作,只需要部署一个新的 Component 实例并且复用公共配置即可。 代理问题描述: 用户环境无外网权限,必须通过代理才能访问外网,在 HTTP_PROXY=http://127.0.0.1:12345 # 您的代理HTTPS_PROXY=http://127.0.0.1:12345 # 您的代理 参数-当前只中国用户可用用户可以通过命令行为当前 app 和 stage 的敏感信息设置参数, 可以后续直接在配置文件中使用 参数设置
参数展示
参数使用可以参考Serverless parameters 使用文档 使用模板(Template)模板(Template)是由其他开发者通过 Serverless 注册中心共享的项目模板,提供了比组件更傻瓜化的使用场景。因为分享模板的开发者已经提前配置好项目以及相关的 查看可使用的模板你可以使用以下两种方式查看可供使用的模板:
serverless ⚡ registry...Featured Templates: fullstack - Deploy a full stack application. fullstack-nosql - Deploy a nosql full stack application. ocr-app - Deploy a serverless OCR application.Serverless › Find more here: https://registry.serverless.com 从模板初始化项目一旦你决定了所要使用的项目模板,你就可以使用内置的 sls init -t fullstack # 使用fullstack项目模板创建项目cd fullstack # 进入到项目文件夹sls deploy --all # 部署整个fullstack项目 开发 Components如果你希望开发自己的 Serverless Component,那么必须要关注一下两个文件:
有一点需要特别注意,Serverless Component 只能运行在云端,不支持在本地运行。也就是说,如果你要运行或者测试你的 Component,你必须先将该组件发布到云端注册中心上(通常只需要几秒钟的时间)。当前对 Component 的开发体验在持续优化中,当前的开发原理如下: serverless.component.yml为了声明一个新的 Serverless Component 并且将他发布在 Serverless 注册中心上,必须要创建一个包含如下属性的 # serverless.component.ymlname: express # 必填,Component 名称version: 0.0.4 # 必填,Component 版本author: eahefnawy # 必填,Component 作者org: serverlessinc # 必填,展示开发这个 Component 的组织信息description: Deploys Serverless Express.js Apps # 选填,Component 的描述keywords: tencent, serverless, express # 选填,Component 的关键词可以让它更容易在 registry.serverless.com 中被搜到repo: https://github.com/owner/project # 选填,Component 的项目代码license: MIT # 选填,Component 代码所遵循的协议main: ./src # 选填,Component 的代码路径 在 serverless.component.yml 中定义用户可输入的类型一些 component 在被使用时往往需要在 # serverless.component.ymlactions: # deploy action deploy: definition: Deploy your Express.js application to Tencent SCF inputs: scf: type: object description: The SCF related configuration keys: functionName: type: string # 定义scf函数名称仅能配置为字母 regex: ^[a-z]+$ 有了这个规则定义,当此 component 的用户在使用此 component 时如若配置了如下的云函数名称: # serverless.ymlcomponent: expressname: express-apistage: devinputs: src: ./src scf: functionName: func01 # 函数名称中包含了数字 在用户进行部署时则会收到如下的错误提示: 3s › express-api › inputs validation error: "scf.functionName" with value "func01" fails to match the required pattern: /^[a-z]+$/ 用户便可根据此提示修改其配置后成功完成应用部署。
# serverless.component.ymlactions: # 这里分别定义该 |
请发表评论