Analisis mendetail tentang AWS Lambda

Terjemahan artikel disiapkan khusus untuk mahasiswa kursus tersebut "Layanan awan". Tertarik untuk mengembangkan ke arah ini? Tonton kelas master oleh Egor Zuev (Pemimpin Tim di InBit) "Layanan AWS EC2" dan bergabunglah dengan grup kursus berikutnya: dimulai pada 26 September.

Analisis mendetail tentang AWS Lambda

Semakin banyak orang yang bermigrasi ke AWS Lambda untuk skalabilitas, kinerja, penghematan, dan kemampuan menangani jutaan atau bahkan triliunan permintaan per bulan. Untuk melakukan ini, Anda tidak perlu mengelola infrastruktur tempat layanan berjalan. Dan penskalaan otomatis memungkinkan Anda melayani ribuan permintaan secara bersamaan per detik. Menurut saya, AWS Lambda dapat disebut sebagai salah satu layanan AWS paling populer.

AWS Lambda

AWS Lambda adalah layanan komputasi tanpa server berbasis peristiwa yang memungkinkan Anda menjalankan kode tanpa menyediakan atau mengelola server dan memperluas layanan AWS lainnya menggunakan logika kustom. Lambda secara otomatis merespons berbagai peristiwa (disebut pemicu), seperti permintaan HTTP melalui Amazon API Gateway, perubahan data di bucket Amazon S3, atau tabel Amazon DynamoDB; atau Anda dapat menjalankan kode Anda melalui panggilan API menggunakan AWS SDK dan transisi status di AWS Step Functions.

Lambda menjalankan kode pada infrastruktur komputasi yang sangat tersedia dan bertanggung jawab penuh untuk mengelola platform yang mendasarinya, termasuk pemeliharaan server dan sistem operasi, penyediaan sumber daya, penskalaan otomatis, pemantauan kode, dan pencatatan. Artinya, Anda hanya perlu mengunggah kode Anda dan mengonfigurasi bagaimana dan kapan kode tersebut harus dieksekusi. Pada gilirannya, layanan ini akan mengurus peluncurannya dan memastikan ketersediaan tinggi aplikasi Anda.

Kapan harus beralih ke Lambda?

AWS Lambda adalah platform komputasi nyaman yang cocok untuk berbagai kasus penggunaan, selama bahasa dan waktu proses kode Anda didukung oleh layanan. Jika Anda ingin fokus pada kode dan logika bisnis sambil melakukan outsourcing pemeliharaan, penyediaan, dan penskalaan server dengan biaya yang wajar, AWS Lambda jelas merupakan pilihan yang tepat.

Lambda sangat ideal untuk membuat antarmuka pemrograman, dan bila digunakan bersama dengan API Gateway, Anda dapat mengurangi biaya secara signifikan dan menjangkau pasar lebih cepat. Ada berbagai cara untuk menggunakan fungsi dan opsi Lambda untuk mengatur arsitektur tanpa server - setiap orang dapat memilih sesuatu yang sesuai berdasarkan tujuannya.

Lambda memungkinkan Anda melakukan berbagai tugas. Oleh karena itu, berkat dukungan CloudWatch, Anda dapat membuat tugas yang ditangguhkan dan mengotomatiskan proses individual. Tidak ada batasan pada sifat dan intensitas penggunaan layanan (konsumsi memori dan waktu diperhitungkan), dan tidak ada yang menghalangi Anda untuk secara sistematis mengerjakan layanan mikro lengkap berdasarkan Lambda.

Di sini Anda dapat membuat tindakan berorientasi layanan yang tidak berjalan terus menerus. Contoh tipikalnya adalah penskalaan gambar. Bahkan dalam kasus sistem terdistribusi, fungsi Lambda tetap relevan.

Jadi, jika Anda tidak ingin berurusan dengan pengalokasian dan pengelolaan sumber daya komputasi, cobalah AWS Lambda; jika Anda tidak memerlukan perhitungan yang berat dan intensif sumber daya, coba juga AWS Lambda; jika kode Anda berjalan secara berkala, benar, Anda harus mencoba AWS Lambda.

