Apakah AWS Lambda/Firehose mendukung decoding URL Base64?

Saluran pipa saya adalah sebagai berikut:

Firehose -> Lambda (AWS' Java SDK) -> (S3 & Redshift)

Catatan JSON yang tidak dikodekan (mentah) dikirimkan ke Firehose. Ini kemudian memicu fungsi Lambda yang sedikit mengubahnya. Firehose kemudian memasukkan rekaman yang telah diubah ke dalam bucket S3 dan ke dalam Redshift.

Agar Firehose dapat menambahkan data yang diubah ke S3, data tersebut harus dikodekan Base64 (dan Firehose mendekodekannya sebelum menambahkannya ke S3).

Namun, saya memiliki URL di dalam data yang, ketika didekodekan, = karakter diganti dengan karakter unicode yang setara (\u003d) karena itu adalah karakter yang digunakan decoder Base64 Amazon sebagai padding.

https://www.[snipped].com/...?returnurl=batal&perujuk=batal

Bagaimana cara mempertahankan = karakter tersebut dalam data yang didekodekan?

Catatan: Saya sudah mencoba menggunakan Base64.getUrlEncoder(), namun AWS sepertinya hanya mendukung Base64.getEncoder().


person Jacob G.    schedule 17.07.2018    source sumber
comment
Dan Anda yakin ini bukan sekadar artefak tentang cara Anda menampilkan data?   -  person Michael - sqlbot    schedule 18.07.2018
comment
@ Michael-sqlbot saya yakin; Saya telah mengunduh file S3 dan membukanya menggunakan banyak editor teks berbeda (semuanya disetel ke UTF-8), tetapi semuanya menggantikan = dengan \u003d. Menariknya, data S3 juga ditambahkan ke Redshift melalui Firehose, dan Redshift memang menampilkan karakter =.   -  person Jacob G.    schedule 18.07.2018
comment
Anda telah mengatakan Firehose -› S3 tetapi juga Firehose -› Lambda -› S3. Tidak jelas bagi saya peran apa yang mungkin dimainkan oleh kode Lambda, tapi sepertinya itulah tersangka yang paling mungkin. \u003d tidak setara dengan = dalam file teks utf-8, tetapi dalam JSON dan tentu saja antarmuka ke Lambda selalu JSON (meskipun tidak relevan jika data masuk dan keluar selalu diwakili dalam base64). Saya sebenarnya tidak cukup memahami pengaturan Anda untuk mengetahui apakah ini merupakan spekulasi yang berguna bagi saya.   -  person Michael - sqlbot    schedule 18.07.2018
comment
@ Michael-sqlbot Saya minta maaf karena tidak menjelaskannya dengan lebih baik. Catatan JSON yang tidak dikodekan (mentah) dikirimkan ke Firehose. Ini kemudian memicu fungsi Lambda yang sedikit mengubahnya. Firehose kemudian memasukkan rekaman yang telah diubah ke dalam bucket S3 dan ke dalam Redshift. Semoga ini bisa membantu memperjelas segalanya!   -  person Jacob G.    schedule 18.07.2018


Jawaban (1)


Ternyata pelolosan HTML diaktifkan di perpustakaan JSON (Gson) yang saya gunakan saat (membatalkan) serialisasi catatan Lambda saya. Untuk memperbaikinya, saya hanya perlu menonaktifkan pelolosan HTML:

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