随着云计算和 Serverless 技术的发展,现代应用的开发方式趋向于更加轻量化和可扩展。而 Serverless平台正是一个能够实现轻量化和可扩展的自动化管理平台。Serverless应用使用云端函数和服务来管理自己的计算和数据存储,并通过无状态调用进行通信。在 Serverless 平台上,应用的配置信息是应用运行的基础,它描述了应用的运行环境及其通信方式,是应用部署最为关键的一环。
在 Serverless 平台中,应用全局配置管理是非常重要的。正确的应用配置可以使得应用的运行在不同服务器或环境上也能保证一致性,降低应用开发中的 bug,以及减小人为失误的程度。本文将会介绍 Serverless 平台上应用的全局配置管理,具体包括配置文件的格式和内容,以及如何在不同环境间快速切换和使用配置信息。
Serverless 平台中配置文件的格式和内容
Serverless 平台中的配置文件通常使用 YAML 或 JSON 格式,这里我们选择 YAML 文件作为例子,使用一个简单的 Serverless 应用作为配置文件的示例:
// javascriptcn.com 代码示例 service: my-service provider: name: aws runtime: nodejs12.x stage: dev region: us-west-2 functions: hello: handler: handler.hello events: - http: path: /hello method: GET cors: true goodbye: handler: handler.goodbye events: - http: path: /goodbye method: GET
该文件配置了一个 Serverless 应用,其中包括了服务名、进程组成部分、配置中心以及事件的信息。在之后的内容中,我们会详细的解释该配置文件的每个属性的含义和作用。
在 Serverless 平台中通过配置文件实现的功能
1. 服务名的配置项
服务名是在 Serverless 平台中唯一的标识,它可以用来区分不同的应用。在配置文件中,服务名可以通过以下方式配置:
service: my-service
其中,my-service
就是服务名。可以根据实际需求自定义服务名,但服务名不可重复。
2. 进程组成部分的配置项
进程组成部分包括了应用的部分组成元素,也可以看做是应用的部分定义,比如数据存储等。在 Serverless 平台中,进程组成部分主要包括了函数、触发器等。在配置文件中,进程组成部分可以通过以下方式配置:
functions: hello: handler: handler.hello events: - http: path: /hello method: GET cors: true
其中,hello
就是函数的名字,该函数的 handler 为 handler.hello
,表示执行 my-service/handler.js
文件中的 hello
函数。通过 http 触发器来监听 /hello
的 GET 请求,同时启用了 CORS 跨域。
3. 常用配置项
Serverless 平台提供了丰富的配置选项,以下为常用的配置项:
1. provider
在 Serverless 平台中,provider 是指 Serverless 框架的发布供应商。例如,AWS、Alibaba Cloud、Azure 等都提供了 Serverless 处理框架。在配置文件中,provider
选项用来定义在哪个 Serverless 供应商上运行这个应用。以下为 provider 的一些选项:
provider: name: aws # 定义 Serverless 供应商为 AWS runtime: nodejs12.x # 运行时是 node.js 版本 12.x stage: dev # 配置的 stage 是开发阶段 region: us-west-2 # 应用运行所在的地区
2. functions
functions
选项定义了服务器端执行的逻辑。在 Serverless 应用程序中,函数是请求的入口点。使用 functions
选项来定义需要编写的函数。以下为 functions
的一些选项:
// javascriptcn.com 代码示例 functions: hello: handler: handler.hello # 使用 handler.js 文件中的 hello 函数 timeout: 30 # 函数运行超时时间为 30 秒 memorySize: 256 # 函数最大使用内存为 256MB events: - http: path: /hello # 定义监听的路径 method: get # 定义监听的 HTTP Method 是 GET cors: true # 启用跨域支持
3. Resources
Resources
选项用来定义资源,比如数据库、消息队列、存储器等等资源。使用它可以更方便的在 Serverless 平台上使用第三方资源。以下为 Resources
的一些选项:
// javascriptcn.com 代码示例 resources: Resources: my-table: Type: AWS::DynamoDB::Table Properties: KeySchema: - AttributeName: id KeyType: HASH AttributeDefinitions: - AttributeName: id AttributeType: S ProvisionedThroughput: ReadCapacityUnits: 5 WriteCapacityUnits: 5
其中,my-table
就是定义的资源名,AWS::DynamoDB::Table
是类型,表示定义的资源是一个 DynamoDB 数据库。ProvisionedThroughput
指定了表格的吞吐量,ReadCapacityUnits
和 WriteCapacityUnits
分别指定读和写的吞吐量。
4. 配置剪切板
在不同环境下使用相同的配置信息是非常常见的需求。Serverless 平台中可以使用配置文件实现配置信息的复用。使用 serverless-config-rc
插件,可以将应用的配置信息转换为配置剪切板,并将所需的配置信息复制到不同的环境中,从而实现配置信息的快速切换。具体使用方式如下:
- 安装
serverless-config-rc
插件
npm install --save-dev serverless-config-rc
- 设置配置剪切板
在项目根目录下新建一个 .serverlessrc 文件,该文件定义了所需的配置信息。例如,可以定义不同的环境:
development: service: my-service provider: region: ap-northeast-1 runtime: nodejs12.x
参照上面的示例,将所需要复制的配置信息标记为“development”,然后将 AWS 区域和运行时添加到默认配置中。
- 复制配置信息
使用 serverless-config-rc
命令可以复制所需的配置信息:
npx serverless-config-rc development
该命令将复制 development
环境的配置信息。可以将环境更改为“production”,再次运行命令,即可复制 production
环境的配置信息。
配置文件示例代码
下面是一个完整的 Serverless 配置文件示例,该文件展示了所有可能用到的配置项。
// javascriptcn.com 代码示例 # -- serverless.yml -- service: aws-nodejs-typescript provider: name: aws runtime: nodejs14.x memorySize: 128 timeout: 5 region: ${opt:region, 'us-west-1'} stage: ${opt:stage, env:STAGE_NAME} package: include: - ./lib/** exclude: - ./** - '*.ts' - '*.map' plugins: - serverless-webpack - serverless-deployment-bucket - serverless-offline custom: webpack: webpackConfig: webpack.config.js includeModules: forceInclude: - aws-sdk serverlessDeploymentBucket: name: ${self:custom.deploymentBucketName} blockPublicAccess: true deploymentBucketName: ${self:service}-${self:provider.region}-serverless-deployment logs: retentionInDays: 30 dynamodb: table: Music: Type: AWS::DynamoDB::Table Properties: TableName: 'Music' AttributeDefinitions: - AttributeName: artist AttributeType: S - AttributeName: songtitle AttributeType: S KeySchema: - AttributeName: artist KeyType: HASH - AttributeName: songtitle KeyType: RANGE ProvisionedThroughput: ReadCapacityUnits: 1 WriteCapacityUnits: 1 functions: hello: handler: src/lambda.handler environment: TABLE_NAME: 'Music' events: - http: path: hello method: get resources: - ${self:custom.dynamodb.table}
总结
Serverless 平台为应用带来了许多便利性和可扩展性,而应用的全局配置管理是应用的基础之一。在 Serverless 平台中,使用配置文件可以让我们更加方便的管理配置信息。在本文中,我们介绍了 Serverless 平台中的应用全局配置管理,包括了配置文件的格式和内容,以及如何在不同环境间快速切换和使用配置信息。希望本文对你的学习和工作有所帮助,欢迎大家提出意见和建议。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/652b052f7d4982a6ebd20872