keamanan

Sejauh ini tidak ada keluhan tentang keamanan. Di sisi lain, karena banyak proses internal dan fitur implementasi model ini disembunyikan dari pengguna lingkungan runtime terkelola AWS Lambda, beberapa aturan keamanan cloud yang diterima secara umum menjadi tidak relevan.

Seperti kebanyakan layanan AWS, Lambda disediakan berdasarkan keamanan dan kepatuhan bersama antara AWS dan pelanggan. Prinsip ini mengurangi beban operasional pada klien, karena AWS mengambil tugas memelihara, mengelola, dan memantau komponen layanan - mulai dari sistem operasi host dan lapisan virtualisasi hingga keamanan fisik aset infrastruktur.

Secara khusus berbicara tentang AWS Lambda, AWS bertanggung jawab untuk mengelola infrastruktur dasar, layanan dasar terkait, sistem operasi, dan platform aplikasi. Sedangkan klien bertanggung jawab atas keamanan kodenya, penyimpanan data rahasia, pengendalian akses terhadapnya, serta layanan dan sumber daya Lambda (Identity and Access Management, IAM), termasuk dalam batas fungsi yang digunakan.

Diagram di bawah menunjukkan model tanggung jawab bersama yang diterapkan pada AWS Lambda. Tanggung Jawab AWS berwarna oranye dan Tanggung Jawab Pelanggan berwarna biru. Seperti yang Anda lihat, AWS mengambil tanggung jawab lebih besar atas aplikasi yang diterapkan pada layanan.

Analisis mendetail tentang AWS Lambda

Model Tanggung Jawab Bersama Berlaku untuk AWS Lambda

Waktu proses Lambda

Keuntungan utama Lambda adalah dengan menjalankan suatu fungsi atas nama Anda, layanan itu sendiri yang mengalokasikan sumber daya yang diperlukan. Anda dapat menghindari membuang-buang waktu dan tenaga pada administrasi sistem dan fokus pada logika bisnis dan pengkodean.

Layanan Lambda dibagi menjadi dua pesawat. Yang pertama adalah bidang kendali. Menurut Wikipedia, bidang kendali adalah bagian dari jaringan yang bertanggung jawab untuk mengangkut lalu lintas sinyal dan perutean. Ini adalah komponen utama yang membuat keputusan global tentang penyediaan, pelayanan, dan pendistribusian beban kerja. Selain itu, bidang kendali bertindak sebagai topologi jaringan penyedia solusi, yang bertanggung jawab untuk merutekan dan mengelola lalu lintas.

Bidang kedua adalah bidang data. Ia, seperti bidang kendali, memiliki tugasnya sendiri. Bidang kontrol menyediakan API untuk mengelola fungsi (CreateFunction, UpdateFunctionCode) dan mengontrol cara Lambda berkomunikasi dengan layanan AWS lainnya. Bidang data mengontrol Invoke API, yang menjalankan fungsi Lambda. Setelah suatu fungsi dipanggil, bidang kontrol mengalokasikan atau memilih lingkungan runtime yang sudah ada yang telah disiapkan sebelumnya untuk fungsi tersebut, dan kemudian mengeksekusi kode di dalamnya.

AWS Lambda mendukung berbagai bahasa pemrograman, termasuk Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2, dan lainnya, melalui lingkungan runtime masing-masing. AWS memperbaruinya secara berkala, mendistribusikan patch keamanan, dan melakukan aktivitas pemeliharaan lainnya pada lingkungan ini. Lambda memungkinkan Anda menggunakan bahasa lain juga, asalkan Anda menerapkan sendiri runtime yang sesuai. Kemudian Anda harus menjaga pemeliharaannya, termasuk memantau keamanannya.

Bagaimana cara kerjanya dan bagaimana layanan akan menjalankan fungsi Anda?

