创建第一个 Lambda 函数 - AWS Lambda

创建第一个 Lambda 函数

要开始使用 Lambda,请使用 Lambda 控制台创建函数。您可以在几分钟的时间内创建和部署函数,并在控制台中对其进行测试。

在学习本教程时,您将学习一些基本的 Lambda 概念,例如如何使用 Lambda 事件对象将参数传递给函数。您还将学习如何从函数返回日志输出,以及如何在 CloudWatch Logs 中查看函数的调用日志。

为了简单起见,您可以使用 Python 或 Node.js 运行时系统创建函数。您可以使用这些解释性语言,在控制台的内置代码编辑器中直接编辑函数代码。如果使用 Java 和 C# 等编译语言,您需要在本地生成计算机上创建部署包并将其上传到 Lambda。要了解如何使用其他运行时系统将函数部署到 Lambda,请参阅 其他资源和后续步骤 一节中的链接。

提示

要了解如何构建无服务器解决方案,请查看无服务器开发人员指南

先决条件

如果您还没有 AWS 账户,请完成以下步骤来创建一个。

注册 AWS 账户
  1. 打开 https://portal.aws.amazon.com/billing/signup

  2. 按照屏幕上的说明进行操作。

    在注册时,将接到一通电话,要求使用电话键盘输入一个验证码。

    当您注册 AWS 账户时,系统将会创建一个 AWS 账户根用户。根用户有权访问该账户中的所有 AWS 服务 和资源。作为安全最佳实践,请为用户分配管理访问权限,并且只使用根用户来执行需要根用户访问权限的任务

注册过程完成后,AWS 会向您发送一封确认电子邮件。在任何时候,您都可以通过转至 https://aws.amazon.com/ 并选择我的账户来查看当前的账户活动并管理您的账户。

注册 AWS 账户 后,请保护好您的 AWS 账户根用户,启用 AWS IAM Identity Center,并创建一个管理用户,以避免使用根用户执行日常任务。

保护您的 AWS 账户根用户
  1. 选择根用户并输入您的 AWS 账户电子邮件地址,以账户拥有者身份登录 AWS Management Console。在下一页上,输入您的密码。

    要获取使用根用户登录方面的帮助,请参阅《AWS 登录 用户指南》中的以根用户身份登录

  2. 为您的根用户启用多重身份验证 (MFA)。

    有关说明,请参阅《IAM 用户指南》中的为 AWS 账户 根用户启用虚拟 MFA 设备(控制台)

创建具有管理访问权限的用户
  1. 启用 IAM Identity Center。

    有关说明,请参阅《AWS IAM Identity Center 用户指南》中的启用 AWS IAM Identity Center

  2. 在 IAM Identity Center 中,为用户授予管理访问权限。

    有关如何使用 IAM Identity Center 目录 作为身份源的教程,请参阅《AWS IAM Identity Center 用户指南》中的使用默认的 IAM Identity Center 目录 配置用户访问权限

以具有管理访问权限的用户身份登录
  • 要使用您的 IAM Identity Center 用户身份登录,请使用您在创建 IAM Identity Center 用户时发送到您的电子邮件地址的登录网址。

    要获取使用 IAM Identity Center 用户登录方面的帮助,请参阅《AWS 登录 用户指南》中的登录 AWS 访问门户

将访问权限分配给其他用户
  1. 在 IAM Identity Center 中,创建一个权限集,该权限集遵循应用最低权限的最佳做法。

    有关说明,请参阅《AWS IAM Identity Center 用户指南》中的创建权限集

  2. 将用户分配到一个组,然后为该组分配单点登录访问权限。

    有关说明,请参阅《AWS IAM Identity Center 用户指南》中的添加组

使用控制台创建 Lambda 函数

在此示例中,函数采用一个 JSON 对象,其中包含两个标记有 "length" 和 "width" 的整数值。该函数将这些值相乘来计算区域,并将其作为 JSON 字符串返回。

函数还会输出计算区域及其 CloudWatch 日志组名称。在本教程的后面部分,您将学习使用 CloudWatch Logs 查看函数调用记录。

要创建函数,首先要使用控制台创建基本的 Hello world 函数。然后在下一步中,添加自己的函数代码。

使用控制台创建 Hello world Lambda 函数
  1. 打开 Lamba 控制台的 Functions page(函数页面)。

  2. 选择 Create function(创建函数)。

  3. 选择从头开始编写

  4. 基本信息窗格中,为函数名称输入 myLambdaFunction

  5. 对于运行时系统,选择 Node.js 20.xPython 3.12

  6. 保留架构设置为 x86_64,然后选择创建函数

