Analisis terperinci AWS Lambda

Terjemahan artikel disediakan khusus untuk pelajar kursus tersebut "Perkhidmatan Awan". Berminat untuk berkembang ke arah ini? Tonton kelas induk oleh Egor Zuev (TeamLead di InBit) "Perkhidmatan AWS EC2" dan sertai kumpulan kursus seterusnya: bermula pada 26 September.

Analisis terperinci AWS Lambda

Lebih ramai orang berhijrah ke AWS Lambda untuk kebolehskalaan, prestasi, penjimatan dan keupayaan untuk mengendalikan berjuta-juta atau malah trilion permintaan setiap bulan. Untuk melakukan ini, anda tidak perlu mengurus infrastruktur di mana perkhidmatan itu berjalan. Dan penskalaan auto membolehkan anda menyampaikan beribu-ribu permintaan serentak sesaat. Saya rasa AWS Lambda boleh dipanggil salah satu perkhidmatan AWS yang paling popular.

AWS Lambda

AWS Lambda ialah perkhidmatan pengkomputeran tanpa pelayan dipacu peristiwa yang membolehkan anda menjalankan kod tanpa memperuntukkan atau mengurus pelayan dan melanjutkan perkhidmatan AWS lain menggunakan logik tersuai. Lambda secara automatik bertindak balas kepada pelbagai peristiwa (dipanggil pencetus), seperti permintaan HTTP melalui Amazon API Gateway, perubahan kepada data dalam baldi Amazon S3 atau jadual Amazon DynamoDB; atau anda boleh menjalankan kod anda melalui panggilan API menggunakan AWS SDK dan peralihan keadaan dalam AWS Step Functions.

Lambda menjalankan kod pada infrastruktur pengkomputeran yang sangat tersedia dan bertanggungjawab sepenuhnya untuk mentadbir platform asas, termasuk penyelenggaraan pelayan dan sistem pengendalian, peruntukan sumber, penskalaan automatik, pemantauan kod dan pengelogan. Iaitu, anda hanya perlu memuat naik kod anda dan mengkonfigurasi bagaimana dan bila ia harus dilaksanakan. Sebaliknya, perkhidmatan akan menguruskan pelancarannya dan memastikan ketersediaan tinggi aplikasi anda.

Bila hendak bertukar kepada Lambda?

AWS Lambda ialah platform pengkomputeran mudah yang sesuai untuk pelbagai kes penggunaan, selagi bahasa dan masa jalan kod anda disokong oleh perkhidmatan. Jika anda ingin menumpukan pada kod dan logik perniagaan anda sambil menyumber luar penyelenggaraan, penyediaan dan penskalaan pelayan pada kos yang berpatutan, AWS Lambda pastinya adalah cara yang tepat.

Lambda sesuai untuk mencipta antara muka pengaturcaraan dan apabila digunakan bersama dengan Gerbang API, anda boleh mengurangkan kos dengan ketara dan pergi ke pasaran dengan lebih pantas. Terdapat pelbagai cara untuk menggunakan fungsi dan pilihan Lambda untuk mengatur seni bina tanpa pelayan - semua orang boleh memilih sesuatu yang sesuai berdasarkan matlamat mereka.

Lambda membolehkan anda melakukan pelbagai tugas. Oleh itu, terima kasih kepada sokongan CloudWatch, anda boleh membuat tugas tertunda dan mengautomasikan proses individu. Tiada sekatan pada sifat dan intensiti penggunaan perkhidmatan (penggunaan memori dan masa diambil kira), dan tiada apa yang menghalang anda daripada bekerja secara sistematik pada perkhidmatan mikro sepenuhnya berdasarkan Lambda.

Di sini anda boleh membuat tindakan berorientasikan perkhidmatan yang tidak berjalan secara berterusan. Contoh biasa ialah penskalaan imej. Walaupun dalam kes sistem teragih, fungsi Lambda kekal relevan.

Jadi, jika anda tidak mahu berurusan dengan memperuntukkan dan mengurus sumber pengkomputeran, cuba AWS Lambda; jika anda tidak memerlukan pengiraan yang berat dan intensif sumber, cuba juga AWS Lambda; jika kod anda berjalan secara berkala, betul, anda harus mencuba AWS Lambda.