Setiap fungsi berjalan di satu atau lebih lingkungan khusus, yang hanya ada selama fungsi tersebut aktif dan kemudian dimusnahkan. Setiap lingkungan hanya membuat satu panggilan pada satu waktu, namun digunakan kembali jika ada beberapa panggilan serial ke fungsi yang sama. Semua lingkungan runtime berjalan pada mesin virtual dengan virtualisasi perangkat keras - yang disebut microVM. Setiap microVM ditugaskan ke akun AWS tertentu dan dapat digunakan kembali oleh lingkungan untuk menjalankan fungsi berbeda dalam akun tersebut. MicroVM dikemas ke dalam blok penyusun platform perangkat keras Lambda Worker, yang dimiliki dan dioperasikan oleh AWS. Waktu proses yang sama tidak dapat digunakan oleh fungsi yang berbeda, dan mikroVM juga tidak unik untuk akun AWS yang berbeda.

Analisis mendetail tentang AWS Lambda

Model Isolasi AWS Lambda

Isolasi lingkungan runtime diimplementasikan menggunakan beberapa mekanisme. Di tingkat atas setiap lingkungan terdapat salinan terpisah dari komponen berikut:

  • Kode fungsi
  • Lapisan Lambda apa pun yang dipilih untuk fungsi tersebut
  • Lingkungan eksekusi fungsi
  • Ruang pengguna minimal berdasarkan Amazon Linux

Mekanisme berikut digunakan untuk mengisolasi lingkungan eksekusi yang berbeda:

  • cgroups - membatasi akses ke CPU, memori, penyimpanan, dan sumber daya jaringan untuk setiap lingkungan runtime;
  • namespace - mengelompokkan ID proses, ID pengguna, antarmuka jaringan, dan sumber daya lain yang dikelola oleh kernel Linux. Setiap runtime berjalan di namespacenya sendiri;
  • seccomp-bpf - membatasi panggilan sistem yang dapat digunakan saat runtime;
  • iptables dan tabel perutean - isolasi lingkungan eksekusi satu sama lain;
  • chroot - menyediakan akses terbatas ke sistem file yang mendasarinya.

Dikombinasikan dengan teknologi isolasi milik AWS, mekanisme ini memastikan pemisahan runtime yang andal. Lingkungan yang diisolasi dengan cara ini tidak dapat mengakses atau mengubah data dari lingkungan lain.

Meskipun beberapa runtime dari akun AWS yang sama dapat berjalan pada satu microVM, mikroVM tidak dapat dibagikan antar akun AWS yang berbeda. AWS Lambda hanya menggunakan dua mekanisme untuk mengisolasi mikroVM: instans EC2 dan Firecracker. Isolasi tamu di Lambda berdasarkan instans EC2 telah ada sejak tahun 2015. Firecracker adalah hypervisor open source baru yang dirancang khusus oleh AWS untuk beban kerja tanpa server dan diperkenalkan pada tahun 2018. Perangkat keras fisik yang menjalankan mikroVM dibagikan antar beban kerja di berbagai akun.

Menyimpan lingkungan dan status proses

Meskipun runtime Lambda bersifat unik untuk fungsi yang berbeda, runtime tersebut dapat memanggil fungsi yang sama berulang kali, artinya runtime tersebut dapat bertahan selama beberapa jam sebelum dimusnahkan.

Setiap runtime Lambda juga memiliki sistem file yang dapat ditulisi yang dapat diakses melalui direktori /tmp. Kontennya tidak dapat diakses dari runtime lain. Sejauh menyangkut persistensi status proses, file yang ditulis ke /tmp ada untuk seluruh siklus hidup lingkungan runtime. Hal ini memungkinkan hasil dari beberapa panggilan diakumulasikan, yang sangat berguna untuk operasi mahal seperti memuat model pembelajaran mesin.

Transfer data panggilan

Invoke API dapat digunakan dalam dua mode: mode peristiwa dan mode permintaan-respons. Dalam mode acara, panggilan ditambahkan ke antrian untuk dieksekusi nanti. Dalam mode permintaan-respons, fungsi tersebut dipanggil secara instan dengan payload yang disediakan, setelah itu respons dikembalikan. Dalam kedua kasus tersebut, fungsi tersebut berjalan di lingkungan Lambda, namun dengan jalur payload yang berbeda.

