Proyek di AWS

Buat Aplikasi Web Modern

Menerapkan aplikasi web, menghubungkan ke database, dan menganalisis perilaku pengguna.

Modul 5: Menangkap Perilaku Pengguna

Di modul ini, Anda akan menangkap perilaku pengguna menggunakan AWS Lambda dan layanan tanpa server lainnya.

Ikhtisar

Setelah situs Mythical Mysfits Anda aktif dan berjalan, mari kita membuat cara untuk lebih memahami bagaimana pengguna berinteraksi dengan situs web dan Mysfits-nya. Akan sangat mudah bagi kita untuk menganalisis tindakan pengguna yang diambil di situs web yang mengarah pada perubahan data di ujung belakang kita - ketika mysfits diadopsi atau disukai.

Tetapi memahami tindakan yang dilakukan pengguna Anda di situs web sebelum keputusan untuk menyukai atau mengadopsi mysfit saya dapat membantu Anda merancang pengalaman pengguna yang lebih baik di masa mendatang yang mengarah kepada mysfits semakin diadopsi lebih cepat. Untuk membantu kami mengumpulkan wawasan ini, kami akan menerapkan kemampuan ujung depan situs web untuk mengirimkan permintaan kecil, setiap kali profil mysfit diklik oleh pengguna, ke API layanan mikro baru yang akan kami buat. Catatan-catatan itu akan diproses secara real-time oleh fungsi kode tanpa server, dikumpulkan, dan disimpan untuk analisis di masa mendatang yang mungkin ingin Anda lakukan.

Prinsip-prinsip desain aplikasi modern lebih memilih layanan yang terfokus, dipisahkan, dan modular. Jadi daripada menambahkan metode dan kemampuan tambahan dalam layanan Mysfits yang sudah Anda kerjakan sejauh ini, kami akan membuat layanan baru dan dipisahkan untuk tujuan menerima peristiwa klik pengguna dari situs web Mysfits. Tumpukan lengkap ini telah direpresentasikan menggunakan templat CloudFormation yang disediakan.

Diagram Arsitektur

menangkap perilaku pengguna

Mengapa AWS Lambda Untuk Implementasi Ini?

Lambda sangat bagus bagi aplikasi yang mengutamakan data yang perlu merespons secara real-time terhadap perubahan data, perubahan status sistem, atau tindakan oleh pengguna. Aplikasi ini biasanya terhubung ke penyimpanan data untuk mengakses dan menganalisis data untuk pemrosesan batch, analisis aliran, dan inferensi machine learning. Lambda sangat cocok untuk aplikasi ini karena terintegrasi dengan penyimpanan data seperti Kinesis Data Streaming dan Data Firehose, S3, Kejadian CloudWatch, CloudWatch Logs, dan DynamoDB, dengan total 17 sumber kejadian hari ini.   

Sumber Daya Tanpa Server yang Digunakan di Modul Ini

Stream pengiriman AWS Kinesis Firehose: Kinesis Firehose adalah layanan streaming real-time yang sangat tersedia dan dikelola yang menerima catatan data dan secara otomatis memasukkannya ke beberapa tujuan penyimpanan yang mungkin dalam AWS, seperti bucket Amazon S3, atau klaster gudang data Amazon Redshift. Kinesis Firehose juga memungkinkan semua catatan yang diterima oleh aliran untuk secara otomatis dikirim ke fungsi tanpa server yang dibuat dengan AWS Lambda. Ini berarti bahwa kode yang Anda tulis dapat melakukan pemrosesan atau transformasi tambahan dari catatan sebelum dikumpulkan dan disimpan dalam tujuan yang dikonfigurasi.

Bucket Amazon S3: Bucket baru akan dibuat di S3 tempat semua rekaman kejadian klik yang diproses digabungkan ke dalam file-file dan disimpan sebagai objek.

