Gunakan fungsi Lambda sebagai target Application Load Balancer - Elastic Load Balancing

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

Gunakan fungsi Lambda sebagai target Application Load Balancer

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.

Load balancer memanggil fungsi Lambda secara langsung alih-alih menggunakan koneksi jaringan. Oleh karena itu, tidak ada persyaratan untuk aturan keluar dari grup keamanan Network Load Balancer.

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, lihat alias AWS Lambda fungsi di Panduan AWS Lambda 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 batas waktu default dan cara mengubahnya, lihat Mengonfigurasi batas waktu fungsi Lambda. Untuk informasi tentang nilai batas waktu maksimum yang dapat Anda konfigurasi, lihat AWS Lambda kuota.

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.

Console
Untuk membuat grup target dan mendaftarkan fungsi Lambda
  1. Buka EC2 konsol Amazon 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. Untuk Name, masukkan nama untuk grup target.

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

  7. (Opsional) Perluas Tag. Untuk setiap tag, pilih Tambahkan tag baru dan masukkan kunci tag dan nilai tag.

  8. Pilih Berikutnya.

  9. Jika Anda siap untuk mendaftarkan fungsi Lambda, pilih Pilih fungsi Lambda dan pilih fungsi Lambda dari daftar, atau pilih Masukkan fungsi Lambda ARN dan masukkan ARN fungsi Lambda,

    Jika Anda belum siap untuk mendaftarkan fungsi Lambda, pilih fungsi Register Lambda nanti dan daftarkan target nanti. Untuk informasi selengkapnya, lihat Daftarkan target.

  10. PilihBuat grup target.

AWS CLI
Untuk membuat kelompok target dari tipe lambda

Gunakan perintah create-target-group.

aws elbv2 create-target-group \ --name my-target-group \ --target-type lambda
Untuk mendaftarkan fungsi Lambda

Gunakan perintah register-target.

aws elbv2 register-targets \ --target-group-arn target-group-arn \ --targets Id=lambda-function-arn
CloudFormation
Untuk membuat grup target dan mendaftarkan fungsi Lambda

Tentukan sumber daya tipe AWS::ElasticLoadBalancingV2::TargetGroup. Jika Anda belum siap untuk mendaftarkan fungsi Lambda sekarang, Anda dapat menghilangkan Targets properti dan menambahkannya nanti.

Resources: myTargetGroup: Type: 'AWS::ElasticLoadBalancingV2::TargetGroup' Properties: Name: my-target-group TargetType: lambda Tags: - Key: 'department' Value: '123' Targets: - Id: !Ref myLambdaFunction

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, penyeimbang beban mengirimkan tubuh apa adanya dan disetel isBase64Encoded kefalse: text/*,. application/json, application/javascript, and application/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 respon 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 Balancers, lihat application-load-balancer-serverless -app di 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.

Console
Untuk mengaktifkan header multi-nilai
  1. Buka EC2 konsol Amazon 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 Atribut, pilih Edit.

  5. Aktifkan header Multi nilai.

  6. Pilih Simpan perubahan.

AWS CLI
Untuk mengaktifkan header multi-nilai

Gunakan modify-target-group-attributesperintah dengan lambda.multi_value_headers.enabled atribut.

aws elbv2 modify-target-group-attributes \ --target-group-arn target-group-arn \ --attributes "Key=lambda.multi_value_headers.enabled,Value=true"
CloudFormation
Untuk mengaktifkan header multi-nilai

Perbarui AWS::ElasticLoadBalancingV2::TargetGroupsumber daya untuk menyertakan lambda.multi_value_headers.enabled atribut.

Resources: myTargetGroup: Type: 'AWS::ElasticLoadBalancingV2::TargetGroup' Properties: Name: my-target-group TargetType: lambda Tags: - Key: 'department' Value: '123' Targets: - Id: !Ref myLambdaFunction TargetGroupAttributes: - Key: "lambda.multi_value_headers.enabled" Value: "true"

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 }
Console
Untuk mengaktifkan pemeriksaan kesehatan untuk kelompok lambda sasaran
  1. Buka EC2 konsol Amazon 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 Pemeriksaan kondisi, pilih Edit.

  5. UntukPemeriksaan KesehatanPilihAktifkan.

  6. (Opsional) Perbarui pengaturan pemeriksaan kesehatan sesuai kebutuhan.

  7. Pilih Simpan perubahan.

AWS CLI
Untuk mengaktifkan pemeriksaan kesehatan untuk kelompok lambda sasaran

Gunakan perintah modify-target-group.

aws elbv2 modify-target-group \ --target-group-arn target-group-arn \ --health-check-enabled
CloudFormation
Untuk mengaktifkan pemeriksaan kesehatan untuk kelompok lambda sasaran

Perbarui AWS::ElasticLoadBalancingV2::TargetGroupsumber daya.

Resources: myTargetGroup: Type: 'AWS::ElasticLoadBalancingV2::TargetGroup' Properties: Name: my-target-group TargetType: lambda HealthCheckEnabled: true Tags: - Key: 'department' Value: '123' Targets: - Id: !Ref myLambdaFunction

Daftarkan fungsi Lambda

Anda dapat mendaftarkan fungsi Lambda tunggal dengan masing-masing grup target. Untuk mengganti fungsi Lambda, kami sarankan Anda membuat grup target baru, mendaftarkan fungsi baru dengan grup target baru, dan memperbarui aturan listener untuk menggunakan grup target baru.

Console
Untuk mendaftarkan fungsi Lambda
  1. Buka EC2 konsol Amazon 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, jika tidak ada fungsi Lambda yang terdaftar, pilih Daftarkan target.

  5. Pilih fungsi Lambda atau masukkan ARN-nya.

  6. PilihPendaftaran.

AWS CLI
Untuk mendaftarkan fungsi Lambda

Gunakan perintah register-target.

aws elbv2 register-targets \ --target-group-arn target-group-arn \ --targets Id=lambda-function-arn
CloudFormation
Untuk mendaftarkan fungsi Lambda

Perbarui AWS::ElasticLoadBalancingV2::TargetGroupsumber daya.

Resources: myTargetGroup: Type: 'AWS::ElasticLoadBalancingV2::TargetGroup' Properties: Name: my-target-group TargetType: lambda Tags: - Key: 'department' Value: '123' Targets: - Id: !Ref myLambdaFunction

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 grup target baru, dan memperbarui aturan listener untuk menggunakan grup target baru.

Console
Untuk membatalkan pendaftaran fungsi Lambda
  1. Buka EC2 konsol Amazon 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, pilih target dan pilih Deregister.

  5. Ketika konfirmasi diminta, pilih Batalkan Pendaftaran.

AWS CLI
Untuk membatalkan pendaftaran fungsi Lambda

Gunakan perintah Target deregister.

aws elbv2 deregister-targets \ --target-group-arn target-group-arn \ --targets Id=lambda-function-arn