创建第一个 Lambda 函数
要开始使用 Lambda,请使用 Lambda 控制台创建函数。您可以在几分钟的时间内创建和部署函数,并在控制台中对其进行测试。
在学习本教程时,您将学习一些基本的 Lambda 概念,例如如何使用 Lambda 事件对象将参数传递给函数。您还将学习如何从函数返回日志输出,以及如何在 Amazon CloudWatch Logs 中查看函数的调用日志。
为了简单起见,您可以使用 Python 或 Node.js 运行时系统创建函数。您可以使用这些解释性语言,在控制台的内置代码编辑器中直接编辑函数代码。如果使用 Java 和 C# 等编译语言,则您必须在本地生成计算机上创建部署包并将其上传到 Lambda。要了解如何使用其他运行时系统将函数部署到 Lambda,请参阅 其他资源和后续步骤 一节中的链接。
先决条件
如果您还没有 AWS 账户,请完成以下步骤来创建一个。
注册过程完成后,AWS 会向您发送一封确认电子邮件。在任何时候,您都可以通过转至 https://aws.amazon.com/ 并选择我的账户来查看当前的账户活动并管理您的账户。
注册 AWS 账户 后,请保护好您的 AWS 账户根用户,启用 AWS IAM Identity Center,并创建一个管理用户,以避免使用根用户执行日常任务。
将访问权限分配给其他用户
-
在 IAM Identity Center 中,创建一个权限集,该权限集遵循应用最低权限的最佳做法。
有关说明,请参阅《AWS IAM Identity Center 用户指南》中的创建权限集。
-
将用户分配到一个组,然后为该组分配单点登录访问权限。
有关说明,请参阅《AWS IAM Identity Center 用户指南》中的添加组。
使用控制台创建 Lambda 函数
在此示例中,函数采用一个 JSON 对象,其中包含两个标记有 "length"
和 "width"
的整数值。该函数将这些值相乘来计算区域,并将其作为 JSON 字符串返回。
函数还会输出计算区域及其 CloudWatch 日志组名称。在本教程的后面部分,您将学习使用 CloudWatch Logs 查看函数调用记录。
使用控制台创建 Hello world Lambda 函数
打开 Lamba 控制台的 Functions page(函数页面)。
-
选择 Create function(创建函数)。
-
选择从头开始编写。
-
在基本信息窗格中,为函数名称输入 myLambdaFunction
。
-
对于运行时,选择 Node.js 22.x 或 Python 3.13。
-
保留架构设置为 x86_64,然后选择创建函数。
除了返回消息 Hello from Lambda!
的简单函数之外,Lambda 还为您的函数创建了一个执行角色。执行角色是一个 AWS Identity and Access Management(IAM)角色,用于向 Lambda 函数授予访问 AWS 服务和资源的权限。而 Lambda 为函数创建的角色用于授予写入 CloudWatch Logs 的基本权限。
使用控制台的内置代码编辑器,将 Lambda 创建的 Hello world 代码替换为自己的函数代码。
- Node.js
-
在控制台中修改代码
-
选择节点选项卡。
在控制台的内置代码编辑器中,会显示 Lambda 创建的函数代码。如果代码编辑器中没有显示 index.mjs 选项卡,请在文件资源管理器中选择 index.mjs,如下图所示。
-
将以下代码粘贴到 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;
}
};
-
在部署部分,选择部署以更新函数的代码:
了解函数代码
在继续执行下一步之前,我们需要花些时间查看函数代码并了解一些关键的 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)存储桶时调用函数,则事件会包含此存储桶的名称和对象键。
在此示例中,您将通过输入包含两个键值对的 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
-
在控制台中修改代码
-
选择节点选项卡。
在控制台的内置代码编辑器中,会显示 Lambda 创建的函数代码。如果代码编辑器中没有显示 lambda_function.py 选项卡,请在文件资源管理器中选择 lambda_function.py,如下图所示。
-
将以下代码粘贴到 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
-
在部署部分,选择部署以更新函数的代码:
了解函数代码
在继续执行下一步之前,我们需要花些时间查看函数代码并了解一些关键的 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)存储桶时调用函数,则事件会包含此存储桶的名称和对象键。
在此示例中,您将通过输入包含两个键值对的 JSON 格式文档,在控制台中创建事件。
-
Lambda 上下文对象:
函数采用的第二个参数是 context
。Lambda 会自动将上下文对象传递给函数。上下文对象包含有关函数调用和执行环境的信息。
您可以使用上下文对象输出有关函数调用的信息,以便进行监控。在此示例中,函数使用 log_group_name
参数来输出其 CloudWatch 日志组名称。
要了解有关 Python 中 Lambda 上下文对象的更多信息,请参阅 使用 Lambda 上下文对象检索 Python 函数信息。
-
登录 Lambda:
借助 Python,您可以使用 print
语句或 Python 日志记录库,将信息发送到函数日志。为了说明捕获内容的差异,示例代码使用了这两种方法。在生产应用程序中,我们建议您使用日志记录库。
要了解更多信息,请参阅 Python Lambda 函数日志记录和监控。要了解如何登录其他运行时系统,请参阅您感兴趣的运行时系统的“构建方式”页面。
使用控制台代码编辑器调用 Lambda 函数
要使用 Lambda 控制台代码编辑器调用函数,请创建一个发送到函数的测试事件。该事件是包含两个键值对的 JSON 格式文档,其中键为 "length"
和 "width"
。
创建测试事件
-
在控制台代码编辑器的测试事件部分中,选择创建测试事件。
-
对于 Event Name (事件名称),输入 myTestEvent
。
-
在事件 JSON 部分中,使用以下内容替换默认 JSON:
{
"length": 6,
"width": 7
}
-
选择保存。
测试函数并查看调用记录
在控制台代码编辑器的测试事件部分中,选择测试事件旁边的运行图标:
函数完成运行后,输出选项卡中将显示响应和函数日志。您应该会看到类似于如下所示的结果:
- 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 中查看函数的调用记录
-
打开 CloudWatch 控制台的 Log groups page(日志组页面)。
-
选择函数 (/aws/lambda/myLambdaFunction
) 的日志组。这是函数输出到控制台的日志组名称。
-
向下滚动,选择要查看的函数调用的日志流。
您应该可以看到类似于如下所示的输出内容:
- 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
清理
使用完示例函数后,请将其删除。您还可以删除存储函数日志的日志组以及控制台创建的执行角色。
删除 Lambda 函数
-
打开 Lamba 控制台的 Functions(函数)页面。
-
选择您创建的函数。
-
依次选择操作和删除。
-
在文本输入字段中键入 delete
,然后选择删除。
删除日志组
-
打开 CloudWatch 控制台的 Log groups page(日志组页面)。
-
选择函数的日志组 (/aws/lambda/myLambdaFunction
)。
-
依次选择 Actions(操作)和 Delete log group(s)(删除日志组)。
-
在 Delete log group(s)(删除日志组)对话框中,选择 Delete(删除)。
删除执行角色
-
打开 AWS Identity and Access Management (IAM) 控制台的 Roles page(角色页面)。
-
选择函数的执行角色(例如 myLambdaFunction-role-31exxmpl
)。
-
选择删除。
-
在删除角色对话框中,输入角色名称,然后选择删除。
其他资源和后续步骤
现在,您已经使用控制台创建并测试了一个简单的 Lambda 函数,请继续执行以下后续步骤: