Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅
中国的 Amazon Web Services 服务入门
(PDF)。
创建第一个 Lambda 函数
要开始使用 Lambda,请使用 Lambda 控制台创建函数。您可以在几分钟的时间内创建和部署函数,并在控制台中对其进行测试。
在学习本教程时,您将学习一些基本的 Lambda 概念,例如如何使用 Lambda 事件对象将参数传递给函数。您还将学习如何从函数返回日志输出,以及如何在 Amazon CloudWatch Logs 中查看函数的调用日志。
为了简单起见,您可以使用 Python 或 Node.js 运行时系统创建函数。您可以使用这些解释性语言,在控制台的内置代码编辑器中直接编辑函数代码。如果使用 Java 和 C# 等编译语言,则您必须在本地生成计算机上创建部署包并将其上传到 Lambda。要了解如何使用其他运行时系统将函数部署到 Lambda,请参阅 其他资源和后续步骤 一节中的链接。
先决条件
如果您还没有 Amazon Web Services 账户,请完成以下步骤来创建一个。
注册过程完成后,Amazon 会向您发送一封确认电子邮件。在任何时候,您都可以通过转至 https://aws.amazon.com/ 并选择我的账户来查看当前的账户活动并管理您的账户。
注册 Amazon Web Services 账户 后,启用多重身份验证(MFA)保护您的管理用户。有关说明,请参阅《IAM 用户指南》中的 为 IAM 用户启用虚拟 MFA 设备(控制台)。
要授予其他用户访问您的 Amazon Web Services 账户资源的权限,请创建 IAM 用户。为了保护您的 IAM 用户,请启用 MFA 并仅向 IAM 用户授予执行任务所需的权限。
有关创建和保护 IAM 用户的更多信息,请参阅《IAM 用户指南》中的以下主题:
使用控制台创建 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 还为您的函数创建了一个执行角色。执行角色是一个 Amazon Identity and Access Management(IAM)角色,用于向 Lambda 函数授予访问 Amazon Web Services 服务和资源的权限。而 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 格式的文档,其中包含要处理的函数数据。
如果函数被其他 Amazon Web Services 服务 调用,则事件对象会包含有关导致调用的事件的信息。例如,如果在对象上传到 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 格式的文档,其中包含要处理的函数数据。
如果函数被其他 Amazon Web Services 服务 调用,则事件对象会包含有关导致调用的事件的信息。例如,如果在对象上传到 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(函数)页面。
-
选择您创建的函数。
-
依次选择操作和删除。
-
在文本输入字段中键入 confirm
,然后选择删除。
删除日志组
-
打开 CloudWatch 控制台的 Log groups page(日志组页面)。
-
选择函数的日志组 (/aws/lambda/myLambdaFunction
)。
-
依次选择 Actions(操作)和 Delete log group(s)(删除日志组)。
-
在 Delete log group(s)(删除日志组)对话框中,选择 Delete(删除)。
删除执行角色
-
打开 Amazon Identity and Access Management (IAM) 控制台的 Roles page(角色页面)。
-
选择函数的执行角色(例如 myLambdaFunction-role-31exxmpl
)。
-
选择删除。
-
在删除角色对话框中,输入角色名称,然后选择删除。
其他资源和后续步骤
现在,您已经使用控制台创建并测试了一个简单的 Lambda 函数,请继续执行以下后续步骤: