Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Struktur acara Lambda @Edge
Topik berikut menjelaskan objek peristiwa permintaan dan respons yang CloudFront diteruskan ke fungsi Lambda @Edge saat dipicu.
Pemilihan asal dinamis
Anda dapat menggunakan pola jalur dalam perilaku cache untuk merutekan permintaan ke asal berdasarkan jalur dan nama objek yang diminta, seperti images/*.jpg. Menggunakan Lambda@Edge, Anda juga dapat merutekan permintaan ke asal berdasarkan karakteristik lain, seperti nilai-nilai dalam header permintaan.
Ada sejumlah cara agar pemilihan asal dinamis ini dapat berguna. Misalnya, Anda dapat mendistribusikan permintaan lintas asal-usul di area geografis yang berbeda untuk membantu menyeimbangkan beban global. Atau Anda dapat secara selektif merutekan permintaan ke asal-usul berbeda yang masing-masing melayani fungsi tertentu: penanganan bot, optimalisasi SEO, autentikasi, dan sebagainya. Untuk contoh kode yang mendemonstrasikan cara menggunakan fitur ini, lihat Pemilihan asal dinamis berbasis konten - contoh.
Dalam peristiwa permintaan CloudFront asal, origin objek dalam struktur peristiwa berisi informasi tentang asal yang akan diarahkan ke permintaan, berdasarkan pola jalur. Anda dapat memperbarui nilai di origin mengajukan keberatan untuk mengirimkan permintaan ke negara asal yang berbeda. Saat Anda memperbarui origin objek, Anda tidak perlu menentukan asal dalam distribusi. Anda juga dapat mengganti objek asal Amazon S3 dengan objek asal kustom, dan sebaliknya. Namun, Anda hanya dapat menentukan asal tunggal per permintaan; asal kustom atau asal Amazon S3, tetapi tidak keduanya.
Permintaan acara
Topik berikut menunjukkan struktur objek yang CloudFront diteruskan ke fungsi Lambda untuk acara permintaan penampil dan asal. Contoh-contoh ini menunjukkan GET tanpa isi. Berikut ini contoh adalah daftar semua bidang yang mungkin muncul dalam peristiwa permintaan penampil dan asal.
Contoh permintaan penampil
Contoh berikut menunjukkan objek acara permintaan penampil.
{ "Records": [ { "cf": { "config": { "distributionDomainName": "d111111abcdef8.cloudfront.net", "distributionId": "EDFDVBD6EXAMPLE", "eventType": "viewer-request", "requestId": "4TyzHTaYWb1GX1qTfsHhEqV6HUDd_BzoBZnwfnvQc_1oF26ClkoUSEQ==" }, "request": { "clientIp": "203.0.113.178", "headers": { "host": [ { "key": "Host", "value": "d111111abcdef8.cloudfront.net" } ], "user-agent": [ { "key": "User-Agent", "value": "curl/7.66.0" } ], "accept": [ { "key": "accept", "value": "*/*" } ] }, "method": "GET", "querystring": "", "uri": "/" } } } ] }
Contoh permintaan asal
Contoh berikut menunjukkan objek peristiwa permintaan asal usul.
{ "Records": [ { "cf": { "config": { "distributionDomainName": "d111111abcdef8.cloudfront.net", "distributionId": "EDFDVBD6EXAMPLE", "eventType": "origin-request", "requestId": "4TyzHTaYWb1GX1qTfsHhEqV6HUDd_BzoBZnwfnvQc_1oF26ClkoUSEQ==" }, "request": { "clientIp": "203.0.113.178", "headers": { "x-forwarded-for": [ { "key": "X-Forwarded-For", "value": "203.0.113.178" } ], "user-agent": [ { "key": "User-Agent", "value": "Amazon CloudFront" } ], "via": [ { "key": "Via", "value": "2.0 2afae0d44e2540f472c0635ab62c232b.cloudfront.net (CloudFront)" } ], "host": [ { "key": "Host", "value": "example.org" } ], "cache-control": [ { "key": "Cache-Control", "value": "no-cache" } ] }, "method": "GET", "origin": { "custom": { "customHeaders": {}, "domainName": "example.org", "keepaliveTimeout": 5, "path": "", "port": 443, "protocol": "https", "readTimeout": 30, "responseCompletionTimeout": 30, "sslProtocols": [ "TLSv1", "TLSv1.1", "TLSv1.2" ] } }, "querystring": "", "uri": "/" } } } ] }
Permintaan bidang acara
Meminta data objek peristiwa dimuat dalam dua subobjek: config (Records.cf.config) and request (Records.cf.request). Daftar berikut menjelaskan setiap bidang subobject.
Bidang di objek konfigurasi
Daftar berikut menjelaskan bidang dalam config objek (Records.cf.config).
distributionDomainName(hanya baca)-
Nama domain distribusi yang terkait dengan permintaan.
distributionID(hanya baca)-
ID distribusi yang terkait dengan permintaan.
eventType(hanya baca)-
Jenis pemicu yang terkait dengan permintaan:
viewer-requestatauorigin-request. requestId(hanya baca)-
String terenkripsi yang secara unik mengidentifikasi permintaan. viewer-to-CloudFront
requestIdNilai juga muncul di log CloudFront akses sebagaix-edge-request-id. Untuk informasi selengkapnya, lihat Pencatatan standar (log akses) dan Bidang file log.
Bidang di objek permintaan
Daftar berikut menjelaskan bidang dalam request objek (Records.cf.request).
clientIp(hanya baca)-
Alamat IP penampil yang membuat permintaan. Jika penampil menggunakan proksi HTTP atau penyeimbang beban untuk mengirim permintaan, nilainya adalah alamat IP proksi atau pengimbang beban.
- header (baca/tulis)
-
Header pada permintaan. Perhatikan hal-hal berikut:
-
Kunci dalam
headersobjek adalah versi huruf kecil nama header HTTP standar. Menggunakan tombol huruf kecil memberi Anda akses huruf kecil ke nilai header. -
Setiap objek header (misalnya,
headers["accept"]atauheaders["host"]) adalah serangkaian pasangan utama-nilai. Untuk header tertentu, larik berisi satu pasangan nilai kunci untuk setiap nilai dalam permintaan. -
keyberisi nama case-sensitive dari header seperti yang muncul dalam permintaan HTTP; misalnya,,,HostUser-Agent,X-Forwarded-ForCookie, dan sebagainya. -
valueberisi nilai header sebagaimana muncul dalam permintaan HTTP. -
Ketika fungsi Lambda Anda menambahkan atau memodifikasi header permintaan dan Anda tidak menyertakan bidang header
key, Lambda @Edge secara otomatis menyisipkan headerkeymenggunakan nama header yang Anda berikan. Terlepas dari bagaimana Anda telah memformat nama header, kunci header yang dimasukkan secara otomatis diformat dengan kapitalisasi awal untuk setiap bagian, dipisahkan oleh tanda hubung (-).Misalnya, Anda dapat menambahkan header seperti berikut, tanpa header
key:"user-agent": [ { "value": "ExampleCustomUserAgent/1.X.0" } ]Dalam contoh ini, Lambda@Edge secara otomatis memasukkan
"key": "User-Agent".
Untuk informasi tentang pembatasan penggunaan header, lihat Pembatasan pada fungsi edge.
-
method(hanya baca)-
Metode HTTP permintaan.
querystring(baca/tulis)-
String kueri, jika ada, dalam permintaan. Jika permintaan tidak menyertakan string kueri, objek acara masih menyertakan
querystringdengan nilai kosong. Untuk informasi selengkapnya tentang string kueri, lihat Konten cache berdasarkan parameter string kueri. uri(baca/tulis)-
Jalur relatif objek yang diminta. Jika fungsi Lambda Anda memodifikasi
uriperhatikan hal-hal berikut:-
urinilai harus dimulai dengan garis miring ke depan (/). -
Saat fungsi mengubah
uriyang mengubah objek yang diminta oleh penampil. -
Ketika fungsi mengubah
urinilai, itu tidak mengubah perilaku cache untuk permintaan atau asal permintaan yang dikirim.
-
body(baca/tulis)-
Isi permintaan HTTP.
bodystruktur dapat memuat kolom berikut:inputTruncated(hanya baca)-
Bendera Boolean yang menunjukkan apakah tubuh dijejali Lambda@Edge. Untuk informasi selengkapnya, lihat Pembatasan pada isi permintaan dengan opsi sertakan isi.
action(baca/tulis)-
Tindakan yang ingin Anda lakukan dengan tubuh. Opsi untuk
actionadalah sebagai berikut:-
read-only:Ini adalah pengaturan default. Saat mengembalikan respons dari fungsi Lambda, jikaactionadalah hanya baca, Lambda@Edge mengabaikan setiap perubahan padaencodingataudata. -
replace:Tentukan ini saat Anda ingin mengganti tubuh yang dikirim ke asal.
-
encoding(baca/tulis)-
Pengodean untuk tubuh. Saat Lambda@Edge mengekspos tubuh ke fungsi Lambda, pertama-tama tubuh berubah menjadi base64-encoding. Jika Anda memilih
replaceuntukactionuntuk mengganti tubuh, Anda dapat memilih untuk menggunakan pengodeanbase64(default) atautext. Jika Anda menentukanencodingsebagaibase64tetapi tubuh tidak validbase64, CloudFront mengembalikan kesalahan. data(baca/tulis)-
Isi konten permintaan.
origin(baca/tulis) (hanya peristiwa awal)-
Asal pengiriman permintaan ke.
originStruktur harus berisi tepat satu asal, yang dapat berupa asal khusus atau asal Amazon S3.Bergantung pada jenis asal yang Anda tentukan (asal kustom atau Amazon S3), Anda harus menentukan bidang berikut dalam permintaan Anda:
customHeaders(baca/tulis) (kustom dan berasal dari Amazon S3)-
(Opsional) Anda dapat menyertakan header khusus dengan permintaan dengan menentukan nama header dan pasangan nilai untuk setiap header kustom. Anda tidak dapat menambahkan header yang tidak diizinkan, dan header dengan nama yang sama tidak dapat hadir.
Records.cf.request.headersCatatan tentang header permintaan juga berlaku untuk header kustom. Untuk informasi lebih lanjut, lihat Header khusus yang tidak CloudFront dapat ditambahkan ke permintaan asal dan Pembatasan pada fungsi edge. domainName(baca/tulis) (kustom dan berasal dari Amazon S3)-
Nama domain asal. Nama domain tidak bisa kosong.
-
Untuk asal kustom – Tentukan nama domain DNS, seperti
www.example.com. Nama domain tidak dapat menyertakan titik dua (:), dan tidak bisa menjadi alamat IP. Nama domain dapat terdiri dari hingga 253 karakter. -
Untuk asal Amazon S3 – Tentukan nama domain DNS bucket Amazon S3, seperti
amzn-s3-demo-bucket.s3.eu-west-1.amazonaws.com. Nama bisa sampai 128 karakter dan harus berupa huruf kecil.
-
path(baca/tulis) (kustom dan berasal dari Amazon S3)-
Jalur direktori di tempat asal permintaan harus menemukan konten. Jalur harus dimulai dengan garis miring (/) tetapi tidak boleh diakhiri dengan satu (misalnya, seharusnya tidak diakhiri dengan
example-path/). Hanya untuk asal kustom, alur harus dienkode URL dan memiliki panjang maksimum 255 karakter. keepaliveTimeout(baca/tulis) (hanya asal sesuai undang-undang)-
Berapa lama, dalam hitungan detik, yang CloudFront harus mencoba mempertahankan koneksi ke asal setelah menerima paket terakhir dari respons. Nilainya harus berupa angka dari 1-120, inklusif.
port(baca/tulis) (hanya asal sesuai undang-undang)-
Port yang CloudFront harus terhubung ke asal kustom Anda. Port harus 80, 443, atau nomor dalam kisaran 1024–65535, termasuk.
protocol(baca/tulis) (hanya asal sesuai undang-undang)-
Protokol koneksi yang CloudFront harus digunakan saat menghubungkan ke asal Anda. Nilai dapat berupa
httpatauhttps. readTimeout(baca/tulis) (kustom dan berasal dari Amazon S3)-
Berapa lama, dalam hitungan detik, CloudFront harus menunggu tanggapan setelah mengirim permintaan ke asal Anda. Ini juga menentukan berapa lama CloudFront harus menunggu setelah menerima paket tanggapan sebelum menerima paket berikutnya. Nilainya harus berupa angka dari 1-120, inklusif.
Jika Anda membutuhkan kuota yang lebih tinggi, lihat Batas waktu respons per asal.
responseCompletionTimeout(baca/tulis) (kustom dan berasal dari Amazon S3)-
Waktu (dalam detik) permintaan dari CloudFront ke asal dapat tetap terbuka dan menunggu tanggapan. Jika respons lengkap tidak diterima dari asal saat ini, CloudFront akhiri koneksi.
Nilai untuk
responseCompletionTimeoutharus sama dengan atau lebih besar dari nilai untukreadTimeout. Jika Anda menetapkan nilai ini ke 0, itu akan menghapus nilai sebelumnya yang Anda tetapkan dan kembali ke default. Anda juga dapat melakukannya dengan menghapusresponseCompletionTimeoutbidang dari permintaan acara. sslProtocols(baca/tulis) (hanya asal sesuai undang-undang)-
SSL/TLS Protokol minimum yang CloudFront dapat digunakan saat membuat koneksi HTTPS dengan asal Anda. Nilai dapat berupa:
TLSv1.2,TLSv1.1,TLSv1, atauSSLv3. authMethod(baca/tulis) (hanya asal-usul Amazon S3)-
Jika Anda menggunakan identitas akses asal (OAI), setel bidang ini ke
origin-access-identity. Jika Anda tidak menggunakan OAI, atur kenone. Jika Anda mengaturauthMethoduntukorigin-access-identity, ada beberapa persyaratan:-
Anda harus menentukan
region(lihat bidang berikut). -
Anda harus menggunakan OAI yang sama ketika Anda mengubah permintaan dari satu asal Amazon S3 ke yang lain.
-
Anda tidak dapat menggunakan OAI saat mengubah permintaan dari asal kustom ke asal Amazon S3.
catatan
Bidang ini tidak mendukung kontrol akses asal (OAC).
-
region(baca/tulis) (hanya asal-usul Amazon S3)-
AWS Wilayah ember Amazon S3 Anda. Ini hanya diperlukan ketika Anda mengatur
authMethoduntukorigin-access-identity.
Peristiwa respon
Topik berikut menunjukkan struktur objek yang CloudFront diteruskan ke fungsi Lambda untuk penampil dan peristiwa respons asal. Berikut ini contoh adalah daftar semua bidang yang mungkin muncul di penampil dan kejadian respons asal.
Contoh respon asal
Contoh berikut menunjukkan objek peristiwa respons asal usul.
{ "Records": [ { "cf": { "config": { "distributionDomainName": "d111111abcdef8.cloudfront.net", "distributionId": "EDFDVBD6EXAMPLE", "eventType": "origin-response", "requestId": "4TyzHTaYWb1GX1qTfsHhEqV6HUDd_BzoBZnwfnvQc_1oF26ClkoUSEQ==" }, "request": { "clientIp": "203.0.113.178", "headers": { "x-forwarded-for": [ { "key": "X-Forwarded-For", "value": "203.0.113.178" } ], "user-agent": [ { "key": "User-Agent", "value": "Amazon CloudFront" } ], "via": [ { "key": "Via", "value": "2.0 8f22423015641505b8c857a37450d6c0.cloudfront.net (CloudFront)" } ], "host": [ { "key": "Host", "value": "example.org" } ], "cache-control": [ { "key": "Cache-Control", "value": "no-cache" } ] }, "method": "GET", "origin": { "custom": { "customHeaders": {}, "domainName": "example.org", "keepaliveTimeout": 5, "path": "", "port": 443, "protocol": "https", "readTimeout": 30, "responseCompletionTimeout": 30, "sslProtocols": [ "TLSv1", "TLSv1.1", "TLSv1.2" ] } }, "querystring": "", "uri": "/" }, "response": { "headers": { "access-control-allow-credentials": [ { "key": "Access-Control-Allow-Credentials", "value": "true" } ], "access-control-allow-origin": [ { "key": "Access-Control-Allow-Origin", "value": "*" } ], "date": [ { "key": "Date", "value": "Mon, 13 Jan 2020 20:12:38 GMT" } ], "referrer-policy": [ { "key": "Referrer-Policy", "value": "no-referrer-when-downgrade" } ], "server": [ { "key": "Server", "value": "ExampleCustomOriginServer" } ], "x-content-type-options": [ { "key": "X-Content-Type-Options", "value": "nosniff" } ], "x-frame-options": [ { "key": "X-Frame-Options", "value": "DENY" } ], "x-xss-protection": [ { "key": "X-XSS-Protection", "value": "1; mode=block" } ], "content-type": [ { "key": "Content-Type", "value": "text/html; charset=utf-8" } ], "content-length": [ { "key": "Content-Length", "value": "9593" } ] }, "status": "200", "statusDescription": "OK" } } } ] }
Contoh respons penampil
Contoh berikut menunjukkan objek acara respons penampil.
{ "Records": [ { "cf": { "config": { "distributionDomainName": "d111111abcdef8.cloudfront.net", "distributionId": "EDFDVBD6EXAMPLE", "eventType": "viewer-response", "requestId": "4TyzHTaYWb1GX1qTfsHhEqV6HUDd_BzoBZnwfnvQc_1oF26ClkoUSEQ==" }, "request": { "clientIp": "203.0.113.178", "headers": { "host": [ { "key": "Host", "value": "d111111abcdef8.cloudfront.net" } ], "user-agent": [ { "key": "User-Agent", "value": "curl/7.66.0" } ], "accept": [ { "key": "accept", "value": "*/*" } ] }, "method": "GET", "querystring": "", "uri": "/" }, "response": { "headers": { "access-control-allow-credentials": [ { "key": "Access-Control-Allow-Credentials", "value": "true" } ], "access-control-allow-origin": [ { "key": "Access-Control-Allow-Origin", "value": "*" } ], "date": [ { "key": "Date", "value": "Mon, 13 Jan 2020 20:14:56 GMT" } ], "referrer-policy": [ { "key": "Referrer-Policy", "value": "no-referrer-when-downgrade" } ], "server": [ { "key": "Server", "value": "ExampleCustomOriginServer" } ], "x-content-type-options": [ { "key": "X-Content-Type-Options", "value": "nosniff" } ], "x-frame-options": [ { "key": "X-Frame-Options", "value": "DENY" } ], "x-xss-protection": [ { "key": "X-XSS-Protection", "value": "1; mode=block" } ], "age": [ { "key": "Age", "value": "2402" } ], "content-type": [ { "key": "Content-Type", "value": "text/html; charset=utf-8" } ], "content-length": [ { "key": "Content-Length", "value": "9593" } ] }, "status": "200", "statusDescription": "OK" } } } ] }
Bidang acara respons
Data objek peristiwa respons dimuat dalam tiga subobjek: config (Records.cf.config), request (Records.cf.request), dan response (Records.cf.response). Untuk informasi lebih lanjut tentang bidang di objek permintaan, lihat Bidang di objek permintaan. Daftar berikut menjelaskan bidang dalam config dan response subobjects.
Bidang di objek konfigurasi
Daftar berikut menjelaskan bidang dalam config objek (Records.cf.config).
distributionDomainName(hanya baca)-
Nama domain distribusi yang terkait dengan respons.
distributionID(hanya baca)-
ID distribusi yang terkait dengan respons.
eventType(hanya baca)-
Jenis pemicu yang terkait dengan respons:
origin-responseatauviewer-response. requestId(hanya baca)-
String terenkripsi yang secara unik mengidentifikasi viewer-to-CloudFront permintaan yang terkait dengan respons ini.
requestIdNilai juga muncul di log CloudFront akses sebagaix-edge-request-id. Untuk informasi selengkapnya, lihat Pencatatan standar (log akses) dan Bidang file log.
Bidang di objek respons
Daftar berikut menjelaskan bidang dalam response objek (Records.cf.response). Untuk informasi tentang penggunaan fungsi Lambda@Edge untuk membuat respons HTTP, lihat Hasilkan respons HTTP dalam pemicu permintaan.
headers(baca/tulis)-
Header dalam respons. Perhatikan hal-hal berikut:
-
Kunci dalam
headersobjek adalah versi huruf kecil nama header HTTP standar. Menggunakan tombol huruf kecil memberi Anda akses huruf kecil ke nilai header. -
Setiap objek header (misalnya,
headers["content-type"]atauheaders["content-length"]) adalah serangkaian pasangan utama-nilai. Untuk header tertentu, larik berisi satu pasangan nilai kunci untuk setiap nilai dalam respons. -
keyberisi nama case-sensitive dari header seperti yang muncul dalam respons HTTP; misalnya,,Content-Type,Content-LengthCookie, dan sebagainya. -
valueberisi nilai header sebagaimana muncul dalam respons HTTP. -
Ketika fungsi Lambda Anda menambahkan atau memodifikasi header respons dan Anda tidak menyertakan bidang header
key, Lambda @Edge secara otomatis menyisipkan headerkeymenggunakan nama header yang Anda berikan. Terlepas dari bagaimana Anda telah memformat nama header, kunci header yang dimasukkan secara otomatis diformat dengan kapitalisasi awal untuk setiap bagian, dipisahkan oleh tanda hubung (-).Misalnya, Anda dapat menambahkan header seperti berikut, tanpa header
key:"content-type": [ { "value": "text/html;charset=UTF-8" } ]Dalam contoh ini, Lambda@Edge secara otomatis memasukkan
"key": "Content-Type".
Untuk informasi tentang pembatasan penggunaan header, lihat Pembatasan pada fungsi edge.
-
status-
Kode status HTTP dari respons.
statusDescription-
Deskripsi status HTTP untuk respons.