keselamatan

Setakat ini tiada aduan mengenai keselamatan. Sebaliknya, memandangkan banyak proses dalaman dan ciri pelaksanaan model ini disembunyikan daripada pengguna persekitaran masa jalan terurus AWS Lambda, beberapa peraturan keselamatan awan yang diterima umum menjadi tidak relevan.

Seperti kebanyakan perkhidmatan AWS, Lambda disediakan atas dasar keselamatan dan pematuhan bersama antara AWS dan pelanggan. Prinsip ini mengurangkan beban operasi pada pelanggan, memandangkan AWS mengambil tugas menyelenggara, mentadbir dan memantau komponen perkhidmatan - daripada sistem pengendalian hos dan lapisan virtualisasi kepada keselamatan fizikal aset infrastruktur.

Bercakap secara khusus tentang AWS Lambda, AWS bertanggungjawab untuk mengurus infrastruktur asas, perkhidmatan asas yang berkaitan, sistem pengendalian dan platform aplikasi. Walaupun pelanggan bertanggungjawab untuk keselamatan kodnya, menyimpan data sulit, mengawal akses kepadanya, serta perkhidmatan dan sumber Lambda (Pengurusan Identiti dan Akses, IAM), termasuk dalam had fungsi yang digunakan.

Rajah di bawah menunjukkan model tanggungjawab bersama kerana ia digunakan untuk AWS Lambda. Tanggungjawab AWS berwarna oren dan Tanggungjawab Pelanggan berwarna biru. Seperti yang anda lihat, AWS mengambil lebih banyak tanggungjawab untuk aplikasi yang digunakan pada perkhidmatan.

Analisis terperinci AWS Lambda

Model Tanggungjawab Dikongsi Berkenaan dengan AWS Lambda

Masa jalan Lambda

Kelebihan utama Lambda ialah dengan melaksanakan fungsi bagi pihak anda, perkhidmatan itu sendiri memperuntukkan sumber yang diperlukan. Anda boleh mengelakkan pembaziran masa dan usaha pada pentadbiran sistem dan fokus pada logik dan pengekodan perniagaan.

Perkhidmatan Lambda dibahagikan kepada dua pesawat. Yang pertama ialah satah kawalan. Menurut Wikipedia, pesawat kawalan adalah sebahagian daripada rangkaian yang bertanggungjawab untuk mengangkut trafik dan penghalaan isyarat. Ia merupakan komponen utama yang membuat keputusan global tentang penyediaan, perkhidmatan dan pengagihan beban kerja. Di samping itu, pesawat kawalan bertindak sebagai topologi rangkaian pembekal penyelesaian, bertanggungjawab untuk penghalaan dan mengurus trafik.

Satah kedua ialah satah data. Ia, seperti pesawat kawalan, mempunyai tugasnya sendiri. Pesawat kawalan menyediakan API untuk mengurus fungsi (CreateFunction, UpdateFunctionCode) dan mengawal cara Lambda berkomunikasi dengan perkhidmatan AWS yang lain. Pesawat data mengawal API Invoke, yang menjalankan fungsi Lambda. Selepas fungsi dipanggil, satah kawalan memperuntukkan atau memilih persekitaran masa jalan sedia ada yang telah disediakan terlebih dahulu untuk fungsi itu, dan kemudian melaksanakan kod di dalamnya.

AWS Lambda menyokong pelbagai bahasa pengaturcaraan, termasuk Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2, dan lain-lain, melalui persekitaran masa jalan masing-masing. AWS sentiasa mengemas kininya, mengedarkan patch keselamatan dan melakukan aktiviti penyelenggaraan lain pada persekitaran ini. Lambda membolehkan anda menggunakan bahasa lain juga, dengan syarat anda melaksanakan sendiri masa jalan yang sesuai. Dan kemudian anda perlu menjaga penyelenggaraannya, termasuk memantau keselamatannya.

Bagaimanakah semuanya berfungsi dan bagaimana perkhidmatan akan melaksanakan fungsi anda?