Fungsi AWS Lambda: AWS Lambda memungkinkan pengembang untuk menulis fungsi kode yang hanya berisi apa yang dibutuhkan oleh logika mereka dan membuat kode mereka digunakan, dipanggil, dibuat sangat andal, dan diskalakan tanpa harus mengelola infrastruktur apa pun. Di sini, fungsi kode Tanpa Server ditentukan menggunakan AWS SAM. Ini akan digunakan untuk AWS Lambda, ditulis dengan Python, dan kemudian memproses dan memperkaya rekaman klik yang diterima oleh aliran pengiriman. Kode yang kami tulis sangat sederhana dan pengayaannya bisa dilakukan di situs web ujung depan tanpa proses selanjutnya sama sekali. Fungsi ini mengambil atribut tambahan tentang klik pada Mysfit untuk membuat rekaman klik lebih bermakna (data yang sudah diambil oleh ujung depan situs web). Tetapi, untuk tujuan lokakarya ini, kode ini dimaksudkan untuk menunjukkan kemungkinan arsitektural termasuk fungsi kode tanpa server untuk melakukan pemrosesan atau transformasi tambahan yang diperlukan, secara real-time, sebelum rekaman disimpan. Setelah fungsi Lambda dibuat dan aliran pengiriman Kinesis Firehose dikonfigurasikan sebagai sumber acara untuk fungsi tersebut, aliran pengiriman akan secara otomatis mengirimkan catatan klik sebagai peristiwa ke fungsi kode yang telah kami buat, menerima respons yang dikembalikan oleh kode kami, dan mengirimkan catatan yang diperbarui ke bucket Amazon S3 yang dikonfigurasi.

Amazon API Gateway REST API: AWS Kinesis Firehose menyediakan layanan API seperti layanan AWS lainnya, dan dalam hal ini kami menggunakan operasi PutRecord untuk menempatkan catatan peristiwa klik pengguna ke dalam aliran pengiriman. Namun, kami tidak ingin antarmuka situs web kami harus berintegrasi langsung dengan API PutRecord Firehose Kinesis. Melakukan hal itu akan mengharuskan kami untuk mengelola kredensial AWS dalam kode ujung depan kami untuk mengesahkan permintaan API tersebut ke API PutRecord, dan itu akan mengekspos kepada pengguna API AWS langsung yang sedang diandalkan (yang dapat mendorong pengunjung situs berbahaya untuk mencoba menambahkan catatan ke aliran pengiriman yang salah bentuk, atau berbahaya bagi tujuan kami memahami perilaku pengguna nyata). Jadi sebagai gantinya, kita akan menggunakan Amazon API Gateway untuk membuat Proksi Layanan AWS ke PutRecord API Kinesis Firehose. Hal ini memungkinkan kita untuk membuat titik akhir RESTful publik kita sendiri yang tidak memerlukan manajemen kredensial AWS di ujung depan untuk permintaan. Selain itu, kita juga akan menggunakan templat pemetaan permintaan di API Gateway, yang akan memungkinkan kami menentukan struktur beban permintaan kita sendiri yang akan membatasi permintaan ke struktur yang kami harapkan dan kemudian mengubah permintaan yang terbentuk dengan baik ke dalam struktur yang Kinesis Firehose PutRecord API membutuhkan.

Peran IAM: Kinesis Firehose membutuhkan peran layanan yang memungkinkannya mengirimkan rekaman yang diterima sebagai kejadian ke fungsi Lambda yang dibuat serta catatan yang diproses ke bucket S3 tujuan. Amazon API Gateway API juga membutuhkan peran baru yang memungkinkan API untuk memanggil API PutRecord dalam Kinesis Firehose untuk setiap permintaan API yang diterima.

