Kami telah diminta untuk proyek sekolah saya untuk menulis kode Java yang berjalan di AWS Lambda. Ini seharusnya mendapatkan kode sumber dari URL tertentu dan kemudian mengunggahnya ke bucket S3. Kode Java harus berjalan di AWS Lambda.
Saya mendapatkan kode sumber ke variabel String di Java. Kemudian saya memiliki loop while yang mencoba menulis String ke dalam file di direktori /tmp. Kemudian file tersebut diunggah ke S3.
Semuanya berfungsi tetapi saya terjebak dengan satu URL tertentu. Saya telah melacak masalahnya sampai saat ini:
try {
BufferedWriter out = new BufferedWriter(new FileWriter("/tmp/url.txt"));
out.write(source_code); //Replace with the string
//you are trying to write
out.close();
}
catch (IOException e) {
System.out.println("Exception ");
}
Hal yang paling aneh adalah, ketika saya menguji kodenya secara lokal, semuanya berfungsi. File dibuat di direktori /tmp di komputer saya dan kemudian diunggah ke bucket S3. Namun, ketika saya menjalankan kode di Lambda, saya mendapatkan kesalahan berikut:
Task timed out after 15.00 seconds
Adakah yang tahu mengapa Lambda gagal menulis file ke dalam direktori temp dalam kasus khusus ini dan berhasil dengan yang lain?
Amazon Lambda dirancang untuk digunakan sebagai sistem berbasis peristiwa yang merespons peristiwa. Alurnya adalah:
Fungsi Lambda dibatasi hingga waktu eksekusi maksimum 15 menit (ini baru-baru ini ditingkatkan dari batas waktu 5 menit semula). Batas sebenarnya dikonfigurasi saat fungsi Lambda dibuat. Batasan ini diberlakukan karena fungsi Lambda dimaksudkan untuk menjadi kecil dan cepat daripada menjadi aplikasi yang besar.
Pesan kesalahan Anda mengatakan Tugas habis waktu setelah 15.00 detik
. Ini berarti bahwa AWS secara sengaja menghentikan tugas setelah mencapai waktu berjalan 15 detik. Ini tidak ada hubungannya dengan apa yang dilakukan fungsi pada saat itu, atau file yang sedang diproses.
Untuk memperbaiki: Tingkatkan pengaturan batas waktu pada halaman konfigurasi fungsi Lambda Anda.
Pertama, mengapa menulis ke /tmp/? Anda menulis ke lokasi yang sama di mana fungsi Lambda dieksekusi?
Namun, hal yang lebih baik untuk dilakukan adalah, jika Anda ingin menulis string sebagai file S3 maka Anda dapat membuat S3Object dan menulisnya langsung ke AWS S3. Berikut adalah postingan yang menunjukkan contoh: https://stackoverflow.com/a/29844224/358013