Setiap fungsi berjalan dalam satu atau lebih persekitaran khusus, yang wujud hanya untuk hayat fungsi tersebut dan kemudiannya dimusnahkan. Setiap persekitaran hanya membuat satu panggilan pada satu masa, tetapi ia digunakan semula jika terdapat berbilang panggilan bersiri ke fungsi yang sama. Semua persekitaran masa jalan dijalankan pada mesin maya dengan virtualisasi perkakasan - yang dipanggil mikroVM. Setiap microVM diperuntukkan kepada akaun AWS tertentu dan boleh digunakan semula oleh persekitaran untuk melaksanakan fungsi yang berbeza dalam akaun tersebut. MicroVMs dibungkus ke dalam blok binaan platform perkakasan Lambda Worker, yang dimiliki dan dikendalikan oleh AWS. Masa jalan yang sama tidak boleh digunakan oleh fungsi yang berbeza dan mikroVM juga tidak unik untuk akaun AWS yang berbeza.

Analisis terperinci AWS Lambda

Model Pengasingan AWS Lambda

Pengasingan persekitaran masa jalan dilaksanakan menggunakan beberapa mekanisme. Di peringkat atas setiap persekitaran terdapat salinan berasingan bagi komponen berikut:

  • Kod fungsi
  • Mana-mana lapisan Lambda dipilih untuk fungsi tersebut
  • Persekitaran pelaksanaan fungsi
  • Ruang pengguna minimum berdasarkan Amazon Linux

Mekanisme berikut digunakan untuk mengasingkan persekitaran pelaksanaan yang berbeza:

  • cgroups - hadkan akses kepada CPU, memori, storan dan sumber rangkaian untuk setiap persekitaran masa jalan;
  • ruang nama - ID proses pengumpulan, ID pengguna, antara muka rangkaian dan sumber lain yang diuruskan oleh kernel Linux. Setiap masa jalan berjalan dalam ruang nama sendiri;
  • seccomp-bpf - mengehadkan panggilan sistem yang boleh digunakan dalam masa jalan;
  • iptables dan jadual penghalaan - pengasingan persekitaran pelaksanaan antara satu sama lain;
  • chroot - menyediakan akses terhad kepada sistem fail asas.

Digabungkan dengan teknologi pengasingan proprietari AWS, mekanisme ini memastikan pemisahan masa jalan yang boleh dipercayai. Persekitaran yang diasingkan dengan cara ini tidak boleh mengakses atau mengubah suai data daripada persekitaran lain.

Walaupun berbilang masa jalan akaun AWS yang sama boleh dijalankan pada mikroVM tunggal, dalam apa jua keadaan tidak boleh mikroVM dikongsi antara akaun AWS yang berbeza. AWS Lambda hanya menggunakan dua mekanisme untuk mengasingkan mikroVM: kejadian EC2 dan Mercun. Pengasingan tetamu di Lambda berdasarkan kejadian EC2 telah wujud sejak 2015. Firecracker ialah hipervisor sumber terbuka baharu yang direka khusus oleh AWS untuk beban kerja tanpa pelayan dan diperkenalkan pada 2018. Perkakasan fizikal yang menjalankan mikroVM dikongsi antara beban kerja merentas akaun yang berbeza.

Menyimpan persekitaran dan keadaan proses

Walaupun masa jalan Lambda adalah unik untuk fungsi yang berbeza, ia boleh memanggil fungsi yang sama berulang kali, bermakna masa jalan boleh bertahan selama beberapa jam sebelum dimusnahkan.

Setiap masa jalan Lambda juga mempunyai sistem fail boleh tulis yang boleh diakses melalui direktori /tmp. Kandungannya tidak boleh diakses daripada masa jalan lain. Setakat kegigihan keadaan proses, fail yang ditulis kepada /tmp wujud untuk keseluruhan kitaran hayat persekitaran masa jalan. Ini membolehkan hasil berbilang panggilan terkumpul, yang amat berguna untuk operasi yang mahal seperti memuatkan model pembelajaran mesin.

Pemindahan data panggilan