Lambda 不仅创建了一个返回消息 Hello from Lambda! 的函数,还为函数创建了一个执行角色执行角色是一个 AWS Identity and Access Management(IAM)角色,用于向 Lambda 函数授予访问 AWS 服务 和资源的权限。而 Lambda 为函数创建的角色用于授予写入 CloudWatch Logs 的基本权限。

现在,您可以使用控制台的内置代码编辑器,将 Lambda 创建的 Hello world 代码替换为自己的函数代码。

Node.js
在控制台中修改代码
  1. 选择节点选项卡。

    在控制台的内置代码编辑器中,会显示 Lambda 创建的函数代码。如果代码编辑器中没有显示 index.mjs 选项卡,请在文件资源管理器中选择 index.mjs,如下图所示。

    该示意图显示了控制台代码编辑器和文件资源管理器中的 index.mjs 文件
  2. 将以下代码粘贴到 index.mjs 选项卡中,替换 Lambda 创建的代码。

    export const handler = async (event, context) => { const length = event.length; const width = event.width; let area = calculateArea(length, width); console.log(`The area is ${area}`); console.log('CloudWatch log group: ', context.logGroupName); let data = { "area": area, }; return JSON.stringify(data); function calculateArea(length, width) { return length * width; } };
  3. 在主侧栏中,展开部署部分,然后选择部署以更新函数的代码。当 Lambda 部署更改后,控制台会显示一个横幅,告知您函数已成功更新。

了解函数代码

在继续执行下一步之前,我们需要花些时间查看函数代码并了解一些关键的 Lambda 概念。

  • Lambda 处理程序:

    Lambda 函数包含一个名为 handler 的 Node.js 函数。在 Node.js 中,Lambda 函数可以包含多个 Node.js 函数,但处理程序函数始终是代码的入口点。当调用函数时,Lambda 会运行此方法。

    当您使用控制台创建 Hello world 函数时,Lambda 会自动将函数的处理程序方法的名称设置为 handler。确保不要编辑此 Node.js 函数的名称。否则当您调用函数时,Lambda 无法运行代码。

    要了解有关 Node.js 中 Lambda 处理程序的更多信息,请参阅 定义采用 Node.js 的 Lambda 函数处理程序

  • Lambda 事件对象:

    函数 handler 采用 event 和 context 这两个参数。Lambda 中的事件是 JSON 格式的文档,其中包含要处理的函数数据。

    如果函数被其他 AWS 服务 调用,则事件对象会包含有关导致调用的事件的信息。例如,如果 Amazon Simple Storage Service(Amazon S3)存储桶在上传对象时调用函数,则事件会包含 Amazon S3 存储桶的名称和对象键。

    在此示例中,您将通过输入包含两个键值对的 JSON 格式文档,在控制台中创建事件。

  • Lambda 上下文对象:

    函数采用的第二个参数是 context。Lambda 会自动将上下文对象传递给函数。上下文对象包含有关函数调用和执行环境的信息。

    您可以使用上下文对象输出有关函数调用的信息,以便进行监控。在此示例中,函数使用 logGroupName 参数来输出其 CloudWatch 日志组名称。

    要了解有关 Node.js 中 Lambda 上下文对象的更多信息,请参阅 使用 Lambda 上下文对象检索 Node.js 函数信息

  • 登录 Lambda:

    借助 Node.js,您可以通过 console.log 和 console.error 等控制台方法将信息发送到函数日志。示例代码使用 console.log 语句输出计算区域以及函数的 CloudWatch 日志组名称。您还可以使用任何写入 stdout 或 stderr 的日志记录库。

    要了解更多信息,请参阅 Node.js Lambda 函数日志记录和监控。要了解如何登录其他运行时系统,请参阅您感兴趣的运行时系统的“构建方式”页面。

Python
在控制台中修改代码
  1. 选择节点选项卡。

    在控制台的内置代码编辑器中,会显示 Lambda 创建的函数代码。如果代码编辑器中没有显示 lambda_function.py 选项卡,请在文件资源管理器中选择 lambda_function.py,如下图所示。

    该示意图显示了控制台代码编辑器和文件资源管理器中的 lambda_function.py 文件
  2. 将以下代码粘贴到 lambda_function.py 选项卡中,替换 Lambda 创建的代码。

    import json import logging logger = logging.getLogger() logger.setLevel(logging.INFO) def lambda_handler(event, context): # Get the length and width parameters from the event object. The # runtime converts the event object to a Python dictionary length = event['length'] width = event['width'] area = calculate_area(length, width) print(f"The area is {area}") logger.info(f"CloudWatch logs group: {context.log_group_name}") # return the calculated area as a JSON string data = {"area": area} return json.dumps(data) def calculate_area(length, width): return length*width
  3. 在主侧栏中,展开部署部分,然后选择部署以更新函数的代码。当 Lambda 部署更改后,控制台会显示一个横幅,告知您函数已成功更新。

