无法使用 API Gateway 运行 AWS Lambda 函数

2024-01-10

我创建了一个简单的 python 3.7 lambda 函数:

import json
import boto3

s3 = boto3.client("s3")


def lambda_handler(event, context):
    bucket = "nubi-data"
    key = "core/user.json"

    try:
        data = s3.get_object(Bucket=bucket, Key=key)
        json_data = data['Body'].read()

        #return json_data

        return {
            'statusCode': 200,
            "headers": {"Content-Type": "application/json"},
            'body': json.loads(json_data)
            }


    except Exception as e:
        print(e)
        raise e

此函数从 s3 存储桶读取 json 文件。 json 文件如下所示:

{ "id": 1, "name": "约翰", "pwd": "密码" }

The function runs successfully when I test from within function editor screen in AWS console with the following output: enter image description here

响应:{“statusCode”:200,“标题”:{ “内容类型”:“application/json”},“正文”:{ “id”:1, “姓名”:“约翰”, “pwd”:“密码”} }

请求 ID:“f57de02f-44dd-4854-9df9-9f3a8c90031d”

功能日志: START 请求 ID:f57de02f-44dd-4854-9df9-9f3a8c90031d 版本:$LATEST END 请求 ID:f57de02f-44dd-4854-9df9-9f3a8c90031d 报告请求 ID:f57de02f-44dd-4854-9df9-9f3a8c90031d 持续时间: 260.70 毫秒 计费持续时间:300 毫秒 内存大小:128 MB 最大已用内存:84 MB

But when I test the function from the API Gateway, I get the error
enter image description here

3 月 21 日星期四 21:04:08 UTC 2019:端点响应正文之前 转换:{“statusCode”:200,“标题”:{“内容类型”: “application/json”},“body”:{“id”:1,“name”:“John”,“pwd”: "password"}} 2019 年 3 月 21 日星期四 21:04:08 UTC :由于以下原因执行失败配置错误:3 月 21 日星期四,Lambda 代理响应格式错误 21:04:08 UTC 2019:方法已完成,状态:502


Change

'body': json.loads(json_data)

to

'body': json.dumps(json_data)

API Gateway 需要一个字符串作为输出,json.dumps正是这样做的。json.loads另一方面,从字符串创建 JSON。如果您了解 NodeJS,它们分别相当于 JSON.stringify 和 JSON.parse。

Example

json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])

产生

'["foo", {"bar": ["baz", null, 1.0, 2]}]'

while

json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')

produces

[u'foo', {u'bar': [u'baz', None, 1.0, 2]}]

此信息可在官方文档 https://docs.python.org/2/library/json.html

EDIT

OP和我都错过的另一件事是data['Body'].read()不返回 JSON 本身,而是返回一个缓冲区。需要先对其进行解码。

json_data = data['Body'].read().decode('utf-8')将返回字符串化的 JSON(当然,只是因为您的文件是 JSON),因此在您的 return 语句中,您应该能够简单地执行以下操作:

return {
         'statusCode': 200,
         "headers": {"Content-Type": "application/json"},
         'body': json_data
     }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法使用 API Gateway 运行 AWS Lambda 函数 的相关文章

