Terjemahan artikel disiapkan khusus untuk siswa kursus Layanan Cloud . Apakah menarik untuk dikembangkan ke arah ini? Tonton kelas master oleh Egor Zuev (TeamLead di InBit) "AWS EC2 Service" dan bergabung dengan grup kursus terdekat: mulai pada 26 September.

Semakin banyak orang yang beralih ke AWS Lambda untuk skalabilitas, kinerja, penghematan biaya, dan kemampuan untuk memproses jutaan atau bahkan triliunan permintaan per bulan. Untuk melakukan ini, Anda tidak perlu mengelola infrastruktur tempat layanan ini bekerja. Dan penskalaan otomatis memungkinkan Anda melayani ribuan permintaan simultan per detik. Saya pikir AWS Lambda berhak disebut sebagai salah satu layanan AWS paling populer.
AWS Lambda
AWS Lambda adalah layanan komputasi tanpa server yang berorientasi pada peristiwa yang memungkinkan Anda untuk mengeksekusi kode tanpa mengalokasikan dan mengelola server dan melengkapi layanan AWS lainnya berdasarkan logika pengguna. Lambda secara otomatis merespons berbagai peristiwa (yang disebut pemicu), misalnya, untuk permintaan HTTP melalui Amazon API Gateway, perubahan data di keranjang Amazon S3 atau tabel Amazon DynamoDB; Atau Anda dapat menjalankan kode Anda melalui panggilan API menggunakan AWS SDK dan menyatakan transisi di AWS Step Functions.
Lambda menjalankan kode pada infrastruktur komputasi yang sangat mudah diakses dan bertanggung jawab penuh untuk mengelola platform yang mendasarinya, termasuk pemeliharaan server dan sistem operasi, alokasi sumber daya, penskalaan otomatis, pemantauan kode, dan pencatatan. Artinya, Anda hanya perlu mengunggah kode Anda dan mengonfigurasi bagaimana dan kapan harus dijalankan. Pada gilirannya, layanan akan menangani peluncurannya dan memastikan ketersediaan aplikasi Anda yang tinggi.
Kapan meng-upgrade ke Lambda?
AWS Lambda adalah platform komputasi yang nyaman yang cocok untuk banyak skenario aplikasi, tentu saja, jika bahasa dan runtime kode Anda didukung oleh layanan. Jika Anda ingin fokus pada kode dan logika bisnis dengan pemeliharaan, penyediaan, dan penskalaan server ke penyedia pihak ketiga dengan harga yang wajar, Anda harus meningkatkan ke AWS Lambda.
Lambda sangat ideal untuk membuat antarmuka perangkat lunak, dan jika Anda menggunakan layanan dengan API Gateway, Anda dapat secara signifikan mengurangi biaya dan memasuki pasar lebih cepat. Ada berbagai cara untuk menggunakan fungsi dan opsi Lambda untuk mengatur arsitektur tanpa server - setiap orang akan dapat memilih sesuatu yang sesuai berdasarkan tujuan mereka.
Lambda memungkinkan Anda untuk melakukan berbagai tugas. Jadi, berkat dukungan CloudWatch, Anda dapat membuat tugas yang tertunda dan mengotomatiskan proses individu. Tidak ada batasan pada sifat dan intensitas penggunaan layanan (konsumsi memori dan waktu diperhitungkan), dan tidak ada yang menghalangi Anda untuk bekerja secara sistematis pada layanan-mikro sepenuhnya berdasarkan Lambda.
Di sini Anda dapat membuat tindakan berorientasi layanan yang tidak selalu dilakukan. Contoh tipikal adalah penskalaan gambar. Bahkan dalam kasus sistem terdistribusi, fungsi Lambda tidak kehilangan relevansinya.
Jadi, jika Anda tidak ingin terlibat dalam alokasi dan administrasi sumber daya komputasi - coba AWS Lambda; jika Anda tidak membutuhkan komputasi yang berat dan intensif sumber daya, cobalah AWS Lambda; jika kode Anda berjalan secara berkala - semuanya 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 AWS Lambda yang dikelola, beberapa aturan keamanan cloud yang diterima secara umum tidak lagi relevan.
Seperti kebanyakan layanan AWS, Lambda diberikan atas dasar tanggung jawab bersama antara AWS dan pelanggan terkait keamanan dan kepatuhan terhadap peraturan. Prinsip ini mengurangi beban operasional pada klien, karena AWS mengambil tugas melayani, mengelola, dan mengendalikan komponen layanan - dari sistem operasi host dan tingkat virtualisasi ke keamanan fisik objek infrastruktur.
Berbicara secara khusus tentang AWS Lambda, AWS bertanggung jawab untuk mengelola infrastruktur dasar, layanan mendasar terkait, sistem operasi, dan platform aplikasi. Sementara klien bertanggung jawab atas keamanan kode-kodenya, penyimpanan data rahasia, kontrol akses kepada mereka, serta layanan dan sumber daya Lambda (Manajemen Identitas dan Akses, IAM), termasuk dalam lingkup fungsi yang digunakan.
Diagram di bawah ini menunjukkan model tanggung jawab bersama yang berlaku untuk AWS Lambda. Area tanggung jawab AWS adalah oranye, dan tanggung jawab pelanggan berwarna biru. Seperti yang Anda lihat, AWS mengambil lebih banyak tanggung jawab untuk aplikasi yang digunakan pada layanan.

Model tanggung jawab bersama yang berlaku untuk AWS Lambda
Lambda Runtime
Keuntungan utama Lambda adalah, dengan menjalankan fungsi atas nama Anda, layanan itu sendiri mengalokasikan sumber daya yang diperlukan. Anda dapat menghemat waktu dan upaya dalam administrasi sistem dan fokus pada logika bisnis dan penulisan kode.
Layanan Lambda dibagi menjadi dua pesawat. Yang pertama adalah bidang kontrol. Menurut Wikipedia, bidang kontrol adalah bagian dari jaringan yang bertanggung jawab untuk pensinyalan lalu lintas dan perutean. Ini adalah komponen utama yang membuat keputusan global tentang alokasi, pemeliharaan, dan distribusi beban kerja. Selain itu, bidang kontrol bertindak sebagai topologi jaringan penyedia solusi, yang bertanggung jawab untuk merutekan dan mengelola lalu lintas.
Pesawat kedua adalah bidang data. Ini, seperti bidang kontrol, memiliki tugasnya sendiri. Pesawat manajemen menyediakan API untuk mengelola fungsi (CreateFunction, UpdateFunctionCode) dan mengontrol interaksi Lambda dengan layanan AWS lainnya. Data plane dikendalikan oleh Invoke API, yang memanggil fungsi Lambda. Setelah memanggil fungsi, bidang kontrol memilih atau memilih runtime yang ada disiapkan sebelumnya untuk fungsi ini, dan kemudian mengeksekusi kode di dalamnya.
AWS Lambda mendukung banyak bahasa pemrograman, termasuk Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2, dan lainnya, melalui runtimes masing-masing. AWS secara teratur memperbaruinya, mendistribusikan tambalan keamanan, dan melakukan operasi pemeliharaan lainnya pada lingkungan ini. Lambda memungkinkan Anda untuk menggunakan bahasa lain, asalkan Anda sendiri menerapkan runtime yang sesuai. Dan kemudian Anda harus berurusan dengan pemeliharaannya, termasuk memantau keamanan.
Bagaimana cara kerjanya dan bagaimana layanan menjalankan fungsi Anda?
Setiap fungsi bekerja di satu atau beberapa lingkungan terpilih yang hanya ada selama siklus hidup fungsi ini, dan kemudian dihancurkan. Di setiap lingkungan, hanya satu panggilan dilakukan pada satu waktu, tetapi digunakan kembali jika ada banyak panggilan serial dari fungsi yang sama. Semua runtime berjalan pada mesin virtual dengan virtualisasi perangkat keras - pada apa yang disebut microVM. Setiap microVM ditugaskan untuk akun AWS tertentu dan dapat digunakan kembali oleh lingkungan untuk melakukan berbagai fungsi pada akun itu. MicroVM dikemas dalam blok bangunan platform perangkat keras Lambda Worker, yang dimiliki dan dioperasikan AWS. Runtime yang sama tidak dapat digunakan oleh fungsi yang berbeda, seperti halnya microVM unik untuk akun AWS yang berbeda.

