Lambda berfungsi sebagai target - Elastic Load Balancing

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Lambda berfungsi sebagai target

Anda dapat mendaftarkan fungsi Lambda Anda sebagai target dan mengkonfigurasi aturan pendengar untuk meneruskan permintaan ke kelompok target untuk fungsi Lambda Anda. Ketika load balancer meneruskan permintaan ke kelompok target dengan fungsi Lambda sebagai target, ia memanggil fungsi Lambda Anda dan melewati isi dari permintaan ke fungsi Lambda, dalam format JSON.

Batas
  • Fungsi Lambda dan kelompok target harus dalam akun dan di wilayah yang sama.

  • Ukuran maksimum tubuh permintaan yang dapat Anda kirim ke fungsi Lambda adalah 1 MB. Untuk batas ukuran terkait, lihatBatas header HTTP.

  • Ukuran maksimum respon JSON bahwa fungsi Lambda dapat mengirim 1 MB.

  • WebSockets tidak didukung. Permintaan upgrade ditolak dengan kode HTTP 400.

  • Local Zones tidak didukung.

  • Timbangan Target Otomatis (ATW) tidak didukung.

Untuk demo, lihatTarget Lambda pada Application Load Balancer.

Siapkan fungsi Lambda

Rekomendasi berikut berlaku jika Anda menggunakan fungsi Lambda Anda dengan Application Load Balancer.

Izin untuk mengaktifkan fungsi Lambda

Jika Anda membuat kelompok target dan mendaftarkan fungsi Lambda menggunakan AWS Management Console, konsol menambahkan izin yang diperlukan untuk kebijakan fungsi Lambda Anda atas nama Anda. Jika tidak, setelah Anda membuat grup target dan mendaftarkan fungsi menggunakan AWS CLI, Anda harus menggunakan perintah add-permission untuk memberikan izin Elastic Load Balancing untuk menjalankan fungsi Lambda Anda. Kami menyarankan Anda menggunakan tombol aws:SourceAccount dan aws:SourceArn kondisi untuk membatasi pemanggilan fungsi ke grup target yang ditentukan. Untuk informasi selengkapnya, lihat Masalah deputi yang membingungkan di Panduan Pengguna IAM,

aws lambda add-permission \ --function-name lambda-function-arn-with-alias-name \ --statement-id elb1 \ --principal elasticloadbalancing.amazonaws.com \ --action lambda:InvokeFunction \ --source-arn target-group-arn \ --source-account target-group-account-id
Versioning fungsi Lambda

Anda dapat mendaftarkan satu fungsi Lambda per kelompok target. Untuk memastikan bahwa Anda dapat mengubah fungsi Lambda Anda dan bahwa load balancer selalu memanggil versi terkini dari fungsi Lambda, membuat alias fungsi dan menyertakan alias dalam fungsi ARN ketika Anda mendaftarkan fungsi Lambda dengan load balancer. Untuk informasi selengkapnya, lihatAWS Lambda versi fungsi dan aliasdanPergeseran lalu lintas menggunakan aliasdiAWS Lambda Panduan Pengembang.

Fungsi waktu habis

Load balancer menunggu sampai fungsi Lambda Anda merespons atau kehabisan waktu. Kami merekomendasikan Anda untuk mengkonfigurasi timeout pada fungsi Lambda didasarkan pada waktu penggunaan yang dipekirakan. Untuk informasi tentang nilai timeout default dan cara mengubahnya, lihatDasar AWS Lambda Konfigurasi fungsi. Untuk informasi tentang nilai timeout maksimum yang dapat Anda konfigurasikan, lihatAWS Lambda Batasan.

Buat grup target untuk fungsi Lambda

Buat grup target, yang digunakan dalam routing permintaan. Jika konten permintaan cocok dengan aturan pendengar dengan tindakan untuk meneruskannya ke kelompok target ini, load balancer memacu fungsi Lambda yang telah terdaftar.

Untuk membuat grup target dan mendaftarkan fungsi Lambda menggunakan konsol
  1. Buka konsol Amazon EC2 di https://console.aws.amazon.com/ec2/.

  2. Pada panel navigasi, di bawah Penyeimbangan Beban, pilih Grup Target.

  3. PilihBuat grup target.

  4. UntukPilih jenis targetPilihFungsi Lambda.

  5. UntukNama kelompok target, ketik nama untuk grup target.

  6. (Opsional) Untuk mengaktifkan pemeriksaan kesehatan, pilihMengaktifkandiPemeriksaan HealthBagian.

  7. (Opsional) Tambahkan satu atau lebih tanda sebagai berikut:

    1. Perluas bagianTag.

    2. PilihTambahkan tanda.

    3. Masukkan kunci dan nilai untuk tanda tersebut.

  8. Pilih Selanjutnya.

  9. Tentukan fungsi Lambda tunggal atau hilangkan langkah ini dan kemudian tentukan fungsi Lambda.

  10. PilihBuat grup target.

Untuk membuat grup target dan mendaftarkan fungsi Lambda menggunakan AWS CLI

Gunakan perintahmembuat-target-kelompokdanRegister-target.

Menerima peristiwa dari load balancer

Load balancer mendukung permohonan Lambda untuk permintaan atas HTTP dan HTTPS. Load balancer mengirimkan peristiwa dalam format JSON. Load balancer menambahkan header berikut untuk setiap permintaan:X-Amzn-Trace-Id,X-Forwarded-For,X-Forwarded-Port, danX-Forwarded-Proto.

Jikacontent-encodingheader hadir, load balancer Base64 mengkodekan tubuh dan memasangkan isBase64Encodedketrue.