API Invoke boleh digunakan dalam dua mod: mod acara dan mod tindak balas permintaan. Dalam mod acara, panggilan ditambahkan pada baris gilir untuk pelaksanaan kemudian. Dalam mod permintaan-tindak balas, fungsi dipanggil serta-merta dengan muatan yang disediakan, selepas itu respons dikembalikan. Dalam kedua-dua kes, fungsi berjalan dalam persekitaran Lambda, tetapi dengan laluan muatan yang berbeza.

Semasa panggilan balas permintaan, muatan mengalir daripada API pemprosesan permintaan (Pemanggil API), seperti Gerbang API AWS atau AWS SDK, ke pengimbang beban dan kemudian ke perkhidmatan panggilan Lambda (Perkhidmatan Invoke). Yang terakhir menentukan persekitaran yang sesuai untuk melaksanakan fungsi dan lulus muatan di sana untuk menyelesaikan panggilan. Pengimbang beban menerima trafik yang dilindungi TLS melalui Internet. Trafik dalam perkhidmatan Lambda—selepas pengimbang beban—melalui VPC dalaman di rantau AWS tertentu.

Analisis terperinci AWS Lambda

Model Pemprosesan Panggilan AWS Lambda: Mod Permintaan-Respons

Panggilan acara boleh dibuat dengan segera atau ditambah pada baris gilir. Dalam sesetengah kes, baris gilir dilaksanakan menggunakan Amazon SQS (Amazon Simple Queue Service), yang menghantar panggilan ke perkhidmatan pemenuhan panggilan Lambda melalui proses tinjauan dalaman. Trafik yang dihantar dilindungi oleh TLS, dan tiada penyulitan tambahan data yang disimpan dalam Amazon SQS.

Panggilan acara tidak membalas respons—Pekerja Lambda hanya mengabaikan sebarang maklumat respons. Panggilan berasaskan acara daripada Amazon S3, Amazon SNS, CloudWatch dan sumber lain diproses oleh Lambda dalam mod acara. Panggilan daripada strim Amazon Kinesis dan DynamoDB, baris gilir SQS, Pengimbang Beban Aplikasi dan panggilan Gerbang API diproses dalam fesyen tindak balas permintaan.

Pemantauan

Anda boleh memantau dan mengaudit fungsi Lambda menggunakan pelbagai mekanisme dan perkhidmatan AWS, termasuk yang berikut.

amazoncloudwatch
Mengumpul pelbagai statistik seperti bilangan permintaan, tempoh permintaan dan bilangan permintaan yang gagal.

Amazon CloudTrail
Membolehkan anda melog, memantau secara berterusan dan mengekalkan maklumat aktiviti akaun yang dikaitkan dengan infrastruktur AWS anda. Anda akan mempunyai sejarah lengkap tindakan yang dilakukan menggunakan AWS Management Console, AWS SDK, alatan baris arahan dan perkhidmatan AWS yang lain.

X-Ray AWS
Menyediakan keterlihatan lengkap ke dalam semua peringkat pemprosesan permintaan dalam aplikasi anda berdasarkan peta komponen dalamannya. Membolehkan anda menganalisis aplikasi semasa pembangunan dan dalam persekitaran pengeluaran.

AWS Config
Anda akan dapat menjejaki perubahan pada konfigurasi fungsi Lambda (termasuk pemadaman) dan masa jalan, teg, nama pengendali, saiz kod, peruntukan memori, tetapan tamat masa dan tetapan serentak, serta peranan pelaksanaan Lambda IAM, subjaringan dan pengikatan kumpulan keselamatan .

Kesimpulan

AWS Lambda menawarkan set alat yang berkuasa untuk membina aplikasi yang selamat dan berskala. Banyak amalan keselamatan dan pematuhan dalam AWS Lambda adalah sama seperti dalam perkhidmatan AWS lain, walaupun terdapat pengecualian. Mulai Mac 2019, Lambda mematuhi pematuhan SOC 1, SOC 2, SOC 3, PCI DSS, Akta Mudah Alih dan Akauntabiliti Insurans Kesihatan (HIPAA) dan peraturan lain. Jadi, apabila anda berfikir tentang melaksanakan aplikasi anda yang seterusnya, pertimbangkan perkhidmatan AWS Lambda - ia mungkin paling sesuai untuk tugas anda.

Sumber: www.habr.com

Tambah komen