# AWS-简介
Serverless Framework 可帮助您开发和部署AWS Lambda函数,以及它们所需的AWS基础设施资源。它是一个提供开箱即用的结构化、自动化和最佳实践的CLI,使您可以专注于构建复杂的,事件驱动的无服务器架构,该架构由 函数 和 事件 组成。
Serverless Framework 不同于其他应用程序框架,因为:
- 它管理您的代码以及基础架构
- 它支持多种语言(Node.js,Python,Java等)
# 核心概念
以下是框架的主要概念以及它们与AWS和Lambda的关系。
# 函数
函数是一个AWS Lambda函数。它是一个独立的部署单元,就像微服务一样。它仅仅是部署在云中的代码,通常编写这些代码来执行单个任务,比如:
- Saving a user to the database 将用户保存到数据库
- Processing a file in a database 处理数据库中的文件
- Performing a scheduled task 执行预定的任务
您可以在代码中执行多个任务,但是如果没有充分的理由,我们不建议这样做。关注点分离是最好的,框架的设计目的是帮助您轻松地开发和部署函数,以及管理大量函数。
# 事件
任何触发AWS Lambda函数执行的操作都被框架视为一个事件。事件是AWS上的基础设施事件,例如:
- An AWS API Gateway HTTP endpoint request (e.g., for a REST API) AWS API网关HTTP端点请求
- An AWS S3 bucket upload (e.g., for an image) AWS S3存储桶上传
- A CloudWatch timer (e.g., run every 5 minutes) CloudWatch计时器
- An AWS SNS topic (e.g., a message) AWS SNS主题
- A CloudWatch Alert (e.g., something happened) CloudWatch警报
- And more...
当您在 Serverless Framework 中为您的AWS Lambda函数定义一个事件时,该框架将自动创建该事件所需的任何基础设施(例如,API网关终端节点)并配置您的AWS Lambda函数以侦听该事件。
# 资源
资源是您的函数使用的AWS基础设施组件,例如:
- An AWS DynamoDB Table (e.g., for saving Users/Posts/Comments data) AWS DynamoDB表(例如,用于保存用户/帖子/评论数据)
- An AWS S3 Bucket (e.g., for saving images or files) AWS S3存储桶(例如,用于保存图像或文件)
- An AWS SNS Topic (e.g., for sending messages asynchronously) AWS SNS主题(例如,用于异步发送消息)
- Anything that can be defined in CloudFormation is supported by the Serverless Framework 任何可以在CloudFormation中定义的东西都受Serverless Framework的支持
Serverless Framework 不仅部署您的函数和触发它们的事件,还部署您的函数所依赖的AWS基础设施组件。
# 服务
服务是框架的组织单元。您可以将其视为项目文件,尽管您可以为单个应用程序提供多种服务。在这里,您可以在一个名为serverless.yml(或serverless.json或serverless.js)的文件中定义函数,触发它们的事件以及函数所使用的资源。看起来像这样:
# serverless.yml
service: users
functions: # Your "Functions"
usersCreate:
events: # The "Events" that trigger this function
- http: post users/create
usersDelete:
events:
- http: delete users/delete
resources: # The "Resources" your "Functions" use. Raw AWS CloudFormation goes in here. 原始的AWS云形成在这里。
# 插件
您可以使用插件覆盖或扩展框架的功能。每个serverless.yml都可以包含plugins:属性,该属性具有多个插件。
# serverless.yml
plugins:
- serverless-offline
- serverless-secrets