misalnya jika kita ingin menggunakan
GET /user?name=bob
atau
GET /user/bob
Bagaimana Anda akan melewatkan kedua contoh ini sebagai parameter ke fungsi Lambda?
Saya melihat sesuatu tentang pengaturan "pemetaan dari" dalam dokumentasi, tetapi saya tidak dapat menemukan pengaturan itu di konsol API Gateway.
method.request.path.parameter-name
untuk parameter jalur bernamaparameter-name
sebagaimana didefinisikan di halaman Permintaan Metode.method.request.querystring.parameter-name
untuk parameter string kueri bernamaparameter-name
sebagaimana ditentukan di halaman Permintaan Metode.
Saya tidak melihat salah satu dari opsi ini meskipun saya mendefinisikan string kueri.
amazon-web-services
aws-lambda
aws-api-gateway
MonkeyBonkey
sumber
sumber
RequestHandler
disediakan oleh implementasi ?Langkah-langkah untuk membuat ini berfungsi adalah:
Dalam Konsol API Gateway ...
Resources -> Integration Request
application/json
bidang isian tipe konten meskipun isinya default (jika Anda tidak melakukannya, itu tidak akan disimpan dan tidak akan memberi Anda pesan kesalahan)letakkan ini di pemetaan input
{ "name": "$input.params('name')" }
klik pada kotak centang di sebelah dropdown templates (Saya berasumsi inilah yang akhirnya menyelamatkannya)
sumber
Saya telah menggunakan templat pemetaan ini untuk menyediakan Parameter String Kueri, Tajuk, Metode, Jalur, dan URL ke acara Lambda. Saya menulis posting blog yang menjelaskan templat lebih detail: http://kennbrodhagen.net/2015/12/12/bagaimana-untuk-membuat-a-meminta-objek-untuk-Anda-lambda-event-from-api- pintu gerbang/
Di sini adalah Templat Pemetaan yang dapat Anda gunakan:
sumber
deploy
menyalakan api sekali lagi. Setelah saya menggunakan api dengan pemetaan baru, itu berfungsi dengan baik. Terima kasih banyak.Saat ini templat tarik-turun disertakan dalam Konsol Gateway API di AWS.
Untuk API Anda, klik pada nama sumber daya ... lalu DAPATKAN
Luaskan "Templat Pemetaan Tubuh"
Ketikkan
untuk Jenis-Konten (harus diketik secara eksplisit) dan klik tanda centang
Jendela baru akan terbuka dengan kata-kata "Hasilkan template" dan dropdown (lihat gambar).
Pilih
Kemudian klik simpan
Untuk mengakses variabel apa pun, cukup gunakan sintaks berikut (ini adalah Python) misalnya URL:
Anda bisa mendapatkan variabel sebagai berikut:
Jadi tidak perlu menyebutkan atau memetakan secara eksplisit setiap variabel yang Anda inginkan.
sumber
Untuk meneruskan parameter ke fungsi lambda Anda, Anda perlu membuat pemetaan antara permintaan API Gateway dan fungsi lambda Anda. Pemetaan dilakukan di
Integration Request
->Mapping templates
bagian sumber daya API Gateway yang dipilih.Buat pemetaan jenis
application/json
, maka di sebelah kanan Anda akan mengedit (klik pensil) templat.Template pemetaan sebenarnya adalah template Velocity di mana Anda dapat menggunakan ifs, loop, dan tentu saja mencetak variabel di atasnya. Template memiliki variabel-variabel ini yang disuntikkan di mana Anda dapat mengakses parameter querystring, header permintaan, dll. Secara individual. Dengan kode berikut, Anda dapat membuat ulang seluruh querystring:
Catatan: klik pada simbol centang untuk menyimpan templat. Anda dapat menguji perubahan Anda dengan tombol "test" di sumber Anda. Tetapi untuk menguji parameter querystring di konsol AWS, Anda perlu menentukan nama parameter di
Method Request
bagian sumber daya Anda.Catatan: lihat Panduan Pengguna Velocity untuk informasi lebih lanjut tentang bahasa templating Velocity.
Kemudian dalam templat lambda Anda, Anda bisa melakukan yang berikut untuk mendapatkan querystring diuraikan:
sumber
Actions>Deploy API
(saya membuang-buang waktu untuk melupakan ini ...). Lambda arn yang terkait akan mengambil perubahan segera setelah penempatan. Anda dapat memeriksanyaStages > #stage (like: prod) > Deployment History
.Jawaban yang diterima bekerja dengan baik untuk saya, tetapi memperluas pada jawaban gimenete, saya ingin templat generik yang dapat saya gunakan untuk melewati semua params kueri / path / header (seperti string untuk saat ini), dan saya datang dengan templat berikut. Saya mempostingnya di sini kalau-kalau ada yang merasa berguna:
sumber
Sebagai bagian dari mencoba menjawab salah satu pertanyaan saya sendiri di sini , saya menemukan trik ini.
Di templat pemetaan Gateway API, gunakan yang berikut untuk memberi Anda string kueri lengkap seperti yang dikirim oleh klien HTTP:
Keuntungannya adalah Anda tidak perlu membatasi diri pada serangkaian kunci yang dipetakan yang telah ditentukan sebelumnya dalam string kueri Anda. Sekarang Anda dapat menerima pasangan nilai kunci dalam string kueri, jika ini yang ingin Anda tangani.
Catatan: Menurut ini , hanya
$input.params(x)
terdaftar sebagai variabel yang tersedia untuk template VTL. Ada kemungkinan bahwa internal mungkin berubah danquerystring
mungkin tidak lagi tersedia.sumber
Sekarang Anda harus dapat menggunakan tipe integrasi proxy baru untuk Lambda untuk secara otomatis mendapatkan permintaan penuh dalam bentuk standar, daripada mengkonfigurasi pemetaan.
lihat: http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-set-up-lambda-proxy-integration-on- proksi-sumber daya
sumber
DAPATKAN / pengguna? Nama = bob
DAPATKAN / pengguna / bob
sumber
Banyak jawaban di sini luar biasa. Tetapi saya menginginkan sesuatu yang sedikit lebih sederhana. Saya menginginkan sesuatu yang akan bekerja dengan sampel "Hello World" secara gratis. Ini berarti saya ingin sederhana menghasilkan badan permintaan yang cocok dengan string kueri:
Saya pikir jawaban teratas menghasilkan sesuatu yang lebih berguna ketika membangun sesuatu yang nyata, tetapi untuk menjalankan dunia hello cepat menggunakan templat dari AWS ini bekerja dengan baik.
sumber
Contoh pemetaan parameter berikut melewati semua parameter, termasuk path, querystring dan header, hingga ke titik akhir integrasi via payload JSON
Akibatnya, templat pemetaan ini menampilkan semua parameter permintaan dalam muatan sebagaimana diuraikan sebagai berikut:
Disalin dari Panduan Pengembang Amazon API Gateway
sumber
String kueri lurus ke depan untuk mem-parsing dalam javascript di lambda
untuk GET / pengguna? name = bob
Ini tidak memecahkan pertanyaan GET pengguna / bob.
sumber
event.queryStringParameters.name
Sebagai jawaban Jonathan, setelah tandai Gunakan integrasi Proxy Lambda dalam Permintaan Integrasi , dalam kode sumber Anda, Anda harus menerapkan format di bawah ini untuk melewati 502 Bad Gateway error.
NodeJS 8.10:
Jangan lupa gunakan sumber daya Anda di API Gateway sebelum menjalankan kembali API Anda. Respons JSON hanya mengembalikan yang diatur dalam tubuh sudah benar. Jadi, Anda bisa mendapatkan jalur, parameter, header, nilai tubuh dari acara
sumber
Fungsi Lambda mengharapkan input JSON, oleh karena itu parsing string kueri diperlukan. Solusinya adalah mengubah string kueri ke JSON menggunakan Templat Pemetaan.
Saya menggunakannya untuk C # .NET Core, jadi input yang diharapkan haruslah JSON dengan parameter "queryStringParameters".
Ikuti 4 langkah di bawah ini untuk mencapai itu:
application/json
konten-tyap baru:Salin templat di bawah ini, yang mem-parsing string kueri ke dalam JSON, dan rekatkan ke templat pemetaan:
Di API Gateway, panggil fungsi Lambda Anda dan tambahkan string kueri berikut (misalnya):
param1=111¶m2=222¶m3=333
Template pemetaan harus membuat output JSON di bawah ini, yang merupakan input untuk fungsi Lambda Anda.
Kamu sudah selesai. Dari titik ini, logika fungsi Lambda Anda dapat menggunakan parameter string kueri.
Semoga berhasil!
sumber
Anda dapat menggunakan Lambda sebagai "Integrasi Proxy Lambda" , ref ini [ https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-lambda. html # api-gateway-proxy-integrasi-lambda-function-python] , opsi yang tersedia untuk lambda ini adalah
Untuk Nodejs Lambda 'event.headers', 'event.pathParameters', 'event.body', 'event.stageVariables', dan 'event.requestContext'
Untuk acara Python Lambda ['header'] ['parametername'] dan seterusnya
sumber
Lihat Doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-lambda.html#api-as-lambda-proxy-expose-get-method-with -path-parameter-to-call-lambda-function
Anda perlu memodifikasi Templat Pemetaan
sumber
Setelah membaca beberapa jawaban ini, saya menggunakan kombinasi beberapa di Agustus 2018 untuk mengambil params string kueri melalui lambda untuk python 3.6.
Pertama, saya pergi ke API Gateway -> API Saya -> sumber daya (di sebelah kiri) -> Permintaan Integrasi. Di bagian bawah, pilih Mapping Templates lalu untuk tipe konten yang masuk
application/json
.Selanjutnya, pilih templat Passthrough Metode Permintaan yang disediakan Amazon dan pilih simpan dan gunakan API Anda.
Kemudian, lambda
event['params']
adalah cara Anda mengakses semua parameter Anda. Untuk string kueri:event['params']['querystring']
sumber