Selama panggilan respons permintaan, muatan mengalir dari API pemrosesan permintaan (Pemanggil API), seperti AWS API Gateway atau AWS SDK, ke penyeimbang beban, dan kemudian ke layanan panggilan Lambda (Layanan Invoke). Yang terakhir menentukan lingkungan yang sesuai untuk menjalankan fungsi dan meneruskan payload ke sana untuk menyelesaikan panggilan. Penyeimbang beban menerima lalu lintas yang dilindungi TLS melalui Internet. Lalu lintas dalam layanan Lambda—setelah penyeimbang beban—melewati VPC internal di wilayah AWS tertentu.

Analisis mendetail tentang AWS Lambda

Model Pemrosesan Panggilan AWS Lambda: Mode Permintaan-Respons

Panggilan acara dapat segera dilakukan atau ditambahkan ke antrean. Dalam beberapa kasus, antrean diimplementasikan menggunakan Amazon SQS (Amazon Simple Queue Service), yang meneruskan panggilan ke layanan pemenuhan panggilan Lambda melalui proses polling internal. Lalu lintas yang ditransmisikan dilindungi oleh TLS, dan tidak ada enkripsi tambahan terhadap data yang disimpan di Amazon SQS.

Panggilan peristiwa tidak mengembalikan respons—Pekerja Lambda mengabaikan informasi respons apa pun. Panggilan berbasis peristiwa dari Amazon S3, Amazon SNS, CloudWatch, dan sumber lainnya diproses oleh Lambda dalam mode peristiwa. Panggilan dari aliran Amazon Kinesis dan DynamoDB, antrean SQS, Application Load Balancer, dan panggilan API Gateway diproses dengan cara permintaan-respons.

Pemantauan

Anda dapat memantau dan mengaudit fungsi Lambda menggunakan berbagai mekanisme dan layanan AWS, termasuk yang berikut ini.

amazoncloudwatch
Mengumpulkan berbagai statistik seperti jumlah permintaan, durasi permintaan, dan jumlah permintaan yang gagal.

Amazon CloudTrail
Memungkinkan Anda mencatat, terus memantau, dan memelihara informasi aktivitas akun yang terkait dengan infrastruktur AWS Anda. Anda akan memiliki riwayat lengkap tindakan yang dilakukan menggunakan AWS Management Console, AWS SDK, alat baris perintah, dan layanan AWS lainnya.

Sinar-X AWS
Memberikan visibilitas lengkap ke seluruh tahapan pemrosesan permintaan di aplikasi Anda berdasarkan peta komponen internalnya. Memungkinkan Anda menganalisis aplikasi selama pengembangan dan di lingkungan produksi.

Konfigurasi AWS
Anda akan dapat melacak perubahan pada konfigurasi fungsi Lambda (termasuk penghapusan) dan waktu proses, tag, nama pengendali, ukuran kode, alokasi memori, pengaturan batas waktu dan pengaturan konkurensi, serta peran eksekusi IAM Lambda, subnetting, dan pengikatan grup keamanan .

Kesimpulan

AWS Lambda menawarkan seperangkat alat canggih untuk membangun aplikasi yang aman dan skalabel. Banyak praktik keamanan dan kepatuhan di AWS Lambda sama dengan layanan AWS lainnya, meskipun terdapat pengecualian. Mulai Maret 2019, Lambda mematuhi SOC 1, SOC 2, SOC 3, PCI DSS, kepatuhan Health Insurance Portability and Accountability Act (HIPAA), dan peraturan lainnya. Jadi, ketika Anda berpikir untuk mengimplementasikan aplikasi Anda berikutnya, pertimbangkan layanan AWS Lambda - layanan ini mungkin paling sesuai untuk tugas Anda.

Sumber: www.habr.com

Tambah komentar