Jikacontent-encodingheader tidak hadir, encoding Base64 tergantung pada jenis konten. Untuk jenis berikut, load balancer mengirimkan tubuh seperti apa adanya dan memasangisBase64Encodedkefalse: teks/*, aplikasi/json, aplikasi/javascript, dan aplikasi/xml. Jika tidak, load balancer Base64 mengkodekan tubuh dan memasangkanisBase64Encodedketrue.

Berikut adalah contoh kasusnya.

{ "requestContext": { "elb": { "targetGroupArn": "arn:aws:elasticloadbalancing:region:123456789012:targetgroup/my-target-group/6d0ecf831eec9f09" } }, "httpMethod": "GET", "path": "/", "queryStringParameters": {parameters}, "headers": { "accept": "text/html,application/xhtml+xml", "accept-language": "en-US,en;q=0.8", "content-type": "text/plain", "cookie": "cookies", "host": "lambda-846800462-us-east-2.elb.amazonaws.com", "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6)", "x-amzn-trace-id": "Root=1-5bdb40ca-556d8b0c50dc66f0511bf520", "x-forwarded-for": "72.21.198.66", "x-forwarded-port": "443", "x-forwarded-proto": "https" }, "isBase64Encoded": false, "body": "request_body" }

Menanggapi load balancer

Respon dari fungsi Lambda Anda harus mencakup status encoding Base64, kode status, dan header. Anda bisa menghilangkan bagian tubuhnya.

Untuk memasukkan konten biner dalam tubuh respon, Anda harus mengkodekan Base64 konten dan mengaturisBase64Encodedketrue. Load balancer membaca kode konten untuk mengambil konten biner dan mengirimkannya ke klien dalam tubuh respon HTTP.

Penyeimbang beban tidak menghormati hop-by-hop header, seperti Connection atau. Transfer-Encoding Anda dapat menghilangkan headerContent-Length karena load balancer menghitung sebelum mengirim tanggapan ke klien.

Berikut ini adalah contoh respons dari fungsi Lambda berbasis nodejs.

{ "isBase64Encoded": false, "statusCode": 200, "statusDescription": "200 OK", "headers": { "Set-cookie": "cookies", "Content-Type": "application/json" }, "body": "Hello from Lambda (optional)" }

Untuk template fungsi Lambda yang bekerja dengan Application Load Balancer, lihataplikasi-load-balancer-serverless-appdi github. Atau, buka konsol Lambda, pilih Aplikasi, Buat aplikasi, dan pilih salah satu dari berikut ini dari: AWS Serverless Application Repository

  • ALB-Lambda-Target- S3 UploadFileto

  • ALB-Lambda-target- BinaryResponse

  • Target ALB-Lambda- IP WhatisMy

Header nilai ganda

Jika permintaan dari klien atau tanggapan dari fungsi Lambda mengandung header dengan beberapa nilai atau berisi header yang sama beberapa kali, atau parameter permintaan (query) dengan beberapa nilai untuk kunci yang sama, Anda dapat mengaktifkan dukungan untuk sintaks header nilai ganda. Setelah Anda mengaktifkan header nilai ganda, header dan parameter query ditukarkan antara load balancer dan fungsi Lambda menggunakan array, bukan string. Jika Anda tidak mengaktifkan sintaks header nilai ganda dan header atau parameter query memiliki nilai ganda, load balancer menggunakan nilai terakhir yang diterima.

Permintaan dengan header nilai ganda

Nama-nama bidang yang digunakan untuk header dan parameter string query berbeda tergantung apakah Anda mengaktifkan nilai ganda header untuk kelompok target.

Contoh permintaan berikut memiliki dua parameter query dengan tombol yang sama:

http://www.example.com?&myKey=val1&myKey=val2

Dengan format default, load balancer menggunakan nilai terakhir yang dikirim oleh klien dan mengirimkan sebuah peristiwa yang mencakup parameter string query menggunakanqueryStringParameters. Sebagai contoh:

"queryStringParameters": { "myKey": "val2"},

Jika Anda mengaktifkan header nilai ganda, load balancer menggunakan kedua nilai kunci yang dikirim oleh klien dan mengirimkan sebuah peristiwa yang mencakup parameter string query menggunakanmultiValueQueryStringParameters. Sebagai contoh:

"multiValueQueryStringParameters": { "myKey": ["val1", "val2"] },

Demikian pula, anggaplah bahwa klien mengirimkan permintaan dengan dua cookie di header:

"cookie": "name1=value1", "cookie": "name2=value2",

Dengan format default, load balancer menggunakan cookie terakhir yang dikirim oleh klien dan mengirimkan peristiwa yang mencakup header menggunakanheaders. Sebagai contoh:

"headers": { "cookie": "name2=value2", ... },

Jika Anda mengaktifkan header nilai ganda, load balancer menggunakan kedua cookie yang dikirim oleh klien dan mengirimkan peristiwa yang mencakup header menggunakanmultiValueHeaders. Sebagai contoh:

"multiValueHeaders": { "cookie": ["name1=value1", "name2=value2"], ... },

Jika parameter permintaan dikodekan URL, maka load balancer tidak membaca kodenya. Anda harus memecahkan kode mereka dalam fungsi Lambda Anda.

Respons dengan header nilai ganda

Nama-nama bidang yang digunakan untuk header berbeda tergantung pada apakah Anda mengaktifkan header nilai ganda untuk kelompok target. Anda harus menggunakanmultiValueHeadersjika Anda telah mengaktifkan header nilai ganda danheaderssebaliknya.

Dengan format default, Anda dapat menentukan cookie tunggal:

{ "headers": { "Set-cookie": "cookie-name=cookie-value;Domain=myweb.com;Secure;HttpOnly", "Content-Type": "application/json" }, }

Jika Anda mengaktifkan header nilai ganda, Anda harus menentukan beberapa cookie sebagai berikut:

{ "multiValueHeaders": { "Set-cookie": ["cookie-name=cookie-value;Domain=myweb.com;Secure;HttpOnly","cookie-name=cookie-value;Expires=May 8, 2019"], "Content-Type": ["application/json"] }, }

Penyeimbang beban mungkin mengirim header ke klien dalam urutan yang berbeda dari urutan yang ditentukan dalam muatan respons Lambda. Oleh karena itu, jangan mengandalkan header yang dikembalikan dalam urutan tertentu.

Aktifkan header nilai ganda

Anda dapat mengaktifkan atau menonaktifkan header nilai ganda untuk kelompok target dengan jenis targetlambda.

Untuk mengaktifkan header multi-nilai menggunakan konsol
  1. Buka konsol Amazon EC2 di https://console.aws.amazon.com/ec2/.

  2. Pada panel navigasi, di bawah Penyeimbangan Beban, pilih Grup Target.

  3. Pilih nama grup target untuk menampilkan detailnya.

  4. Pada tabDetail kelompok, di bagianatribut, pilihEdit.

  5. Pilih atau hapusHeader nilai ganda.

  6. Pilih Simpan perubahan.

Untuk mengaktifkan header multi-nilai menggunakan AWS CLI

Penggunaan perintah modifikasi-target-kelompok-atribut dengan lambda.multi_value_headers.enabledatribut.

Aktifkan pemeriksaan kesehatan

Secara default, pemeriksaan kesehatan dinonaktifkan untuk kelompok target jenislambda. Anda dapat mengaktifkan pemeriksaan kesehatan untuk menerapkan DNS failover dengan Amazon Route 53. Fungsi Lambda dapat memeriksa kesehatan layanan downstream sebelum menanggapi permintaan pemeriksaan kesehatan. Jika respons dari fungsi Lambda menunjukkan kegagalan pemeriksaan kesehatan, kegagalan tersebut diteruskan ke Route 53. Anda dapat mengonfigurasi Route 53 agar gagal ke tumpukan aplikasi cadangan.

Anda dikenakan biaya untuk pemeriksaan kesehatan begitu juga untuk setiap panggilan fungsi Lambda.

Berikut ini adalah format acara pemeriksaan kesehatan yang dikirim ke fungsi Lambda Anda. Untuk memeriksa apakah suatu peristiwa adalah event pemeriksaan kesehatan, periksa nilai bidang agen pengguna. Agen pengguna untuk pemeriksaan kesehatan adalahELB-HealthChecker/2.0.

{ "requestContext": { "elb": { "targetGroupArn": "arn:aws:elasticloadbalancing:region:123456789012:targetgroup/my-target-group/6d0ecf831eec9f09" } }, "httpMethod": "GET", "path": "/", "queryStringParameters": {}, "headers": { "user-agent": "ELB-HealthChecker/2.0" }, "body": "", "isBase64Encoded": false }
Untuk mengaktifkan pemeriksaan kesehatan untuk grup target menggunakan konsol
  1. Buka konsol Amazon EC2 di https://console.aws.amazon.com/ec2/.

  2. Pada panel navigasi, di bawah Penyeimbangan Beban, pilih Grup Target.

  3. Pilih nama grup target untuk menampilkan laman detailnya.

  4. Pada tab Detail kelompok, di bagianPengaturan pemeriksaan Health, pilihEdit.

  5. UntukPemeriksaan KesehatanPilihAktifkan.

  6. Pilih Simpan perubahan.

Untuk mengaktifkan pemeriksaan kesehatan untuk kelompok sasaran menggunakan AWS CLI

Penggunaan perintahmodifikasi-target-kelompok dengan pilihan--health-check-enabled.

Deregristrasi fungsi Lambda

Jika Anda tidak perlu lagi mengirim lalu lintas ke fungsi Lambda Anda, Anda dapat membatalkan pendaftarannya. Setelah Anda membatalkan pendaftaran fungsi Lambda, permintaan dalam penerbangan gagal dengan galat HTTP 5XX.

Untuk mengganti fungsi Lambda, kami sarankan Anda membuat grup target baru, mendaftarkan fungsi baru dengan kelompok target baru, dan memperbarui aturan pendengar untuk menggunakan kelompok target baru bukan yang sudah ada.

Untuk membatalkan pendaftaran fungsi Lambda menggunakan konsol
  1. Buka konsol Amazon EC2 di https://console.aws.amazon.com/ec2/.

  2. Pada panel navigasi, di bawah Penyeimbangan Beban, pilih Grup Target.

  3. Pilih nama grup target untuk menampilkan laman detailnya.

  4. Pada tab Target, pilihDeregister.

  5. Ketika diminta konfirmasi, pilih Akhiri.

Untuk membatalkan pendaftaran fungsi Lambda menggunakan AWS CLI

Gunakan perintah Target deregister.