

# 创建第一个 Lambda 函数
<a name="getting-started"></a>

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

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

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

**提示**  
要了解如何构建**无服务器解决方案**，请查看[无服务器开发人员指南](https://docs.aws.amazon.com/serverless/latest/devguide/)。

## 先决条件
<a name="getting-started-prerequisites"></a>

### 注册 AWS 账户
<a name="sign-up-for-aws"></a>

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

**注册 AWS 账户**

1. 打开 [https://portal.aws.amazon.com/billing/signup](https://portal.aws.amazon.com/billing/signup)。

1. 按照屏幕上的说明操作。

   在注册时，将接到电话或收到短信，要求使用电话键盘输入一个验证码。

   当您注册 AWS 账户 时，系统将会创建一个。*AWS 账户根用户*根用户有权访问该账户中的所有 AWS 服务 和资源。作为最佳安全实践，请为用户分配管理访问权限，并且只使用根用户来执行[需要根用户访问权限的任务](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

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

### 创建具有管理访问权限的用户
<a name="create-an-admin"></a>

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

**保护您的 AWS 账户根用户**

1.  选择**根用户**并输入您的 AWS 账户 电子邮件地址，以账户拥有者身份登录。[AWS 管理控制台](https://console.aws.amazon.com/)在下一页上，输入您的密码。

   要获取使用根用户登录方面的帮助，请参阅《AWS 登录 用户指南》**中的 [Signing in as the root user](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)。

1. 为您的根用户启用多重身份验证（MFA）。

   有关说明，请参阅《IAM 用户指南》**中的[为 AWS 账户 根用户启用虚拟 MFA 设备（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)。

**创建具有管理访问权限的用户**

1. 启用 IAM Identity Center。

   有关说明，请参阅**《AWS IAM Identity Center 用户指南》中的 [Enabling。AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)

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

   有关如何使用 IAM Identity Center 目录 作为身份源的教程，请参阅**《AWS IAM Identity Center 用户指南》中的 [Configure user access with the default。IAM Identity Center 目录](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html)

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

  要获取使用 IAM Identity Center 用户登录方面的帮助，请参阅《AWS 登录 用户指南》**中的 [Signing in to the AWS access portal](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)。

**将访问权限分配给其他用户**

1. 在 IAM Identity Center 中，创建一个权限集，该权限集遵循应用最低权限的最佳做法。

   有关说明，请参阅《AWS IAM Identity Center 用户指南》**中的 [Create a permission set](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)。

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

   有关说明，请参阅《AWS IAM Identity Center 用户指南》**中的 [Add groups](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)。

## 使用控制台创建 Lambda 函数
<a name="getting-started-create-function"></a>

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

函数还会输出计算区域及其 CloudWatch 日志组名称。在本教程的后面部分，您将学习使用 [CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) 查看函数调用记录。

**使用控制台创建 Hello world Lambda 函数**

1. 打开 Lamba 控制台的 [Functions page](https://console.aws.amazon.com/lambda/home#/functions)（函数页面）。

1. 选择**创建函数**。

1. 选择**从头开始编写**。

1. 在**基本信息**窗格中，为**函数名称**输入 `myLambdaFunction`。

1. 对于**运行时**，选择 **Node.js 24** 或 **Python 3.14**。

1. 保留**架构**设置为 **x86\$164**，然后选择**创建函数**。

除了返回消息 `Hello from Lambda!` 的简单函数之外，Lambda 还为您的函数创建了一个[执行角色](lambda-intro-execution-role.md)。执行角色是一个 AWS Identity and Access Management（IAM）角色，用于向 Lambda 函数授予访问 AWS 服务和资源的权限。而 Lambda 为函数创建的角色用于授予写入 CloudWatch Logs 的基本权限。

使用控制台的内置代码编辑器，将 Lambda 创建的 Hello world 代码替换为自己的函数代码。

------
#### [ Node.js ]

**在控制台中修改代码**

1. 选择**节点**选项卡。

   在控制台的内置代码编辑器中，会显示 Lambda 创建的函数代码。如果代码编辑器中没有显示 **index.mjs** 选项卡，请在文件资源管理器中选择 **index.mjs**，如下图所示。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/getting-started-tutorial/nodejs_code_editor.png)

1. 将以下代码粘贴到 **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;
     }
   };
   ```

1. 在**部署**部分，选择**部署**以更新函数的代码：  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/getting-started-tutorial/deploy-console.png)

**了解函数代码**  
在继续执行下一步之前，我们需要花些时间查看函数代码并了解一些关键的 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 函数处理程序](nodejs-handler.md)。
+ Lambda 事件对象：

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

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

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

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

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

  要了解有关 Node.js 中 Lambda 上下文对象的更多信息，请参阅 [使用 Lambda 上下文对象检索 Node.js 函数信息](nodejs-context.md)。
+ 登录 Lambda：

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

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

------
#### [ Python ]

**在控制台中修改代码**

1. 选择**节点**选项卡。

   在控制台的内置代码编辑器中，会显示 Lambda 创建的函数代码。如果代码编辑器中没有显示 **lambda\$1function.py** 选项卡，请在文件资源管理器中选择 **lambda\$1function.py**，如下图所示。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/getting-started-tutorial/python_code_editor.png)

1. 将以下代码粘贴到 **lambda\$1function.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
   ```

1. 在**部署**部分，选择**部署**以更新函数的代码：  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/getting-started-tutorial/deploy-console.png)

**了解函数代码**  
在继续执行下一步之前，我们需要花些时间查看函数代码并了解一些关键的 Lambda 概念。
+ Lambda 处理程序：

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

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

  要了解有关 Python 中 Lambda 处理程序的更多信息，请参阅 [定义采用 Python 的 Lambda 函数处理程序](python-handler.md)。
+ Lambda 事件对象：

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

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

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

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

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

  要了解有关 Python 中 Lambda 上下文对象的更多信息，请参阅 [使用 Lambda 上下文对象检索 Python 函数信息](python-context.md)。
+ 登录 Lambda：

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

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

------

## 使用控制台代码编辑器调用 Lambda 函数
<a name="get-started-invoke-manually"></a>

要使用 Lambda 控制台代码编辑器调用函数，请创建一个发送到函数的测试事件。该事件是包含两个键值对的 JSON 格式文档，其中键为 `"length"` 和 `"width"`。

**创建测试事件**

1. 在控制台代码编辑器的**测试事件**部分中，选择**创建测试事件**。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/getting-started-tutorial/test-event.png)

