• 使用 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
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    修改完毕后单击 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)
    
    • 1
    • 2
    • 3
    • 4

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

    在这里插入图片描述
    图 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
  • 相关阅读:
    重学java 58.红黑树相关集合
    Spring学习笔记4 Bean的作用域
    【C++课程设计——演讲比赛系统】
    彻底掌握Makefile(二)
    全链路压测的“谜”
    Linux-实操篇8-shell脚本编写
    docker(第四天)
    如何利用WhatsApp群发功能减轻团队工作量
    期末前端web大作业:用DIV+CSS技术设计的动漫网站——火影忍者6页 带报告
    AI推介-大语言模型LLMs论文速览(arXiv方向):2024.03.10-2024.03.15
  • 原文地址:https://blog.csdn.net/m0_50614038/article/details/128172804