使用 Learner Lab - 使用 CloudWatch 进行排错,搭配 API Gateway 与 Lambda
创始人
2024-03-16 18:21:23
0

使用 Learner Lab - 使用 CloudWatch 进行排错,搭配 API Gateway 与 Lambda

AWS Academy Learner Lab 是提供一个帐号让学生可以自行使用 AWS 的服务,让学生可以在 100 USD的金额下,自行练习所要使用的 AWS 服务,如何进入 Learner Lab 请参考 使用 Learner Lab - 学生,而这篇文章是使用 CloudWatch 进行排错,搭配 API Gateway 与 Lambda,透过 API Gateway 接收 GET 请求,而 Lambda 接收到请求后,取得请求字串并以 JSON 的格式回传。

步骤 1. 创建 Lambda 函数

AWS 网页控制台 上方的搜寻图示中输入 Lambda ,单击 Lambda 服务,如下图所示。

在这里插入图片描述
图 1. AWS 网页控制台中找寻 Lambda 服务

单击 创建函数 服务,如下图所示。

在这里插入图片描述
图 2. 创建 Lambda 函数

设定 Lambda 函数如下

  • 从头开始创作
    基本信息
  • 函数名称: getRequest
  • 运行时: Python 3.8
  • 架构: x86_64
    权限
  • 执行角色: 使用现有角色 LabRole (很重要、很重要、很重要)

在这里插入图片描述
图 3. 设定 Lambda 函数

步骤 2. 布署 Lambda 函数

因为这次代码的功能为读取用户透过 HTTP GET 请求所传递过来的参数列,代码如下:

import jsondef lambda_handler(event, context):# 请求为 GET if event['httpMethod']=='GET':result = event['queryStringParameters']else:result = "method not allowed"# TODO implementreturn {'statusCode': 200,'body': json.dump(result) # 故意打错字,应该是dumps}

修改完毕后单击 Deploy (布署),必须要先布署才算是将代码布署到云计算中。这次故意在代码中写错,因为只是布署,没有运行也不会发现错误所在。

步骤 3. 添加 API Gateway 触发器

在 Lambda 主画面上方找到添加触发器按钮,如下图所示。

在这里插入图片描述
图 4. 在 Lambda 主画面中进行添加触发器

进入添加触发器画面,配置如下:

添加触发器

  • 触发器配置: API Gateway
  • Intent: Create a new API
  • API type: HTTP API
  • Security: Open

在这里插入图片描述
图 5. 在添加触发器画面中进行 API Gateway 配置

添加触发器后可以在配置中查看触发器的结果,如下图所示。

在这里插入图片描述

图 6. 在配置中查看触发器

步骤 4. 测试 API Gateway 与 Lambda 的功能

复制上图中的 API endpoint,开启一个空白网页,贴上网址并输入要传递的参数 ?name=叶 ,得到的画面如下所示,显示了一个内部错误。

在这里插入图片描述
图 7. 使用浏览器观看运行结果

但是很遗憾的是这个代码是 API Gateway 收到用户的请求后,将数据透过 Lambda 中的 lambda_handler(event, context) 函数的 event 这个参数来传递,所以 Lambda 开发者也没办法透过测试来找出代码中的错误,于是我们需要借助 CloudWatch 来检视 Lambda 的执行状况。

步骤 5. 打开 CloudWatch logs 观察 Lambda 的执行状况

AWS 网页控制台 上方的搜寻图示中输入 CloudWatch ,单击 CloudWatch 服务,如下图所示。

在这里插入图片描述
图 8. AWS 网页控制台中找寻 CloudWatch 服务

在 CloudWatch 主画面左边的导航栏中找到日志组 (logs),接著找到对应的 lambda 函数日志组。

在这里插入图片描述
图 9. 在 CloudWatch 主画面中找到日志组 (logs)

在日誌組下方的日志流找到相对应的时间,单击该日志流。

在这里插入图片描述
图 10. 在日志流找到时间相对应的纪录

找到引发错误的日志记录,可以单击来打开看详细信息,以本例来说在 2022-12-04T14:28:50.938 这个时间点, lambda_function.py 这只程式的第 12 行出现了错误信息,主要是由 dump 这个方法所引起。

在这里插入图片描述
图 11. 在日志流找到时间相对应的纪录

于是回到步骤 2. 将原来的 Lambda 函数中的第 12 行代码修改,重新布署(Deploy)一次。

# 原先的
'body': json.dump(result)
# 修改后
'body': json.dumps(result)

再次使用浏览器观看运行结果,就可以得到预期的结果,如下图所示。

在这里插入图片描述
图 12. 使用浏览器观看运行结果

感谢亚马逊云科技王向炜 Alan Wang 提供的协助。

参考资料

  • 使用 Learner Lab - 使用 Lambda 转换图片为 base64 格式, https://blog.csdn.net/m0_50614038/article/details/128075734
  • 使用 Learner Lab - 使用 AWS Lambda 将图片写入 S3, https://blog.csdn.net/m0_50614038/article/details/128122934
  • 使用 Learner Lab - 使用 API Gateway 触发 AWS Lambda, https://blog.csdn.net/m0_50614038/article/details/128155030

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...