Model isolasi AWS Lambda
Isolasi Runtime diimplementasikan menggunakan beberapa mekanisme. Pada level tertinggi dari setiap lingkungan, terdapat salinan terpisah dari komponen berikut:
- Kode fungsi
- Setiap layer Lambda dipilih untuk fungsi ini
- Fungsi runtime
- Ruang Pengguna Minimum Amazon Linux
Mekanisme berikut digunakan untuk mengisolasi lingkungan runtime yang berbeda:
- cgroups - pembatasan akses ke sumber daya CPU, memori, bandwidth drive dan jaringan untuk setiap lingkungan runtime;
- namespaces - pengelompokan ID proses, ID pengguna, antarmuka jaringan, dan sumber daya lainnya yang dikelola oleh kernel Linux. Setiap runtime berjalan di namespace-nya sendiri;
- seccomp-bpf - pembatasan panggilan sistem yang dapat digunakan di lingkungan runtime;
- iptables dan tabel routing - isolasi lingkungan runtime di antara mereka sendiri;
- chroot - menyediakan akses terbatas ke sistem file yang mendasarinya.
Dikombinasikan dengan teknologi isolasi AWS yang dipatenkan, mekanisme ini memastikan pemisahan lingkungan runtime yang andal. Media yang diisolasi dengan cara ini tidak dapat mengakses atau mengubah data dari media lain.
Meskipun beberapa runtime dari akun AWS yang sama dapat berjalan pada microVM yang sama, dalam keadaan apa pun mikroVM tidak dapat dibagikan di antara akun AWS yang berbeda. AWS Lambda hanya menggunakan dua mekanisme untuk mengisolasi microVM: instance EC2 dan Petasan. Isolasi tamu di Lambda berdasarkan instance EC2 telah digunakan sejak 2015. Firecracker adalah hypervisor open source baru yang dirancang khusus oleh AWS untuk beban kerja tanpa server dan diperkenalkan pada 2018. Peralatan fisik tempat mikroVM dijalankan dibagi di antara beban kerja akun yang berbeda.
Menyimpan lingkungan dan status proses
Meskipun runtime Lambda unik untuk fungsi yang berbeda, fungsi yang sama dapat dipanggil kembali di dalamnya, yaitu, runtime dapat berlangsung beberapa jam sebelum dihancurkan.
Setiap runtime Lambda juga memiliki sistem file izin tulis, dapat diakses melalui direktori / tmp. Isinya tidak dapat diakses dari runtimes lain. Mengenai pelestarian status proses, file yang direkam dalam / tmp ada di seluruh siklus hidup runtime. Karena itu, dimungkinkan untuk mengakumulasikan hasil beberapa panggilan, yang sangat berguna untuk operasi yang mahal seperti model pembelajaran mesin pemuatan.
Panggil Transfer Data
API Invoke dapat digunakan dalam dua mode: dalam mode acara dan dalam mode respons-permintaan. Dalam mode acara, panggilan ditambahkan ke antrian untuk eksekusi selanjutnya. Dalam mode "permintaan-respons", fungsi dipanggil langsung dengan muatan yang disediakan, setelah itu respons dikembalikan. Dalam kedua kasus, fungsi dieksekusi di lingkungan Lambda, tetapi dengan jalur muatan yang berbeda.
Selama panggilan respons permintaan, muatan datang dari API Pemrosesan Permintaan (API Caller), seperti AWS API Gateway atau AWS SDK, ke penyeimbang beban, dan kemudian ke Layanan Eksekusi Panggilan Lambda (Layanan Panggilan). Yang terakhir menentukan lingkungan yang sesuai untuk menjalankan fungsi dan mentransfer muatan di sana untuk menyelesaikan panggilan. Penyeimbang beban menerima lalu lintas dengan perlindungan TLS melalui Internet. Lalu lintas dalam layanan Lambda - setelah penyeimbang beban - melewati VPC internal di wilayah AWS tertentu.