1. 对于 **Event Name (事件名称)**，输入 **myTestEvent**。

1. 在**事件 JSON** 部分中，使用以下内容替换默认 JSON：

   ```
   {
     "length": 6,
     "width": 7
   }
   ```

1. 选择**保存**。

**测试函数并查看调用记录**

在控制台代码编辑器的**测试事件**部分中，选择测试事件旁边的运行图标：

![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/getting-started-tutorial/run-test-event.png)


函数完成运行后，**输出**选项卡中将显示响应和函数日志。您应该会看到类似于如下所示的结果：

------
#### [ Node.js ]

```
Status: Succeeded
Test Event Name: myTestEvent

Response
"{\"area\":42}"

Function Logs
START RequestId: 5c012b0a-18f7-4805-b2f6-40912935034a Version: $LATEST
2024-08-31T23:39:45.313Z	5c012b0a-18f7-4805-b2f6-40912935034a	INFO	The area is 42
2024-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]	2024-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
```

------

在调用 Lambda 控制台之外的函数时，您必须使用 CloudWatch Logs 来查看函数的执行结果。

**在 CloudWatch Logs 中查看函数的调用记录**

1. 打开 CloudWatch 控制台的 [Log groups page](https://console.aws.amazon.com/cloudwatch/home#logs:)（日志组页面）。

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

1. 向下滚动，选择要查看的函数调用的**日志流**。  
![\[\]](http://docs.aws.amazon.com/zh_cn/lambda/latest/dg/images/log-stream.png)

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

------
#### [ Node.js ]

   ```
   INIT_START Runtime Version: nodejs:22.v13    Runtime Version ARN: arn:aws:lambda:us-west-2::runtime:e3aaabf6b92ef8755eaae2f4bfdcb7eb8c4536a5e044900570a42bdba7b869d9
   START RequestId: aba6c0fc-cf99-49d7-a77d-26d805dacd20 Version: $LATEST
   2024-08-23T22:04:15.809Z    5c012b0a-18f7-4805-b2f6-40912935034a  INFO	The area is 42
   2024-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.13.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]	2024-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
   ```

------

## 清理
<a name="gettingstarted-cleanup"></a>

使用完示例函数后，请将其删除。您还可以删除存储函数日志的日志组以及控制台创建的[执行角色](lambda-intro-execution-role.md)。

**删除 Lambda 函数**

1. 打开 Lamba 控制台的 [Functions（函数）页面](https://console.aws.amazon.com/lambda/home#/functions)。

1. 选择您创建的函数。

1. 依次选择**操作**和**删除**。

1. 在文本输入字段中键入 **confirm**，然后选择**删除**。

**删除日志组**

1. 打开 CloudWatch 控制台的 [Log groups page](https://console.aws.amazon.com/cloudwatch/home#logs:)（日志组页面）。

1. 选择函数的日志组 (`/aws/lambda/myLambdaFunction`)。

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

1. 在 **Delete log group(s)**（删除日志组）对话框中，选择 **Delete**（删除）。

**删除执行角色**

1. 打开 AWS Identity and Access Management (IAM) 控制台的 [Roles page](https://console.aws.amazon.com/iam/home?#/roles)（角色页面）。

1. 选择函数的执行角色（例如 `myLambdaFunction-role-31exxmpl`）。

1. 选择**删除**。

1. 在**删除角色**对话框中，输入角色名称，然后选择**删除**。

## 其他资源和后续步骤
<a name="getting-started-more-resources"></a>

现在，您已经使用控制台创建并测试了一个简单的 Lambda 函数，请继续执行以下后续步骤：
+ 了解如何向函数添加依赖项并使用 .zip 部署包进行部署。从以下链接中选择首选语言。

------
#### [ Node.js ]

  [使用 .zip 文件归档部署 Node.js Lambda 函数](nodejs-package.md)

------
#### [ Typescript ]

  [使用 .zip 文件归档部署在 Lambda 中转换的 TypeScript 代码](typescript-package.md)

------
#### [ Python ]

  [将 .zip 文件归档用于 Python Lambda 函数](python-package.md)

------
#### [ Ruby ]

  [使用 .zip 文件归档部署 Ruby Lambda 函数](ruby-package.md)

------
#### [ Java ]

  [使用 .zip 或 JAR 文件归档部署 Java Lambda 函数](java-package.md)

------
#### [ Go ]

  [使用 .zip 文件归档部署 Go Lambda 函数](golang-package.md)

------
#### [ C\$1 ]

  [使用 .zip 文件归档构建和部署 C\$1 Lambda 函数](csharp-package.md)

------
+ 要了解如何使用另一个 AWS 服务调用 Lambda 函数，请参阅[教程：使用 Amazon S3 触发器调用 Lambda 函数](with-s3-example.md)。
+ 选择以下教程之一，查看将 Lambda 与其他 AWS 服务结合使用的更复杂示例。
  + [教程：利用 API Gateway 使用 Lambda](services-apigateway-tutorial.md)：创建调用 Lambda 函数的 Amazon API Gateway REST API。
  + [使用 Lambda 函数访问 Amazon RDS 数据库](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-lambda-tutorial.html)：使用 Lambda 函数通过 RDS 代理将数据写入 Amazon Relational Database Service（Amazon RDS）。
  + [使用 Amazon S3 触发器创建缩略图](with-s3-tutorial.md)：每次将图像文件上传到 Amazon S3 存储桶时，使用 Lambda 函数创建缩略图。