Event Resource Mapping - 实验

本节我们将使用SQS作为Lambda的事件源(Event Source)来进行测试。原理如下:

image-20220402225246203

创建Lambda及SQS

创建新的Lambda,命名为lambda-poll-sqs,Runtime选择Python 3.9。点击创建:

image-20220403100453646

创建新的SQS,命名为lambda-sqs,点击创建:

image-20220403100542064

由于Lambda需要从SQS中轮询消息,所以Lambda需要有访问SQS的权限。为Lambda添加对应权限:

image-20220403100642577

image-20220403100711629

选择AWSLambdaSQSQueueExecutionRole并添加:

image-20220403100729338

添加SQS作为Lambda的触发器

在Lambda页面,点击Add Trigger:

image-20220403100758221

Lambda可以选择很多AWS服务作为它的Trigger。这里我们搜索SQS:

image-20220403100818707

SQS Queue选择刚才创建的lambda-sqs, Batch window设置为10s,这样Lambda每隔10s会从SQS中拉取一次消息:

image-20220403101315273

添加完成后,在Lambda的页面,看到有SQS类型的Trigger:

image-20220403100934368

编辑Lambda代码,将接收到的消息打印到控制台:

import json

def lambda_handler(event, context):
    print(event)
    return "success"

对代码重新部署。

测试

往SQS里发送一条消息:

image-20220403101030545

image-20220403101105511

打开Lambda的CloudWatch Logs:

image-20220403101137365

找到最新的日志流,Lambda接收到了SQS中的消息:

image-20220403101430153

回到SQS页面,发现lambda-sqs里消息数量为0,这是因为Lambda在接收到消息后,会删除SQS队列中的消息

image-20220403101452088