随机推荐

  • Objective-C 接口的前向声明

    我如何转发声明这个对象 interface MyClass NSObject
  • Node.js 和 Microsoft SQL Server

    有什么方法可以让我的 Node js 应用程序与 Microsoft SQL 进行通信吗 我还没有见过任何 MS SQL 驱动程序吗 我正在将一个非常简单的应用程序放在一起 并且需要能够与现有的 MS SQL 数据库进行通信 否则我会使用
  • 使用 Google 脚本将图像保存到电子表格

    我正在尝试使用 jSignature 将签名板添加到 Google 表格 我添加了一个记录签名的对话框 如下所示 Code gs function showDialog var html HtmlService createHtmlOutp
  • 无法通过android NDK(camera2 api)获取相机列表

    尝试使用 Qt5 12 3 和 android ndk 构建应用程序 但无法通过 ACameraManager getCameraIdList 获取相机列表 手机 索尼 xperia XA1 Ultra Qt 5 12 3 NDK r19c
  • “ngserve”命令适合生产吗?

    我正在使用 Angular 7 构建一个小项目 当你运行时 ng serve NodeJS 服务器启动来处理请求 每个请求是否会阻塞直到处理完成 我们正在尝试评估在生产中使用它与使用更传统的应用程序服务器相比有多有效 Run build p
  • Kotlin:对以函数作为参数的函数进行单元测试

    我有一个从存储库中检索项目列表的函数 我没有使用常规回调 而是传入一个函数并使用结果调用它 但是如何对这种功能进行单元测试呢 是否有某种方法可以验证传入的函数是否正在被调用 或者我应该重构并使用常规回调并使用模拟回调接口对其进行测试 My
  • 如何从 HTML 中获取所有 标记之间的数组中的文本?

    我想在所有之间获取数组中的文本 span span 来自 HTML 的标签 我尝试过使用此代码 但它只返回一次 preg match span lt span gt is row tbl highlighted icon content m
  • 用于分配分片索引的 Zookeeper

    我在网上看到过一些关于使用 Zookeeper 在服务器上线时为其分配分片编号的帖子 假设您正在跨集群对数据进行分片 但我一生都找不到如何执行此操作的 Java 代码示例 有人已经可以使用这个了吗 谢谢 跨集群分片数据有很多细节 例如复制和
  • Numpy 数组:序列太大

    我有一个大小的数组11称为 波长 和更大的尺寸数组n称为 MN 而 模型 是一个m by n array 我正在这样做 for i in xrange 10 len wavelength 2 y np empty model MN i fl
  • 如何使用“chosen.js”插件在 MVC 3 中实现多重选择

    如何实施chosen http harvesthq github io chosen MVC 3 的插件 对于这种类型的输出 这是我的代码 如何使 selected js 与 javascript MVC 一起工作 这是我的下拉列表的代码
  • 如何覆盖android中的操作栏后退按钮?

    我想自定义操作栏中的活动后退按钮 而不是硬键后退按钮 我已经覆盖了onBackPressed 方法 它适用于我的模拟器后退按钮 但不适用于操作栏后退按钮 我希望它能通过操作栏发生 我怎样才能做到这一点 这是我的代码 Override pub
  • ServiceWorker更新后如何刷新页面?

    我查阅了很多有关 Service Workers 的资源 更新您的 ServiceWorker https jakearchibald com 2014 using serviceworker today updating your ser
  • 如何测试 URL 字符串是绝对字符串还是相对字符串?

    如果 URL 是 Javascript 或 jQuery 中的相对路径或绝对路径 如何测试它 我想根据传入的 URL 是本地路径还是外部路径进行相应处理 if urlString starts with http or https do t
  • 如何使用 bash 运行 `mkdir -m -p`?

    我想要mkdir as site1 www site1 log site2 www site2 log site3 www site3 log 这些文件夹的权限是700 然后我在 Bash shell 中尝试了脚本 如下所示 sites a
  • 为什么我无法注销 django 用户身份验证?

    我正在使用 django contrib auth 用户管理系统 因此 我将注册 插入到用户表 模型中 并从 django contrib auth views login 进行登录 以便我可以登录 但是 我无法使用 django cont
  • 类方法上的 functools.partial

    我试图使用另一个更通用的类方法定义一些类方法 如下所示 class RGB object def init self red blue green super RGB self init self red red self blue blu
  • 我什么时候应该为 Map 键创建一个类?

    我正在使用 Java 6 假设我有一个类 我想将其实例保存到地图中 后来我想仅使用 关键字段 来检索实例 为了简洁起见 我将忽略字段修饰符 getter 和 setter class A String field1 String field
  • 如何在 Url.Content 中包含 MVC Razor 变量?

    使用 MVC 3 Razor 如何在调用中指定变量 Url Content Example var myVar Request QueryString foo a href Url Content a bar myvar gt click
  • 程序在其他 Windows 机器上无法正常运行

    我的应用程序遇到问题 我试图获取它运行的系统的所有网络配置 最终目标是找到优先级最高的MAC地址 当我使用 QtCreator 运行代码时 代码运行正常并且可以工作 当我创建包含 dll 文件和 exe 文件的文件夹时 代码也运行正常 但问
  • 无法使用 API Gateway 运行 AWS Lambda 函数

    我创建了一个简单的 python 3 7 lambda 函数 import json import boto3 s3 boto3 client s3 def lambda handler event context bucket nubi