AWS CloudFront Function
Pendahuluan
Pendahuluan mengenai CloudFront ada di sini
CloudFront merupakan komponen untuk CDN (Content Delivery Network).
CDN disini berarti sekelompok server yang disebar secara Geografis, agar content yang disediakan dan diminta oleh pengguna lebih cepat dan lebih dekat kepada pengguna.
Lalu kali ini mengenai apa ?
CloudFront sebagai CDN (Content Delivery Network) fungsi utamanya sebenarnya adalah Cache saja.
Ini sangat membantu untuk men-deliver file-file static ataupun dynamic content, tanpa dilakukan perubahan apapun.
Akan tetapi terkadang kita membutuhkan “sedikit” logic untuk file atau dynamic content yang kita kirimkan.
Misalnya :
- Melakukan redirect file ke index.html untuk setiap path di URL, karena di web SPA (Single Page Application) kita biasanya tidak menambahkan /index.html
- Menambahkan HTTP request header atau HTTP response header, untuk tujuan keamanan, atau konfigurasi khusus dari kita.
- Melakukan validasi token sebelum dikirimkan ke Origin.
- Menambahkan konfigurasi CORS (cross-origin resource sharing) di HTTP Header.
- Melakukan rewrite URL untuk URL dengan path tertentu atau dengan pola tertentu.
- Melakukan A/B testing berdasarkan logic tertentu, misalnya dari lokasi geografis, key-value store, dll.
- Menulis ulang URL dengan query string yang terurut, agar Hit Ratio ke Origin lebih rendah.
- dll.
Hal yang bersifat Logic diatas bisa dilakukan dengan cara :
- Untuk static content di S3, kita bisa menambahkan System Metadata, misalnya dengan menambahkan HTTP Header di System metadatanya.
- dengan menambahkan fungsi Lambda di Edge CloudFront.
- dengan menambahkan fungsi CloudFront function.
Nah, sekarang kita akan membahas mengenai CloudFront Function.
Secara struktur , maka CloudFront Function ini akan ditaruh di POP (Point Of Presence) atau Edge dari CloudFront.
Sehingga fungsi ini sebenarnya dijalankan di lokasi yang terdekat dari pengguna.
Secara performa akan lebih baik, dibandingkan dengan menggunakan Lambda @Edge.
Dalam webnya, AWS menginfokan bahwa fungsi CloudFront Function ini bisa jalan dalam waktu 1 milidetik saja.
Sehingga tidak akan banyak mengganggu request yang bahkan dalam jumlah jutaan request.
Gambarnya sebagai berikut :
gambar diambil dari https://aws.amazon.com/id/blogs/aws/introducing-cloudfront-functions-run-your-code-at-the-edge-with-low-latency-at-any-scale/
Di bagian mana CloudFront ini berfungsi ?
CloudFront Function ini sebenarnya berfungsi di bagian yang melipir ke pengguna.
Sehingga fungsi CloudFront Function ini akan terfokus kepada event/trigger :
- setelah CloudFront menerima sebuah request dari pengguna (viewer request)
- sebelum CloudFront meneruskan response kepada pengguna (viewer response)
Berbeda dengan Lambda @Edge yang mempunyai 4 event/trigger :
- setelah CloudFront menerima sebuah request dari pengguna (viewer request)
- sebelum CloudFront meneruskan response kepada pengguna (viewer response)
- sebelum CloudFront meneruskan sebuah request ke origin (origin request)
- setelah CloudFront menerima response dari orign (origin response)
Kalau digambarkan seperti berikut :
gambar diambil dari https://aws.amazon.com/id/blogs/aws/introducing-cloudfront-functions-run-your-code-at-the-edge-with-low-latency-at-any-scale/
Apa kelebihan dari CloudFront Function ini ?
Kelebihannya adalah :
- cocok untuk logic yang ringan (lightweight) dari sebuah manipulasi web request.
- menggunakan model proses yang terisolasi yang lebih ringan, dibandingkan proses isolasi berbasis VM (Virtual Machine) yang biasanya digunakan oleh Lambda @Edge.
- waktu running fungsinya yang dalam hitungan milisecond dan submilisecond.
- fungsinya yang bisa menghandle jutaan web request dalam satu detik.
- lebih mudah dalam implementasinya dan lebih murah.
Apa kekurangan dari CloudFront Function ini ?
Selain kelebihan tentu saja ada kekurangannya, yaitu :
- hanya bisa digunakan untuk 2 trigger/event, yaitu viewer request dan viewer resposne.
- tidak bisa digunakan untuk logic yang membutuhkan akses ke Network, File Sytem, atau request Body.
- bahasa pemrogramannya hanya memakai javascript saja.
- maximum memori untuk eksekusi fungsi di CloudFront Function ini terbatas sampai hanya 10 Mb saja.
- tidak bisa digunakan untuk memanipulasi dan mengakses request body.
- dll.
Begitu…, kita rehat sejenak..