Model Pemrosesan Panggilan AWS Lambda: Mode Permintaan-Respons
Panggilan acara dapat dilakukan segera atau ditambahkan ke antrian. Dalam beberapa kasus, antrian diimplementasikan menggunakan layanan Amazon SQS (Amazon Simple Queue Service), yang mentransfer panggilan ke layanan eksekusi panggilan Lambda melalui proses pemungutan suara internal. Lalu lintas yang dikirimkan dilindungi oleh TLS, dan tidak ada enkripsi tambahan dari data yang disimpan di Amazon SQS disediakan.
Panggilan acara tidak memberikan respons - Pekerja Lambda mengabaikan informasi tanggapan. Panggilan berdasarkan Amazon S3, Amazon SNS, CloudWatch, dan sumber lainnya ditangani oleh Lambda dalam mode acara. Panggilan dari Amazon Kinesis dan aliran DynamoDB, panggilan dari antrian SQS, penyeimbang beban aplikasi, dan API Gateway ditangani dalam mode respons-permintaan.
Pemantauan
Anda dapat memantau dan mengaudit fungsi Lambda menggunakan berbagai mekanisme dan layanan AWS, termasuk yang berikut ini.
Amazon cloudwatch
Itu mengumpulkan berbagai statistik, seperti jumlah permintaan, durasi permintaan, dan jumlah permintaan yang gagal.
Amazon CloudTrail
Memungkinkan Anda untuk login, terus memantau, dan menyimpan informasi aktivitas akun yang terkait dengan infrastruktur AWS Anda. Anda akan memiliki kronologi tindakan lengkap yang dilakukan menggunakan AWS Management Console, AWS SDK, alat-alat baris perintah, dan layanan AWS lainnya.
AWS X-Ray
Memberikan visibilitas penuh dari semua tahapan pemrosesan permintaan dalam aplikasi Anda berdasarkan peta komponen internalnya. Memungkinkan Anda untuk menganalisis aplikasi selama pengembangan dan dalam lingkungan produksi.
Konfigurasi AWS
Anda akan dapat melacak perubahan pada konfigurasi fungsi Lambda (termasuk penghapusannya) dan runtime, tag, nama handler, ukuran kode, alokasi memori, pengaturan latensi dan konkurensi, serta ikatan peran runtime IAM, subnet, dan binding grup keamanan.
Kesimpulan
AWS Lambda menawarkan seperangkat alat yang kuat untuk membuat aplikasi yang aman dan skalabel. Banyak metode kepatuhan keselamatan dan peraturan dalam AWS Lambda tidak berbeda dari yang digunakan dalam layanan AWS lainnya, meskipun ada pengecualian. Pada Maret 2019, Lambda mematuhi SOC 1, SOC 2, SOC 3, PCI DSS, Undang-Undang Keberlanjutan dan Akuntabilitas Asuransi Kesehatan AS (HIPAA), dan peraturan lainnya. Karena itu, ketika Anda berpikir untuk mengimplementasikan aplikasi lain, pertimbangkan layanan AWS Lambda - mungkin itu yang paling cocok untuk tugas Anda.