Petunjuk Implementasi

  • A: Membuat Repositori Codecommit Baru

    Tumpukan baru ini yang akan Anda gunakan menggunakan CloudFormation tidak hanya berisi sumber daya lingkungan infrastruktur, tetapi kode aplikasi itu sendiri yang akan dijalankan AWS Lambda untuk memproses kejadian streaming. Untuk menggabungkan pembuatan infrastruktur dan kode kami bersama dalam satu penerapan, kami akan menggunakan alat AWS lain yang diinstal sebelumnya dalam AWS Cloud9 IDE - AWS SAM CLI. Kode untuk fungsi AWS Lambda dikirimkan ke layanan dengan mengunggah kode fungsi dalam paket .zip ke bucket Amazon S3.

    SAM CLI mengautomasi proses itu untuk kita. Dengan menggunakannya, kita dapat membuat templat CloudFormation yang merujuk secara lokal di sistem file tempat semua kode untuk fungsi Lambda kita disimpan. Kemudian, SAM CLI akan mengemasnya menjadi file .zip, mengunggahnya ke Amazon S3 bucket yang dikonfigurasi, dan membuat templat CloudFormation baru yang menunjukkan lokasi dalam S3 di mana paket .zip yang dibuat telah diunggah untuk penerapan ke AWS Lambda. Kami kemudian dapat menggunakan templat CloudFormation yang dihasilkan SAM CLI ke AWS dan menyaksikan lingkungan dibuat bersama dengan fungsi Lambda yang menggunakan paket kode yang diunggah SAM CLI.

    Pertama, buat repositori CodeCommit baru tempat kode layanan streaming akan live:

    aws codecommit create-repository --repository-name MythicalMysfitsStreamingService-Repository

    Dalam menanggapi perintah itu, salin nilai untuk "cloneUrlHttp". Seharusnya dalam bentuk: https://git-codecommit.REPLACE_ME_REGION.amazonaws.com/v1/repos/MythicalMysfitsStreamingService-Repository

    Selanjutnya, mari kita gandakan repositori yang baru dan kosong itu ke dalam IDE kita:

    cd ~/environment/
    git clone {insert the copied cloneValueUrl from above}
    B: Menyalin Basis Kode Layanan Streaming

    Sekarang, gerakkan direktori kerja ke dalam repositori baru ini:

    cd ~/environment/MythicalMysfitsStreamingService-Repository/

    Lalu, salin komponen aplikasi modul-5 ke dalam direktori repositori baru ini:

    cp -r ~/environment/aws-modern-application-workshop/module-5/app/streaming/* .

    Dan salinlah templat CloudFormation untuk modul ini juga.

    cp ~/environment/aws-modern-application-workshop/module-5/cfn/* .
  • A: Menggunakan Pip Untuk Menginstal Dependensi Fungsi Lambda

    Sekarang, kita telah memiliki set direktori repositori dengan semua artefak yang disertakan:

    Templat CFN untuk membuat tumpukan penuh.

    Skrip Phyton yang berisi kode untuk fungsi Lambda: streamProcessor.py

    Ini adalah pendekatan umum yang pelanggan AWS lakukan - untuk menyimpan templat CloudFormation sepanjang kode aplikasinya di repositori. Dengan cara ini, Anda memiliki satu tempat dengan semua perubahan terhadap aplikasi dan lingkungannya yang dapat ditelusuri bersama.

    Tetapi, jika Anda melihat kode di dalam file streamProcessor.py, Anda akan melihat bahwa itu menggunakan paket permintaan Python untuk membuat permintaan API ke layanan Mythical Mysfits yang Anda buat sebelumnya. Perpustakaan eksternal tidak secara otomatis termasuk dalam lingkungan runtime AWS Lambda, karena pelanggan AWS yang berbeda mungkin bergantung pada versi berbeda dari berbagai perpustakaan, dll.

    Anda harus mengemas semua dependensi perpustakaan Anda bersama dengan fungsi kode Lambda Anda sebelum diunggah ke layanan Lambda. Kami akan menggunakan pip pengelola paket Python untuk mencapai ini. Di terminal Cloud9, jalankan perintah berikut untuk menginstal paket permintaan dan dependensinya secara lokal di samping kode fungsi Anda:

    pip install requests -t .

    Setelah perintah ini selesai, Anda akan melihat beberapa folder paket python tambahan yang disimpan dalam direktori repositori Anda.

    B. Memperbarui Kode Fungsi Lambda

    Selanjutnya, kami memiliki satu perubahan kode untuk membuat sebelum kode fungsi Lambda kami sepenuhnya siap untuk ditempatkan. Ada baris dalam file streamProcessor.py yang perlu diganti dengan ApiEndpoint untuk API layanan Mysfits Anda - layanan yang sama ApiEndpoint yang Anda buat dalam modul-4 dan digunakan di ujung depan situs web.

    replace-api-endpoint

    Layanan itu bertanggung jawab untuk berintegrasi dengan MysfitsTable di DynamoDB, jadi meskipun kita bisa menulis fungsi Lambda yang secara langsung terintegrasi dengan tabel DynamoDB juga, melakukan hal itu akan mengganggu tujuan dari layanan mikro pertama dan meninggalkan kita dengan beberapa basis kode atau terpisah yang terintegrasi dengan tabel yang sama. Sebagai gantinya, kami akan berintegrasi dengan tabel itu melalui layanan yang ada dan memiliki arsitektur aplikasi yang jauh lebih terpisah dan modular.

    C: Mendorong Kode Anda Ke Dalam CodeCommit

    Lakukan perubahan kode kita ke repositori baru sehingga perubahan tersebut disimpan dalam CodeCommit:

    git add .
    git commit -m "New stream processing service."
    git push
  • A: Membuat Bucket S3 Untuk Paket Kode Fungsi Lambda

    Dengan baris yang diubah pada file Python, dan kode yang kita lakukan, kita siap menggunakan AWS SAM CLI untuk mengemas semua kode fungsi kami, mengunggahnya ke S3, dan membuat templat CloudFormation yang dapat digunakan untuk membuat tumpukan streaming.

    Pertama-tama, gunakan AWS CLI untuk membuat bucket S3 tempat paket kode fungsi Lambda akan diunggah. Nama bucket S3 harus unik secara global di antara semua pelanggan AWS, jadi ganti ujung nama bucket ini dengan string yang unik untuk Anda:

    B. Menggunakan SAM CLI Untuk Mengemas Kode Anda Untuk Lambda

    Dengan bucket kita telah dibuat, kita siap menggunakan SAM CLI untuk mengemas dan mengunggah kode kami dan mengubah templat CloudFormation, pastikan untuk mengganti parameter perintah terakhir dengan nama bucket yang baru saja Anda buat di atas (perintah ini juga mengasumsikan terminal Anda masih dalam direktori kerja repositori):

    sam package --template-file ./real-time-streaming.yml --output-template-file ./transformed-streaming.yml --s3-bucket replace-with-your-bucket-name

    Jika berhasil, Anda akan melihat file transformed-streaming.yml yang baru dibuat ada di dalam direktori ./MythicalMysfitsStreamingService-Repository/, jika Anda melihat isinya, Anda akan melihat bahwa parameter CodeUri dari fungsi Lambda tanpa server telah diperbarui dengan lokasi objek tempat SAM CLI mengunggah kode paket Anda.

    C: Menerapkan Tumpukan Menggunakan AWS CloudFormation

    Juga dikembalikan oleh perintah SAM CLI adalah perintah CloudFormation perlu dijalankan untuk membuat tumpukan penuh baru kami. Tetapi karena tumpukan kami menciptakan sumber daya IAM, Anda harus menambahkan satu parameter tambahan ke perintah. Jalankan perintah berikut untuk menggunakan tumpukan streaming:

    aws cloudformation deploy --template-file /home/ec2-user/environment/MythicalMysfitsStreamingService-Repository/cfn/transformed-streaming.yml --stack-name MythicalMysfitsStreamingStack --capabilities CAPABILITY_IAM

    Setelah pembuatan tumpukan ini selesai, layanan mikro pemrosesan real-time penuh akan dibuat.

    Dalam skenario mendatang di mana hanya perubahan kode yang telah dibuat untuk fungsi Lambda Anda, dan sisa tumpukan CloudFormation Anda tetap tidak berubah, Anda dapat mengulangi perintah AWS SAM CLI dan CloudFormation yang sama seperti di atas. Ini akan mengakibatkan lingkungan infrastruktur tetap tidak berubah, tetapi penerapan kode terjadi pada fungsi Lambda Anda.

  • A: Memperbarui Konten Situs Web

    Dengan streaming yang menumpuk dan berjalan, kita sekarang perlu menerbitkan versi baru dari antarmuka Mythical Mysfits kami yang mencakup JavaScript yang mengirimkan acara ke layanan kami setiap kali profil mysfit diklik oleh pengguna.

    File index.html baru disertakan di ~/environment/aws-modern-application-workshop/module-5/web/index.html.

    File ini berisi placeholder yang sama dengan module-4 yang perlu diperbarui, serta placeholder tambahan untuk titik akhir layanan pemrosesan aliran baru yang baru saja Anda buat. Untuk nilai variabel sebelumnya, Anda dapat merujuk ke file index.html sebelumnya yang Anda perbarui sebagai bagian dari modul-4.

    Menjalankan perintah berikut untuk tumpukan streaming baru untuk mengambil titik akhir API Gateway baru untuk layanan pemrosesan aliran Anda:

    aws cloudformation describe-stacks --stack-name MythicalMysfitsStreamingStack
    B: Mendorong Versi Situs Baru ke S3

    Mengganti nilai akhir di dalam index.html untuk streamingApiEndpoint dan Anda siap untuk mempublikasikan pembaruan halaman beranda Mythical Mysfits akhir Anda:

    aws s3 cp ~/environment/aws-modern-application-workshop/module-5/web/index.html s3://YOUR-S3-BUCKET/

    Menyegarkan situs web Mythical Mysfits Anda di browser sekali lagi dan Anda sekarang akan memiliki situs yang merekam dan mempublikasikan setiap kali pengguna mengklik pada profil mysfits!

    Untuk melihat catatan yang telah diproses, mereka akan tiba di ember S3 tujuan yang dibuat sebagai bagian dari MythicalMysfitsStreamingStack Anda.

    Sekarang setelah Anda memiliki arsitektur aplikasi modern yang lengkap, kami mendorong Anda sekarang untuk menjelajahi AWS Console dan semua berbagai layanan yang Anda buat untuk meluncurkan Mythical Mysfits!

  • Pastikan untuk menghapus semua sumber daya yang dibuat selama lokakarya guna memastikan penagihan untuk sumber daya tidak berlanjut lebih lama dari yang Anda inginkan. Kami menyarankan Anda menggunakan Konsol AWS untuk menjelajahi sumber daya yang Anda buat dan menghapusnya saat Anda siap.

    Untuk dua kasus di mana Anda menyediakan sumber daya menggunakan AWS CloudFormation, Anda dapat menghapus sumber daya tersebut dengan hanya menjalankan perintah CLI berikut untuk setiap tumpukan:

    aws cloudformation delete-stack --stack-name STACK-NAME-HERE

    Untuk menghapus semua sumber daya yang dibuat, Anda dapat mengunjungi AWS Consoles berikut, yang berisi sumber daya yang Anda buat selama lokakarya Mythical Mysfits:

Penutup

Pengalaman ini dimaksudkan untuk memberi Anda rasa bagaimana rasanya menjadi pengembang yang merancang dan membangun arsitektur aplikasi modern di atas AWS. Pengembang pada AWS dapat memprogram sumber daya secara terprogram menggunakan AWS CLI, menggunakan kembali definisi infrastruktur melalui AWS CloudFormation, secara otomatis membangun dan menggunakan perubahan kode menggunakan rangkaian alat pengembang layanan AWS dari layanan Code, dan mengambil keuntungan dari berbagai kemampuan komputasi dan layanan aplikasi yang berbeda. tidak mengharuskan Anda untuk menyediakan atau mengelola server sama sekali!

Sebagai langkah besar berikutnya, untuk mempelajari lebih lanjut tentang cara kerja dalam situs web Mythical Mysfits yang telah Anda buat, selami ke dalam templat CloudFormation yang disediakan dan sumber daya yang dinyatakan di dalamnya.

Kami harap Anda menikmati Lokakarya Aplikasi Modern AWS! Tutorial ini juga dihosting di GitHub sehingga Anda dapat mengirimkan masalah jika Anda memiliki rekomendasi. Anda juga dapat menginisialisasi permintaan menarik GitHub jika Anda ingin berkolaborasi dalam meningkatkan kode.

Jika Anda ingin mempelajari lebih lanjut tentang developing on AWS, kunjungi AWS Developer Center kami.

Selamat!

Anda membangun aplikasi web modern pada AWS.
Bagikan bersama teman Anda atau mengirimkan kami masukan.

Twilight Glitter terkesan dengan pekerjaan Anda