【问题标题】:Does AWS Lambda/Firehose support Base64 URL decoding?AWS Lambda/Firehose 是否支持 Base64 URL 解码?
【发布时间】:2018-07-17 16:04:02
【问题描述】:

我的管道如下:

Firehose -> Lambda(AWS 的 Java SDK)->(S3 和 Redshift)

将未编码的(原始)JSON 记录提交给 Firehose。然后它会触发一个 Lambda 函数,对它进行轻微的转换。然后 Firehose 将转换后的记录放入 S3 存储桶和 Redshift。

为了让 Firehose 将转换后的数据添加到 S3,它需要对数据进行 Base64 编码(并且 Firehose 在将其添加到 S3 之前对其进行解码)。

但是,我在数据中有一个 URL,在解码时,= 字符被替换为等效的 unicode 字符 (\u003d),因为它是 Amazon 的 Base64 解码器用作填充的字符。

https://www.[snipped].com/...?returnurl\u003dnull\u0026referrer\u003dnull

如何在解码后的数据中保留那些= 字符?

注意:我试过使用Base64.getUrlEncoder(),但AWS似乎只支持Base64.getEncoder()

【问题讨论】:

  • 您确定这不仅仅是您如何显示数据的人工制品?
  • @Michael-sqlbot 我敢肯定;我下载了 S3 文件并使用许多不同的文本编辑器打开它(所有这些都设置为 UTF-8),但它们都将 = 替换为 \u003d。有趣的是,S3 记录也通过 Firehose 添加到 Redshift,而 Redshift 确实显示= 字符。
  • 你说的是 Firehose -> S3,还有 Firehose -> Lambda -> S3。我不清楚 Lambda 代码可能扮演什么角色,但似乎这是最有可能的嫌疑人。 \u003d 不等同于 utf-8 文本文件中的 =,但它是 JSON 格式,当然 Lambda 的接口始终是 JSON 格式(尽管如果输入和输出的数据始终以 base64 表示,则无关紧要)。我实际上并不太了解您的设置,无法知道这对我来说是否有用。
  • @Michael-sqlbot 我很抱歉没有更好地解释它。将未编码的(原始)JSON 记录提交给 Firehose。然后它会触发一个 Lambda 函数,对它进行轻微的转换。 Firehose 然后将转换后的记录放入 S3 存储桶和 Redshift。希望这有助于稍微澄清一下!

标签: java amazon-web-services amazon-s3 aws-lambda amazon-kinesis-firehose


【解决方案1】:

事实证明,我在(反)序列化我的 Lambda 记录时使用的 JSON 库 (Gson) 上启用了 HTML 转义。要修复它,我只需要禁用 HTML 转义:

new GsonBuilder().disableHtmlEscaping().create();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多