了解函数代码

在继续执行下一步之前,我们需要花些时间查看函数代码并了解一些关键的 Lambda 概念。

  • Lambda 处理程序:

    Lambda 函数包含一个名为 lambda_handler 的 Python 函数。在 Python 中,Lambda 函数可以包含多个 Python 函数,但处理程序函数始终是代码的入口点。当调用函数时,Lambda 会运行此方法。

    当您使用控制台创建 Hello world 函数时,Lambda 会自动将函数的处理程序方法的名称设置为 lambda_handler。确保不要编辑此 Python 函数的名称。否则当您调用函数时,Lambda 无法运行代码。

    要了解有关 Python 中 Lambda 处理程序的更多信息,请参阅 定义采用 Python 的 Lambda 函数处理程序

  • Lambda 事件对象:

    函数 lambda_handler 采用 event 和 context 这两个参数。Lambda 中的事件是 JSON 格式的文档,其中包含要处理的函数数据。

    如果函数被其他 AWS 服务 调用,则事件对象会包含有关导致调用的事件的信息。例如,如果 Amazon Simple Storage Service(Amazon S3)存储桶在上传对象时调用函数,则事件会包含 Amazon S3 存储桶的名称和对象键。

    在此示例中,您将通过输入包含两个键值对的 JSON 格式文档,在控制台中创建事件。

  • Lambda 上下文对象:

    函数采用的第二个参数是 context。Lambda 会自动将上下文对象传递给函数。上下文对象包含有关函数调用和执行环境的信息。

    您可以使用上下文对象输出有关函数调用的信息,以便进行监控。在此示例中,函数使用 log_group_name 参数来输出其 CloudWatch 日志组名称。

    要了解有关 Python 中 Lambda 上下文对象的更多信息,请参阅 使用 Lambda 上下文对象检索 Python 函数信息

  • 登录 Lambda:

    借助 Python,您可以使用 print 语句或 Python 日志记录库,将信息发送到函数日志。为了说明捕获内容的差异,示例代码使用了这两种方法。在生产应用程序中,我们建议您使用日志记录库。

    要了解更多信息,请参阅 Python Lambda 函数日志记录和监控。要了解如何登录其他运行时系统,请参阅您感兴趣的运行时系统的“构建方式”页面。

使用控制台调用 Lambda 函数

要使用 Lambda 控制台调用函数,首先要创建一个发送到函数的测试事件。该事件是包含两个键值对的 JSON 格式文档,其中键为 "length" 和 "width"

创建测试事件
  1. 在主侧栏中,展开测试事件部分,然后选择创建测试事件

  2. 创建新测试事件选项卡中,为事件名称 输入 myTestEvent

  3. 事件 JSON 面板中,通过粘贴以下内容来替换默认值:

    { "length": 6, "width": 7 }
  4. 选择保存

现在,您可以测试函数,并使用 Lambda 控制台和 CloudWatch Logs 来查看函数的调用记录。

测试函数并在控制台中查看调用记录
  • 在主侧栏的测试事件部分,选择测试事件旁边的运行图标。函数完成运行后,执行结果选项卡中将显示响应和函数日志。您将看到类似以下内容的结果:

    Node.js
    Status: Succeeded Test Event Name: myTestEvent Response "{\"area\":42}" Function Logs START RequestId: 5c012b0a-18f7-4805-b2f6-40912935034a Version: $LATEST 2023-08-31T23:39:45.313Z 5c012b0a-18f7-4805-b2f6-40912935034a INFO The area is 42 2023-08-31T23:39:45.331Z 5c012b0a-18f7-4805-b2f6-40912935034a INFO CloudWatch log group: /aws/lambda/myLambdaFunction END RequestId: 5c012b0a-18f7-4805-b2f6-40912935034a REPORT RequestId: 5c012b0a-18f7-4805-b2f6-40912935034a Duration: 20.67 ms Billed Duration: 21 ms Memory Size: 128 MB Max Memory Used: 66 MB Init Duration: 163.87 ms Request ID 5c012b0a-18f7-4805-b2f6-40912935034a
    Python
    Status: Succeeded Test Event Name: myTestEvent Response "{\"area\": 42}" Function Logs START RequestId: 2d0b1579-46fb-4bf7-a6e1-8e08840eae5b Version: $LATEST The area is 42 [INFO] 2023-08-31T23:43:26.428Z 2d0b1579-46fb-4bf7-a6e1-8e08840eae5b CloudWatch logs group: /aws/lambda/myLambdaFunction END RequestId: 2d0b1579-46fb-4bf7-a6e1-8e08840eae5b REPORT RequestId: 2d0b1579-46fb-4bf7-a6e1-8e08840eae5b Duration: 1.42 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 39 MB Init Duration: 123.74 ms Request ID 2d0b1579-46fb-4bf7-a6e1-8e08840eae5b

