WEBKT

Serverless Framework 从入门到精通:开发、部署、成本管理与 Pro 高级功能详解

321 0 0 0

你好!相信你点进这篇文章,一定是想了解 Serverless Framework 这个当下火热的无服务器框架。别担心,这篇文章就是为你准备的,无论你是 Serverless 新手,还是有一定经验的开发者,都能在这里找到你想要的。

咱们今天就来聊聊 Serverless Framework,我会尽量用大白话,把这个框架的方方面面给你讲透彻。从最基础的安装配置,到项目的开发部署,再到成本管理和一些高级功能,咱们一步步来,保证你能彻底掌握 Serverless Framework。

什么是 Serverless?

在聊 Serverless Framework 之前,咱们先得搞清楚 Serverless 是个啥。Serverless 直译过来是“无服务器”,但这并不意味着真的没有服务器了,而是说你作为开发者,不用再去操心服务器的购买、配置、运维这些破事了。你只需要关注你的业务代码,写好函数,剩下的事情,交给云服务商(比如 AWS、阿里云、腾讯云等等)就行了。

这就像你以前开餐馆,你得自己买菜、洗菜、炒菜、洗碗,还得雇服务员。现在有了“Serverless”这家外卖平台,你只需要专心研究菜谱(写代码),剩下的事情都交给外卖平台(云服务商)了。

Serverless 的好处显而易见:

  • 降低成本: 你只需要为你实际使用的计算资源付费,不用再为闲置的服务器买单。就像外卖平台,你只用付你卖出去的菜的钱。
  • 提高效率: 你不用再花时间在服务器运维上,可以更专注于业务逻辑的开发,更快地推出新功能。
  • 自动扩展: 当你的应用访问量突然增加时,Serverless 会自动帮你扩展资源,保证你的应用不会崩溃。就像外卖平台,订单多了,会自动帮你增加配送员。

Serverless Framework 又是什么?

知道了 Serverless 的好处,你可能会想,这么好的东西,用起来会不会很麻烦?不同的云服务商都有自己的 Serverless 服务,难道我要为每个平台都写一套代码?

这时候,Serverless Framework 就闪亮登场了!它就像一个“翻译官”,帮你把你的代码“翻译”成不同云服务商能听懂的语言。你只需要写一套代码,就可以部署到 AWS Lambda、Azure Functions、Google Cloud Functions 等等不同的平台上。

Serverless Framework 的核心是一个 YAML 配置文件(serverless.yml),你在这个文件里定义你的服务、函数、事件触发器等等。然后,通过简单的命令行指令,Serverless Framework 就会帮你完成剩下的事情,包括资源的创建、代码的打包、部署等等。

Serverless Framework 快速上手

说了这么多,咱们来点实际的,一步步教你怎么用 Serverless Framework。

1. 安装

首先,你得有个 Node.js 环境(建议版本 12 以上)。然后,通过 npm 全局安装 Serverless Framework:

npm install -g serverless

安装完成后,你可以通过 serverless -v 或者 sls -v 命令来查看版本号,验证是否安装成功。

2. 创建项目

Serverless Framework 提供了很多项目模板,可以帮你快速创建一个项目。比如,咱们创建一个 Node.js 的 AWS 项目:

sls create --template aws-nodejs --path my-service

这条命令会创建一个名为 my-service 的文件夹,里面包含了项目的基本结构和配置文件。

3. 配置文件 serverless.yml

serverless.yml 是 Serverless Framework 的核心,咱们来仔细看看这个文件:

service: my-service

provider:
  name: aws
  runtime: nodejs18.x
  region: us-east-1 # 默认区域,你可以根据需要修改
  #  iamRoleStatements: # 权限配置,后面会详细讲

functions:
  hello:
    handler: handler.hello
    events:
      - http:
          path: /hello
          method: get
  • service:你的服务的名称。
  • provider:配置你的云服务商信息。
    • name:云服务商的名称,这里是 aws
    • runtime:你的函数运行环境,这里是 nodejs18.x
    • region:你的函数部署的区域。
    • iamRoleStatements:配置你的函数的权限,比如访问 S3、DynamoDB 等等。后面咱们会详细讲。
  • functions:定义你的函数。
    • hello:函数的名称。
    • handler:函数处理程序的文件和方法名,这里是 handler.hello
    • events:触发函数的事件。
      • http:HTTP 事件,表示通过 API Gateway 触发。
        • path:API 的路径。
        • method:HTTP 请求方法。

4. 编写函数代码

handler.js 文件里,你可以编写你的函数代码:

'use strict';

module.exports.hello = async (event) => {
  return {
    statusCode: 200,
    body: JSON.stringify(
      {
        message: 'Hello Serverless Framework!',
        input: event,
      },
      null,
      2
    ),
  };
};

这个函数很简单,就是返回一个 JSON 格式的响应。

5. 部署

一切准备就绪,咱们可以部署了!在项目目录下,运行:

sls deploy

Serverless Framework 会自动帮你完成打包、上传、创建资源等一系列操作。部署完成后,你会看到一个 API Gateway 的 endpoint,通过这个 endpoint 就可以访问你的函数了。

6. 本地调试

在开发过程中,你肯定不想每次修改代码都部署一次。Serverless Framework 提供了本地模拟运行的功能:

sls invoke local -f hello

这条命令会在本地模拟运行 hello 函数,并返回结果。

进阶:权限配置、环境变量、自定义资源

上面的例子只是一个最简单的 Hello World,实际项目中,你肯定会用到各种各样的云服务资源,比如数据库、存储等等。这时候,你就需要配置函数的权限、设置环境变量、自定义资源。

1. 权限配置(iamRoleStatements

serverless.ymlprovider 部分,你可以通过 iamRoleStatements 来配置函数的权限。比如,你的函数需要访问 S3 存储桶:

provider:
  iamRoleStatements:
    - Effect: Allow
      Action:
        - s3:GetObject
        - s3:PutObject
      Resource: "arn:aws:s3:::your-bucket-name/*"
  • EffectAllow 表示允许,Deny 表示禁止。
  • Action:允许的操作,这里是 s3:GetObjects3:PutObject
  • Resource:操作的资源,这里是你的 S3 存储桶。

2. 环境变量

serverless.ymlprovider 部分,你可以通过 environment 来设置环境变量:

provider:
  environment:
    MY_VARIABLE: my-value

在你的函数代码里,可以通过 process.env.MY_VARIABLE 来访问这个环境变量。

3. 自定义资源

除了 Serverless Framework 默认支持的资源,你还可以通过 CloudFormation 来定义自定义资源。在 serverless.ymlresources 部分:

resources:
  Resources:
    MyDynamoDBTable:
      Type: AWS::DynamoDB::Table
      Properties:
        TableName: my-table
        AttributeDefinitions:
          - AttributeName: id
            AttributeType: S
        KeySchema:
          - AttributeName: id
            KeyType: HASH
        ProvisionedThroughput:
          ReadCapacityUnits: 1
          WriteCapacityUnits: 1

这段配置会创建一个 DynamoDB 表。

成本管理

Serverless 的一大优势就是按需付费,但如果你不注意,也可能会产生意想不到的费用。所以,成本管理非常重要。

1. 了解计费方式

不同的云服务商,Serverless 的计费方式略有不同,但大体上都是按照以下几个方面来计费:

  • 函数调用次数: 每次调用函数都会产生费用。
  • 函数执行时间: 函数执行的时间越长,费用越高。
  • 内存使用量: 函数配置的内存越大,费用越高。
  • 网络流量: 函数产生的网络流量也会产生费用。

2. 优化函数

  • 减少函数执行时间: 优化你的代码,减少不必要的计算和 I/O 操作。
  • 选择合适的内存: 不要盲目追求大内存,根据实际需要选择合适的内存。
  • 减少函数调用次数: 合理设计你的 API,减少不必要的调用。

3. 使用 Serverless Framework Pro

Serverless Framework Pro 提供了一些高级功能,可以帮助你更好地管理成本,比如:

  • 成本监控: 可以实时查看你的 Serverless 应用的成本。
  • 告警: 当成本超过预设阈值时,会发送告警通知。
  • 优化建议: 会根据你的应用的使用情况,给出优化建议。

Serverless Framework Pro 高级功能

Serverless Framework Pro 是 Serverless Framework 的商业版,提供了一些免费版没有的高级功能,比如:

  • 多环境部署: 可以轻松地部署到开发、测试、生产等多个环境。
  • 团队协作: 支持多人协作开发,可以管理团队成员的权限。
  • CI/CD 集成: 可以与 Jenkins、CircleCI 等 CI/CD 工具集成,实现自动化部署。
  • 监控和告警: 提供更强大的监控和告警功能。
  • 安全扫描: 可以扫描你的代码,发现潜在的安全漏洞。

如果你是个人开发者,或者项目规模不大,免费版的 Serverless Framework 已经足够使用了。但如果你的团队规模较大,或者项目比较复杂,Serverless Framework Pro 可以帮你节省很多时间和精力。

总结

好啦,今天咱们把 Serverless Framework 从入门到精通都聊了一遍。希望这篇文章能帮你更好地理解和使用 Serverless Framework。记住,Serverless 的核心思想是让你更专注于业务逻辑,而不是把时间浪费在繁琐的服务器运维上。Serverless Framework 是一个非常强大的工具,可以帮你更好地利用 Serverless 的优势。如果你有任何问题,欢迎随时提问,我会尽力帮你解答。

最后,我想说,技术是不断发展的,Serverless 也是如此。保持学习的热情,不断探索新的技术,才能在这个快速变化的时代立于不败之地。

技术宅小陈 ServerlessServerless Framework无服务器

评论点评