Serverless - 部署函数



创建新项目

导航到您想要创建第一个要部署到无服务器的项目的文件夹。在该文件夹中,运行以下命令:

sls create --template aws-python3

此命令将创建使用无服务器和 Python 运行时的部署 Lambda 函数的样板代码。

Deploying

请注意,您也可以使用其他运行时。运行 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 类型,尽管也可以是 strfloatintlistNoneType 类型。

context 对象是在运行时传递给 Lambda 函数的另一个参数。它不常使用。AWS 官方文档指出,此对象提供方法和属性,这些方法和属性提供有关调用、函数和运行时环境的信息。您可以阅读更多关于 eventcontext 对象的信息 这里

该函数非常简单。它只是返回一条状态代码为 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,请修改现有函数以仅接收 eventcontext 作为参数。接下来,在文件夹中添加一个 serverless.yml 文件,并在 serverless.yml 中定义您的函数。然后打开命令提示符,导航到该文件夹,然后点击 sls deploy -v。这样,您现有的函数也可以部署到 AWS Lambda。

广告