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。该函数接受两个参数:事件和上下文。这两个参数都是任何 AWS Lambda 函数的必需参数。每当调用 lambda 函数时,lambda 运行时都会向函数传递两个参数 - 事件和上下文。

事件参数包含 lambda 函数要处理数据。例如,如果您通过 REST API 触发 lambda 函数,则您在路径参数或 API 正文中发送的任何数据都将发送到事件参数中的 lambda 函数。在后面的章节中将详细介绍。需要注意的重要一点是,事件通常是 python dict类型,但也可以是strfloatintlistNoneType类型。

上下文对象是运行时传递给 lambda 函数的另一个参数。它不经常使用。AWS 官方文档指出,该对象提供了提供有关调用、函数和运行时环境信息的方法和属性。您可以在此处阅读有关事件上下文对象的更多信息。

该功能非常简单。它只是返回一条状态代码为 200 的消息。如果我们不将 HTTP 事件与 LAMBDA-PROXY 设置一起使用,则应使用底部的注释。更多内容请参见 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 堆栈的名称。将服务视为您的项目。AWS Lambda 函数执行所需的一切都将在该服务中创建。您可以设置您选择的服务名称。

框架版本是指Serverless框架的版本。它是一个可选字段,通常保留它是为了确保与您共享代码的人使用相同的版本号。如果 serverless.yml 中提到的 FrameworkVersion 与您计算机中安装的 Serverless 版本不同,您将在部署过程中收到错误。您还可以指定frameworkVersion的范围,例如frameworkVersion - >=2.1.0 && <3.0.0。您可以在此处阅读有关框架版本的更多信息。

下一部分,provider,可以被视为一组全局设置。我们将在后面的章节中讨论提供程序中涵盖的其他参数。在这里,我们将重点关注可用的参数。名称字段确定您的平台环境的名称,在本例中为 aws 运行时是python3.8,因为我们使用了python3模板。lambdaHashingVersion 是指框架应使用的哈希算法的名称。

请注意,如果您在上一章的配置凭据步骤中添加了自定义配置文件,则需要在提供中添加配置文件参数。例如,我将我的个人资料名称设置为 yash-sanghvi。因此,我的提供者看起来像 -

provider:
   name: aws
   runtime: python3.8
   lambdaHashingVersion: 20201221
   profile: yash-sanghvi

最后,函数块定义了所有 lambda 函数。我们这里只有一个函数,位于处理程序文件中。该函数的名称是 hello。函数的路径在处理程序字段中提到。

部署功能

要部署该功能,您需要打开命令提示符,导航到包含 serverless.yml 的文件夹,然后输入以下命令 -

sls deploy -v

-v是一个可选参数指示详细输出。它可以帮助您更好地了解后台进程。部署函数后,您应该能够在 us-east-1 区域(默认区域)的 AWS 控制台上看到它。您可以使用“测试”功能从控制台调用它(您可以保留相同的默认事件,因为我们的 lambda 函数无论如何都不使用事件输入)。您还可以使用命令提示符来测试它 -

sls invoke --function hello

请注意,如果您的函数与 S3 或 dynamoDB 等其他 AWS 服务交互,您无法始终在本地测试您的函数。只能在本地测试非常基本的函数。

从现有项目部署功能

如果您想要将现有项目部署到 AWS,请修改现有函数以仅接受事件上下文作为参数。接下来,在该文件夹中添加一个 serverless.yml 文件,并在 serverless.yml 中定义您的函数。然后打开命令提示符,导航到该文件夹​​,然后点击sls deploy -v。这样,您现有的函数也可以部署到 AWS Lambda。