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

使用 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 json

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

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

步骤 3. 添加 API Gateway 触发器

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

使用 Learner Lab - 使用 CloudWatch 进行排错,搭配 API Gateway 与 Lambda_第1张图片
图 4. 在 Lambda 主画面中进行添加触发器

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

添加触发器

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

使用 Learner Lab - 使用 CloudWatch 进行排错,搭配 API Gateway 与 Lambda_第2张图片
图 5. 在添加触发器画面中进行 API Gateway 配置

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

使用 Learner Lab - 使用 CloudWatch 进行排错,搭配 API Gateway 与 Lambda_第3张图片

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

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

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

使用 Learner Lab - 使用 CloudWatch 进行排错,搭配 API Gateway 与 Lambda_第4张图片
图 7. 使用浏览器观看运行结果

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

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

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

使用 Learner Lab - 使用 CloudWatch 进行排错,搭配 API Gateway 与 Lambda_第5张图片
图 8. AWS 网页控制台中找寻 CloudWatch 服务

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

使用 Learner Lab - 使用 CloudWatch 进行排错,搭配 API Gateway 与 Lambda_第6张图片
图 9. 在 CloudWatch 主画面中找到日志组 (logs)

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

使用 Learner Lab - 使用 CloudWatch 进行排错,搭配 API Gateway 与 Lambda_第7张图片
图 10. 在日志流找到时间相对应的纪录

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

使用 Learner Lab - 使用 CloudWatch 进行排错,搭配 API Gateway 与 Lambda_第8张图片
图 11. 在日志流找到时间相对应的纪录

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

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

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

使用 Learner Lab - 使用 CloudWatch 进行排错,搭配 API Gateway 与 Lambda_第9张图片
图 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

你可能感兴趣的:(AWS,教育资源,API,Gateway,AWS,Lambda,gateway)