AWS Lambda/Firehose รองรับการถอดรหัส URL Base64 หรือไม่

ไปป์ไลน์ของฉันเป็นดังนี้:

Firehose -> Lambda (Java SDK ของ AWS) -> (S3 และ Redshift)

ส่งบันทึก JSON ที่ไม่ได้เข้ารหัส (ดิบ) ไปยัง Firehose จากนั้นจะทริกเกอร์ฟังก์ชัน Lambda ซึ่งจะแปลงฟังก์ชันเล็กน้อย จากนั้น Firehose จะใส่บันทึกที่แปลงแล้วลงในบัคเก็ต S3 และลงใน Redshift

เพื่อให้ Firehose เพิ่มข้อมูลที่แปลงแล้วไปยัง S3 ข้อมูลนั้นจะต้องเข้ารหัส Base64 (และ Firehose จะถอดรหัสก่อนที่จะเพิ่มลงใน S3)

อย่างไรก็ตาม ฉันมี URL ภายในข้อมูลที่เมื่อถอดรหัสแล้ว อักขระ = ตัวจะถูกแทนที่ด้วยอักขระ Unicode ที่เทียบเท่ากัน (\u003d) เนื่องจากเป็นอักขระที่ตัวถอดรหัส Base64 ของ Amazon ใช้เป็นช่องว่างภายใน

https://www.[snipped].com/...?returnurl=null&ผู้อ้างอิง=null

ฉันจะเก็บอักขระ = เหล่านั้นไว้ในข้อมูลที่ถอดรหัสได้อย่างไร

หมายเหตุ: ฉันได้ลองใช้ Base64.getUrlEncoder() แล้ว แต่ดูเหมือนว่า AWS จะรองรับเฉพาะ Base64.getEncoder() เท่านั้น


comment
และคุณแน่ใจหรือไม่ว่านี่ไม่ได้เป็นเพียงส่วนหนึ่งของวิธีการแสดงข้อมูลของคุณ   -  person Michael - sqlbot    schedule 18.07.2018
comment
@ Michael-sqlbot ฉันแน่ใจ; ฉันได้ดาวน์โหลดไฟล์ S3 และเปิดโดยใช้โปรแกรมแก้ไขข้อความต่างๆ มากมาย (ซึ่งทั้งหมดตั้งค่าเป็น UTF-8) แต่ทั้งหมดจะแทนที่ = ด้วย \u003d สิ่งที่น่าสนใจคือบันทึก S3 ได้ถูกเพิ่มไปยัง Redshift ผ่าน Firehose ด้วย และ Redshift ไม่ แสดงอักขระ =   -  person Jacob G.    schedule 18.07.2018
comment
คุณเคยพูดว่า Firehose -› S3 แต่ยังรวมถึง Firehose -> Lambda -> S3 ไม่ชัดเจนสำหรับฉันว่าโค้ด Lambda อาจมีบทบาทอย่างไร แต่ดูเหมือนว่าจะเป็นผู้ต้องสงสัยมากที่สุด \u003d ไม่เทียบเท่ากับ = ในไฟล์ข้อความ utf-8 แต่อยู่ใน JSON และแน่นอนว่าอินเทอร์เฟซของ Lambda จะเป็น JSON เสมอ (แม้ว่าจะไม่เกี่ยวข้องหากข้อมูลเข้าและออกจะแสดงใน base64 เสมอ) ฉันไม่เข้าใจการตั้งค่าของคุณดีพอที่จะรู้ว่านี่เป็นการคาดเดาที่มีประโยชน์ในส่วนของฉันหรือไม่   -  person Michael - sqlbot    schedule 18.07.2018
comment
@ Michael-sqlbot ฉันขอโทษที่ไม่ได้อธิบายให้ดีขึ้น ส่งบันทึก JSON ที่ไม่ได้เข้ารหัส (ดิบ) ไปยัง Firehose จากนั้นจะทริกเกอร์ฟังก์ชัน Lambda ซึ่งจะแปลงฟังก์ชันเล็กน้อย จากนั้น Firehose จะใส่บันทึกที่แปลงแล้วลงในบัคเก็ต S3 และลงใน Redshift หวังว่านี่จะช่วยทำให้สิ่งต่าง ๆ ชัดเจนขึ้นเล็กน้อย!   -  person Jacob G.    schedule 18.07.2018


คำตอบ (1)


ปรากฎว่ามีการเปิดใช้งานการหลบหนี HTML บนไลบรารี JSON (Gson) ที่ฉันใช้เมื่อ (ยกเลิก) การทำให้เรคคอร์ด Lambda ของฉันเป็นอนุกรม เพื่อแก้ไข ฉันเพียงแค่ต้องปิดการใช้งาน HTML Escape:

new GsonBuilder().disableHtmlEscaping().create();
person Jacob G.    schedule 18.07.2018