在此示例中,您通过控制台的测试功能调用代码。这意味着您可以直接在控制台中查看函数的执行结果。在控制台外部调用函数时,需要使用 CloudWatch Logs。

在 CloudWatch Logs 中查看函数的调用记录
  1. 打开 CloudWatch 控制台的 Log groups page(日志组页面)。

  2. 选择函数 (/aws/lambda/myLambdaFunction) 的日志组。这是函数输出到控制台的日志组名称。

  3. 日志流选项卡上,选择函数调用的日志流。

    您应该可以看到类似于如下所示的输出内容:

    Node.js
    INIT_START Runtime Version: nodejs:20.v13 Runtime Version ARN: arn:aws:lambda:us-west-2::runtime:e3aaabf6b92ef8755eaae2f4bfdcb7eb8c4536a5e044900570a42bdba7b869d9 START RequestId: aba6c0fc-cf99-49d7-a77d-26d805dacd20 Version: $LATEST 2023-08-23T22:04:15.809Z 5c012b0a-18f7-4805-b2f6-40912935034a INFO The area is 42 2023-08-23T22:04:15.810Z aba6c0fc-cf99-49d7-a77d-26d805dacd20 INFO CloudWatch log group: /aws/lambda/myLambdaFunction END RequestId: aba6c0fc-cf99-49d7-a77d-26d805dacd20 REPORT RequestId: aba6c0fc-cf99-49d7-a77d-26d805dacd20 Duration: 17.77 ms Billed Duration: 18 ms Memory Size: 128 MB Max Memory Used: 67 MB Init Duration: 178.85 ms
    Python
    INIT_START Runtime Version: python:3.12.v16 Runtime Version ARN: arn:aws:lambda:us-west-2::runtime:ca202755c87b9ec2b58856efb7374b4f7b655a0ea3deb1d5acc9aee9e297b072 START RequestId: 9d4096ee-acb3-4c25-be10-8a210f0a9d8e Version: $LATEST The area is 42 [INFO] 2023-09-01T00:05:22.464Z 9315ab6b-354a-486e-884a-2fb2972b7d84 CloudWatch logs group: /aws/lambda/myLambdaFunction END RequestId: 9d4096ee-acb3-4c25-be10-8a210f0a9d8e REPORT RequestId: 9d4096ee-acb3-4c25-be10-8a210f0a9d8e Duration: 1.15 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 40 MB

清理

使用完示例函数后,请将其删除。您还可以删除存储函数日志的日志组以及控制台创建的执行角色

要删除 Lambda 函数
  1. 打开 Lamba 控制台的 Functions page(函数页面)。

  2. 选择函数。

  3. 依次选择 Actions(操作)和 Delete(删除)。

  4. Delete function(删除函数)对话框中,输入 delete,然后选择 Delete(删除)。

删除日志组
  1. 打开 CloudWatch 控制台的 Log groups page(日志组页面)。

  2. 选择函数的日志组 (/aws/lambda/my-function)。

  3. 依次选择 Actions(操作)和 Delete log group(s)(删除日志组)。

  4. Delete log group(s)(删除日志组)对话框中,选择 Delete(删除)。

删除执行角色
  1. 打开 AWS Identity and Access Management (IAM) 控制台的 Roles page(角色页面)。

  2. 选择函数的执行角色(例如 myLambdaFunction-role-31exxmpl)。

  3. 选择删除

  4. Delete role(删除角色)对话框中,输入角色名称,然后选择 Delete(删除)。

您可以使用 AWS CloudFormation 和 AWS Command Line Interface (AWS CLI) 自动创建和清理函数、日志组和角色。

其他资源和后续步骤

现在,您已经使用控制台创建并测试了一个简单的 Lambda 函数,请继续执行以下步骤: