na przykład, jeśli chcemy użyć
GET /user?name=bob
lub
GET /user/bob
Jak przekazałbyś oba te przykłady jako parametr do funkcji Lambda?
Widziałem coś o ustawianiu „mapowanego z” w dokumentacji, ale nie mogę znaleźć tego ustawienia w konsoli API Gateway.
method.request.path.parameter-name
dla parametru ścieżki o nazwieparameter-name
zdefiniowanej na stronie Żądanie metody.method.request.querystring.parameter-name
dla parametru ciągu zapytania o nazwieparameter-name
zdefiniowanej na stronie Żądanie metody.
Nie widzę żadnej z tych opcji, mimo że zdefiniowałem ciąg zapytania.
amazon-web-services
aws-lambda
aws-api-gateway
MonkeyBonkey
źródło
źródło
RequestHandler
zapewnianej przez implementację ?Kroki, aby uruchomić to są:
W konsoli API Gateway Console ...
Resources -> Integration Request
application/json
w polu typu zawartości, nawet jeśli pokazuje wartość domyślną (jeśli tego nie zrobisz, nie zostanie zapisany i nie wyświetli się komunikat o błędzie)umieść to w mapowaniu wejściowym
{ "name": "$input.params('name')" }
kliknij pole wyboru obok menu rozwijanego szablonów (zakładam, że to ostatecznie je zapisuje)
źródło
Użyłem tego szablonu odwzorowania, aby podać parametry ciągu treści, nagłówków, metody, ścieżki i adresu URL zapytania do zdarzenia Lambda. Napisałem post na blogu wyjaśniający bardziej szczegółowo szablon: http://kennbrodhagen.net/2015/12/06/how-to-create-a-request-object-for-your-lambda-event-from-api- przejście/
Oto szablon odwzorowania, którego możesz użyć:
źródło
deploy
ponownie interfejsu API. Gdy wdrożyłem interfejs API z nowym mapowaniem, zadziałało dobrze. Wielkie dzięki.Obecnie rozwijany szablon znajduje się w konsoli API Gateway w AWS.
W przypadku interfejsu API kliknij nazwę zasobu ... a następnie GET
Rozwiń „Szablony mapowania ciała”
Wpisz
dla Content-Type (musi być wyraźnie wpisany) i kliknij znacznik
Otworzy się nowe okno ze słowami „Generuj szablon” i menu rozwijane (patrz zdjęcie).
Wybierz
Następnie kliknij Zapisz
Aby uzyskać dostęp do dowolnych zmiennych, użyj następującej składni (jest to Python), np. URL:
Zmienne można uzyskać w następujący sposób:
Dlatego nie ma potrzeby jawnego nadawania nazw ani mapowania każdej pożądanej zmiennej.
źródło
Aby przekazać parametry do funkcji lambda, musisz utworzyć mapowanie między żądaniem interfejsu API Gateway a funkcją lambda. Mapowanie odbywa się w
Integration Request
->Mapping templates
wybranego zasobu API Gateway.Utwórz odwzorowanie typu
application/json
, a następnie po prawej stronie edytujesz (kliknij ołówkiem) szablon.Szablon mapowania to tak naprawdę szablon Velocity, w którym można używać ifs, pętli i oczywiście drukować na nim zmienne. W szablonie wprowadzono te zmienne, w których można uzyskać dostęp do parametrów zapytania, nagłówków żądań itp. Indywidualnie. Za pomocą następującego kodu możesz ponownie utworzyć cały kwerenda:
Uwaga: kliknij symbol zaznaczenia, aby zapisać szablon. Możesz przetestować swoje zmiany za pomocą przycisku „test” w swoim zasobie. Ale aby przetestować parametry zapytania w konsoli AWS, musisz zdefiniować nazwy parametrów w
Method Request
sekcji swojego zasobu.Uwaga: sprawdź Podręcznik użytkownika Velocity aby uzyskać więcej informacji na temat języka szablonów Velocity.
Następnie w szablonie lambda możesz wykonać następujące czynności, aby przeanalizować kwerendę:
źródło
Actions>Deploy API
(traciłem czas, zapominając o tym ...). Skojarzona lambda arn przyjmie zmianę natychmiast po wdrożeniu. Możesz to sprawdzićStages > #stage (like: prod) > Deployment History
.Przyjęta odpowiedź działała dla mnie dobrze, ale rozwijając odpowiedź gimenete, chciałem ogólnego szablonu, którego mógłbym użyć do przekazania wszystkich parametrów zapytania / ścieżki / nagłówka (jak na razie ciągów znaków), i wymyśliłem następujący szablon. Zamieszczam go tutaj, na wypadek, gdyby ktoś uznał to za przydatne:
źródło
W ramach odpowiedzi na jedno z moich pytań tutaj , natknąłem się na ten podstęp.
W szablonie odwzorowania bramy API użyj następujących poleceń, aby podać pełny ciąg zapytania wysłany przez klienta HTTP:
Zaletą jest to, że nie musisz ograniczać się do zestawu predefiniowanych kluczy odwzorowanych w ciągu zapytania. Teraz możesz zaakceptować dowolne pary klucz-wartość w ciągu zapytania, jeśli tak chcesz sobie radzić.
Uwaga: Zgodnie z tym , tylko
$input.params(x)
wymieniona jest jako zmienna udostępniona dla szablonu VTL. Możliwe, że elementy wewnętrzne mogą ulec zmianie iquerystring
mogą nie być już dostępne.źródło
Teraz powinieneś być w stanie użyć nowego typu integracji proxy dla Lambda, aby automatycznie uzyskać pełne żądanie w standardowym kształcie, zamiast konfigurować mapowania.
patrz: http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-set-up-lambda-proxy-integration-on- zasób proxy
źródło
GET / user? Name = bob
GET / user / bob
źródło
Wiele odpowiedzi tutaj jest świetnych. Ale chciałem czegoś nieco prostszego. Chciałem czegoś, co zadziała z próbką „Hello World” za darmo. Oznacza to, że chciałem, aby prosty tworzył treść żądania pasującą do ciągu zapytania:
Myślę, że najlepsza odpowiedź daje coś bardziej przydatnego podczas budowania czegoś prawdziwego, ale dla szybkiego przywrócenia świata za pomocą szablonu z AWS działa to świetnie.
źródło
Poniższy przykład mapowania parametrów przekazuje wszystkie parametry, w tym ścieżkę, kwerendę i nagłówek, do punktu końcowego integracji za pośrednictwem ładunku JSON
W efekcie ten szablon odwzorowania wyświetla wszystkie parametry żądania w ładunku zgodnie z poniższym opisem:
Skopiowano z Amazon API Gateway Developer Guide
źródło
Ciąg zapytania jest prosty do przetworzenia w javascript w lambda
dla GET / user? name = bob
Nie rozwiązuje to jednak pytania GET user / bob.
źródło
event.queryStringParameters.name
Jako odpowiedź @ Jonathana, po znaku Użyj integracji Lambda Proxy w żądaniu integracji , w kodzie źródłowym powinieneś zaimplementować poniższy format, aby przekazać błąd 502 Bad Gateway .
NodeJS 8.10:
Nie zapomnij wdrożyć swojego zasobu w API Gateway przed ponownym uruchomieniem API. Odpowiedź JSON po prostu zwraca, który zestaw w treści jest poprawny. Możesz więc uzyskać ścieżkę, parametr, nagłówki, wartość treści ze zdarzenia
źródło
Funkcja Lambda oczekuje danych wejściowych JSON, dlatego konieczne jest parsowanie ciągu zapytania. Rozwiązaniem jest zmiana ciągu zapytania na JSON przy użyciu szablonu odwzorowania.
Użyłem go dla C # .NET Core, więc oczekiwanym wejściem powinien być JSON z parametrem „queryStringParameters”.
Aby to osiągnąć, wykonaj 4 poniższe kroki:
application/json
typ zawartości:Skopiuj poniższy szablon, który analizuje ciąg zapytania do JSON, i wklej go do szablonu odwzorowania:
W bramie API wywołaj funkcję Lambda i dodaj następujący ciąg zapytania (na przykład):
param1=111¶m2=222¶m3=333
Szablon odwzorowania powinien utworzyć wynik JSON poniżej, który jest danymi wejściowymi dla funkcji Lambda.
Jesteś skończony. Od tego momentu logika funkcji Lambda może wykorzystywać parametry ciągu zapytania.
Powodzenia!
źródło
Możesz użyć Lambda jako „Lambda Proxy Integration” , patrz [ https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-lambda. html # api-gateway-proxy -integracja-lambda-funkcja-python] , dostępne opcje to
W przypadku Nodejs Lambda „event.headers”, „event.pathParameters”, „event.body”, „event.stageVariables” i „event.requestContext”
Dla zdarzenia Python Lambda [„nagłówki”] [„nazwa parametru”] i tak dalej
źródło
Poleć dokument: https://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-lambda.html#api-as-lambda-proxy-expose-get-method-with -path-parameters-to-call-lambda-function
Musisz zmodyfikować szablon mapowania
źródło
Po przeczytaniu kilku z tych odpowiedzi użyłem kombinacji kilku w sierpniu 2018 r., Aby pobrać parametry ciągu zapytania przez lambda dla Pythona 3.6.
Najpierw poszedłem do API Gateway -> Mój API -> zasoby (po lewej) -> Żądanie integracji. Na dole u dołu wybierz Szablony odwzorowania, a następnie wpisz typ zawartości
application/json
.Następnie wybierz dostarczony przez Amazon szablon metody żądania przejścia, a następnie wybierz opcję zapisz i wdróż interfejs API.
Następnie w lambda
event['params']
uzyskasz dostęp do wszystkich swoich parametrów. Dla ciągu zapytania:event['params']['querystring']
źródło