Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Tutorial: Membuat titik akhir webhook menggunakan URL fungsi Lambda
Dalam tutorial ini, Anda membuat URL fungsi Lambda untuk mengimplementasikan endpoint webhook. Webhook adalah komunikasi ringan yang digerakkan oleh peristiwa yang secara otomatis mengirimkan data antar aplikasi menggunakan HTTP. Anda dapat menggunakan webhook untuk menerima pembaruan langsung tentang peristiwa yang terjadi di sistem lain, seperti ketika pelanggan baru mendaftar di situs web, pembayaran diproses, atau file diunggah.
Dengan Lambda, webhook dapat diimplementasikan menggunakan fungsi Lambda atau API Gateway. URLs Fungsi URLs adalah pilihan yang baik untuk webhook sederhana yang tidak memerlukan fitur seperti otorisasi lanjutan atau validasi permintaan.
Tip
Jika Anda tidak yakin solusi mana yang terbaik untuk kasus penggunaan khusus Anda, lihatPilih metode untuk menjalankan fungsi Lambda Anda menggunakan permintaan HTTP.
Prasyarat
Untuk menyelesaikan tutorial ini, Anda harus memiliki Python (versi 3.8 atau yang lebih baru) atau Node.js (versi 18 atau lebih baru) diinstal pada mesin lokal Anda.
Untuk menguji titik akhir menggunakan permintaan HTTP, tutorial menggunakan curl
Buat fungsi Lambda
Pertama buat fungsi Lambda yang berjalan ketika permintaan HTTP dikirim ke titik akhir webhook Anda. Dalam contoh ini, aplikasi pengiriman mengirimkan pembaruan setiap kali pembayaran dikirimkan dan menunjukkan di badan permintaan HTTP apakah pembayaran berhasil. Fungsi Lambda mem-parsing permintaan dan mengambil tindakan sesuai dengan status pembayaran. Dalam contoh ini, kode hanya mencetak ID pesanan untuk pembayaran, tetapi dalam aplikasi nyata, Anda dapat menambahkan pesanan ke database atau mengirim pemberitahuan.
Fungsi ini juga mengimplementasikan metode otentikasi yang paling umum digunakan untuk webhook, otentikasi pesan berbasis hash (HMAC). Dengan metode ini, aplikasi pengirim dan penerima berbagi kunci rahasia. Aplikasi pengiriman menggunakan algoritma hashing untuk menghasilkan tanda tangan unik menggunakan kunci ini bersama dengan konten pesan, dan menyertakan tanda tangan dalam permintaan webhook sebagai header HTTP. Aplikasi penerima kemudian mengulangi langkah ini, menghasilkan tanda tangan menggunakan kunci rahasia, dan membandingkan nilai yang dihasilkan dengan tanda tangan yang dikirim di header permintaan. Jika hasilnya cocok, permintaan dianggap sah.
Buat fungsi menggunakan konsol Lambda dengan runtime Python atau Node.js.
Buat kunci rahasia
Untuk fungsi Lambda untuk mengotentikasi permintaan webhook, ia menggunakan kunci rahasia yang dibagikan dengan aplikasi panggilan. Dalam contoh ini, kunci disimpan dalam variabel lingkungan. Dalam aplikasi produksi, kami sarankan Anda menggunakannya AWS Secrets Manager sebagai opsi yang lebih aman. Untuk mempelajari selengkapnya tentang menggunakan Secrets Manager untuk menyimpan kunci rahasia, lihat Membuat AWS Secrets Manager rahasia dan Mendapatkan rahasia dari AWS Secrets Manager Panduan AWS Secrets Manager Pengguna.
Buat dan simpan kunci rahasia webhook
-
Hasilkan string acak yang panjang menggunakan generator nomor acak yang aman secara kriptografis. Anda dapat menggunakan cuplikan kode berikut dengan Python atau Node.js untuk menghasilkan dan mencetak rahasia 32 karakter, atau menggunakan metode pilihan Anda sendiri.
-
Simpan string yang Anda hasilkan sebagai variabel lingkungan untuk fungsi Anda dengan melakukan hal berikut:
-
Di tab Konfigurasi untuk fungsi Anda, pilih variabel Lingkungan.
-
Pilih Edit.
-
Pilih Tambahkan variabel lingkungan.
-
Untuk Kunci, masukkan
WEBHOOK_SECRET
, lalu untuk Nilai, masukkan rahasia yang Anda buat di langkah sebelumnya. -
Pilih Simpan.
-
Anda harus menggunakan rahasia ini lagi nanti di tutorial untuk menguji fungsi Anda, jadi catat sekarang.
Buat titik akhir URL fungsi
Buat titik akhir untuk webhook Anda menggunakan URL fungsi Lambda. Karena Anda menggunakan jenis autentikasi NONE
untuk membuat titik akhir dengan akses publik, siapa pun yang memiliki URL dapat memanggil fungsi Anda. Untuk mempelajari lebih lanjut tentang mengontrol akses ke fungsi URLs, lihatKontrol akses ke fungsi Lambda URLs. Jika Anda memerlukan opsi otentikasi lanjutan untuk webhook Anda, pertimbangkan untuk menggunakan API Gateway.
Buat titik akhir URL fungsi
-
Di tab Konfigurasi untuk fungsi Anda, pilih URL Fungsi.
-
Pilih Buat URL fungsi.
-
Untuk jenis Auth, pilih NONE.
-
Pilih Simpan.
Titik akhir untuk URL fungsi yang baru saja Anda buat ditampilkan di panel URL Fungsi. Salin titik akhir untuk digunakan nanti dalam tutorial.
Uji fungsi di konsol
Sebelum menggunakan permintaan HTTP untuk menjalankan fungsi Anda menggunakan titik akhir URL, uji di konsol untuk mengonfirmasi kode Anda berfungsi seperti yang diharapkan.
Untuk memverifikasi fungsi di konsol, pertama-tama Anda menghitung tanda tangan webhook menggunakan rahasia yang Anda buat sebelumnya dalam tutorial dengan payload JSON pengujian berikut:
{ "type": "payment.success", "orderId": "1234", "amount": "99.99" }
Gunakan salah satu contoh kode Python atau Node.js berikut untuk menghitung tanda tangan webhook menggunakan rahasia Anda sendiri.
Anda sekarang dapat menguji kode fungsi Anda menggunakan permintaan HTTP pengujian di konsol.
Uji fungsi di konsol
-
Pilih tab Kode untuk fungsi Anda.
-
Di bagian TEST EVENTS, pilih Create new test event
-
Untuk Nama Acara, masukkan
myEvent
. -
Ganti JSON yang ada dengan menyalin dan menempelkan berikut ini ke panel Event JSON. Ganti tanda tangan webhook dengan nilai yang Anda hitung pada langkah sebelumnya.
{ "headers": { "Content-Type": "application/json", "x-webhook-signature": "
2d672e7a0423fab740fbc040e801d1241f2df32d2ffd8989617a599486553e2a
" }, "body": "{\"type\": \"payment.success\", \"orderId\": \"1234\", \"amount\": \"99.99\"}" } -
Pilih Simpan.
-
Pilih Panggil.
Anda akan melihat output yang serupa dengan yang berikut:
Uji fungsi menggunakan permintaan HTTP
Gunakan alat baris perintah curl untuk menguji titik akhir webhook Anda.
Uji fungsi menggunakan permintaan HTTP
-
Dalam program terminal atau shell, jalankan perintah curl berikut. Ganti URL dengan nilai untuk titik akhir URL fungsi Anda sendiri dan ganti tanda tangan webhook dengan tanda tangan yang Anda hitung menggunakan kunci rahasia Anda sendiri.
curl -X POST
https://ryqgmbx5xjzxahif6frvzikpre0bpvpf.lambda-url.us-west-2.on.aws/
\ -H "Content-Type: application/json" \ -H "x-webhook-signature:d5f52b76ffba65ff60ea73da67bdf1fc5825d4db56b5d3ffa0b64b7cb85ef48b
" \ -d '{"type": "payment.success", "orderId": "1234", "amount": "99.99"}'Anda akan melihat output berikut:
{"received": true}
-
Periksa CloudWatch log untuk fungsi Anda untuk mengonfirmasinya mengurai muatan dengan benar dengan melakukan hal berikut:
-
Buka halaman grup Log
di CloudWatch konsol Amazon. -
Pilih grup log fungsi Anda (
/aws/lambda/myLambdaWebhook
). -
Pilih aliran log yang terbaru.
Anda akan melihat output yang mirip dengan yang berikut di log fungsi Anda:
-
-
Konfirmasikan bahwa kode Anda mendeteksi tanda tangan yang tidak valid dengan menjalankan perintah curl berikut. Ganti URL dengan titik akhir URL fungsi Anda sendiri.
curl -X POST
https://ryqgmbx5xjzxahif6frvzikpre0bpvpf.lambda-url.us-west-2.on.aws/
\ -H "Content-Type: application/json" \ -H "x-webhook-signature: abcdefg" \ -d '{"type": "payment.success", "orderId": "1234", "amount": "99.99"}'Anda akan melihat output berikut:
{"error": "Invalid signature"}
Bersihkan sumber daya Anda
Sekarang Anda dapat menghapus sumber daya yang Anda buat untuk tutorial ini, kecuali Anda ingin mempertahankannya. Dengan menghapus AWS sumber daya yang tidak lagi Anda gunakan, Anda mencegah tagihan yang tidak perlu ke Anda Akun AWS.
Untuk menghapus fungsi Lambda
-
Buka halaman Fungsi
di konsol Lambda. -
Pilih fungsi yang Anda buat.
-
Pilih Tindakan, Hapus.
-
Ketik
confirm
kolom input teks dan pilih Hapus.
Saat Anda membuat fungsi Lambda di konsol, Lambda juga membuat peran eksekusi untuk fungsi Anda.
Untuk menghapus peran eksekusi
-
Buka halaman Peran
dari konsol IAM. -
Pilih peran eksekusi yang dibuat Lambda. Peran memiliki format nama
myLambdaWebhook-role-<random string>
. -
Pilih Hapus.
-
Masukkan nama peran di bidang input teks dan pilih Hapus.