
- Serverless 教程
- Serverless - 首页
- Serverless - 简介
- Serverless - 安装
- Serverless - 部署函数
- Serverless - 区域、内存大小、超时时间
- Serverless - 服务
- Serverless - 定时 Lambda 函数
- Serverless - API 网关触发的 Lambda 函数
- Serverless - 包含/排除
- Serverless - 插件
- Serverless - 打包依赖项
- Serverless - 层创建
- Serverless - 使用 DynamoDB 的 REST API
- Serverless - Telegram 回声机器人
- Serverless 有用资源
- Serverless - 快速指南
- Serverless - 有用资源
- Serverless - 讨论
Serverless - 部署函数
创建新项目
导航到您想要创建第一个要部署到无服务器的项目的文件夹。在该文件夹中,运行以下命令:
sls create --template aws-python3
此命令将创建使用无服务器和 Python 运行时的部署 Lambda 函数的样板代码。

请注意,您也可以使用其他运行时。运行 sls create --help 以获取所有模板的列表。
创建样板代码后,您将在文件夹中看到两个文件:handler.py 和 serverless.yml。handler.py 是包含 Lambda 函数代码的文件。serverless.yml 是告诉 AWS 如何创建 Lambda 函数的文件。它是配置文件或设置文件,将成为本教程中几个章节的重点。让我们先浏览 handler.py 文件。
import json def hello(event, context): body = { "message": "Go Serverless v1.0! Your function executed successfully!", "input": event } response = { "statusCode": 200, "body": json.dumps(body) } return response # Use this code if you don't use the http event with the LAMBDA-PROXY # integration """ return { "message": "Go Serverless v1.0! Your function executed successfully!", "event": event } """
它包含一个函数 hello。此函数接受两个参数:event 和 context。这两个参数对于任何 AWS Lambda 函数都是必需的。每当调用 Lambda 函数时,Lambda 运行时都会向函数传递两个参数:event 和 context。
event 参数包含 Lambda 函数要处理的数据。例如,如果您通过 REST API 触发 Lambda 函数,您在 API 的路径参数或主体中发送的任何数据都会在 event 参数中发送到 Lambda 函数。稍后章节将详细介绍。需要注意的是,event 通常是 Python 的 dict 类型,尽管也可以是 str、float、int、list 或 NoneType 类型。
context 对象是在运行时传递给 Lambda 函数的另一个参数。它不常使用。AWS 官方文档指出,此对象提供方法和属性,这些方法和属性提供有关调用、函数和运行时环境的信息。您可以阅读更多关于 event 和 context 对象的信息 这里。
该函数非常简单。它只是返回一条状态代码为 200 的消息。底部有一个注释,如果我们不使用带有 LAMBDA-PROXY 设置的 HTTP 事件,则应使用该注释。在 API 触发的 Lambda 章节中将详细介绍。
现在,让我们看看 serverless.yml 文件。这是一个包含大量注释的文件。对于刚开始使用无服务器的人来说,这些注释非常有用。建议您仔细阅读这些注释。我们将在接下来的章节中介绍许多与 serverless.yml 相关的概念。让我们在这里简单浏览一下基本概念。
如果删除注释后查看 serverless.yml 文件,它将如下所示:
service: aws-serverless frameworkVersion: '2' provider: name: aws runtime: python3.8 lambdaHashingVersion: 20201221 functions: hello: handler: handler.hello
service 字段确定 Lambda 函数和所有必需资源将在其中创建的 CloudFormation 堆栈的名称。将 service 视为您的项目。AWS Lambda 函数执行所需的所有内容都将在该服务中创建。您可以设置您选择的 service 名称。
框架版本指的是无服务器框架的版本。这是一个可选字段,通常用于确保与您共享代码的人使用相同的版本号。如果 serverless.yml 中提到的 frameworkVersion 与您的机器上安装的 serverless 版本不同,您将在部署过程中收到错误。您还可以为 frameworkVersion 指定一个范围,例如 frameworkVersion − >=2.1.0 && <3.0.0。您可以阅读更多关于 frameworkVersion 的信息 这里。
下一部分,provider,可以视为一组全局设置。我们将在后面的章节中讨论 provider 下包含的其他参数。在这里,我们将重点介绍可用的参数。name 字段确定平台环境的名称,在本例中为 aws。runtime 为 python3.8,因为我们使用了 python3 模板。lambdaHashingVersion 指的是框架应使用的哈希算法的名称。
请注意,如果您在上一章的配置凭证步骤中添加了自定义配置文件,则需要在 provider 中添加 profile 参数。例如,我将我的配置文件名称设置为 yash-sanghvi。因此,我的 provider 看起来像这样:
provider: name: aws runtime: python3.8 lambdaHashingVersion: 20201221 profile: yash-sanghvi
最后,functions 块定义所有 Lambda 函数。我们这里只有一个函数,在 handler 文件中。函数的名称为 hello。函数的路径在 handler 字段中提到。
部署函数
要部署函数,您需要打开命令提示符,导航到包含 serverless.yml 的文件夹,然后输入以下命令:
sls deploy -v
-v 是一个可选参数,指示详细输出。它可以帮助您更好地了解后台进程。部署函数后,您应该能够在 us-east-1 区域(默认区域)的 AWS 控制台中看到它。您可以使用“测试”功能从控制台调用它(您可以保留相同的默认事件,因为我们的 Lambda 函数无论如何都不使用事件输入)。您也可以使用命令提示符进行测试:
sls invoke --function hello
请注意,如果您的函数与其他 AWS 服务(如 S3 或 dynamoDB)交互,则您无法始终在本地测试它。只有最基本的函数可以在本地测试。
Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.
从现有项目部署函数
如果要将现有项目部署到 AWS,请修改现有函数以仅接收 event 和 context 作为参数。接下来,在文件夹中添加一个 serverless.yml 文件,并在 serverless.yml 中定义您的函数。然后打开命令提示符,导航到该文件夹,然后点击 sls deploy -v。这样,您现有的函数也可以部署到 AWS Lambda。