AWS Lambda - Funkcja w NODEJS
Nodejs to jeden z języków obsługiwanych przez funkcję AWS Lambda. Wersje obsługiwane przez nodejs to 6.10 i 8.10. W tym rozdziale szczegółowo poznamy różne funkcjonalności AWS Lambda w NODEJS.
Handler w NodeJS
Aby napisać funkcję AWS Lambda w nodejs, powinniśmy najpierw zadeklarować handler. Program obsługi w nodejs to nazwa pliku i nazwa funkcji eksportu. Na przykład nazwa pliku toindex.js a nazwa funkcji eksportu to lambda handler, więc jego odpowiedni program obsługi to index.lambdahandler
Obserwuj przykładową obsługę pokazaną tutaj -
exports.lambdahandler = function(event, context, callback) { //code goes here}
Parametry dla obsługi
Handler jest głównym rdzeniem budowania funkcji Lambda. Program obsługi przyjmuje trzy parametry:event, context i callback.
Parametr zdarzenia
Zawiera wszystkie szczegóły wywołanego zdarzenia. Na przykład, jeśli używamy funkcji Lambda do wyzwolenia na S3, zdarzenie będzie miało szczegóły obiektu S3.
Parametr kontekstu
Zawiera szczegóły kontekstu, takie jak właściwości i szczegóły konfiguracji funkcji Lambda.
Funkcja oddzwaniania
Pomaga w przekazywaniu szczegółów rozmówcy. Struktura wywołania zwrotnego wygląda następująco -
callback(error, result);
Parametry funkcji zwrotnej wyjaśniono poniżej -
Error −Będzie to zawierało szczegółowe informacje, jeśli podczas wykonywania funkcji Lambda wystąpił błąd. Jeśli funkcja Lambda się powiedzie,null może być przekazany jako pierwszy parametr funkcji zwrotnej.
Result −To da szczegóły pomyślnego wykonania funkcji lambda. Jeśli wystąpi błąd, parametr wyniku jest ignorowany.
Note −Korzystanie z funkcji zwrotnej w AWS Lambda nie jest obowiązkowe. W przypadku braku funkcji wywołania zwrotnego program obsługi zwróci ją jako null.
Prawidłowe podpisy zwrotne podano poniżej -
callback(); // It will return success, but no indication to the caller
callback(null); // It will return success, but no indication to the caller
callback(null, "success"); // It will return the success indication to the caller
callback(error); // It will return the error indication to the caller
Za każdym razem, gdy AWS Lambda zostanie wykonana, szczegóły wywołania zwrotnego, takie jak błąd lub sukces, są rejestrowane w AWS CloudWatch wraz z komunikatami konsoli, jeśli takie istnieją.
Praca z AWS Lambda w Nodejs 8.10
Zrozummy, jak pracować z AWS Lambda w nodejs8.10 i wywołaj funkcję w sposób synchroniczny i asynchroniczny.
Wywołanie funkcji Lambda w sposób synchroniczny
Poniższy przykład daje wyobrażenie o wywoływaniu funkcji Lambda w sposób zsynchronizowany -
exports.handler = function(event, context, callback) {
let arrItems = [4,5,6,8,9,10,35,70,80,31];
function countevennumbers (items) {
return new Promise(resolve => {
setTimeout(() => {
let a = 0;
for (var i in items) {
if (items[i] % 2 == 0) {
a++;
}
}
resolve(a);
},2000);
});
}
let evennumber = countevennumbers(arrItems);
callback(null,'even numbers equals ='+evennumber);
};
Po przetestowaniu tego kodu w konsoli AWS można zaobserwować następujące dane wyjściowe -
Zauważ, że wynik z powyższego kodu jest obiektem obietnicy. Nie podaje liczby, ponieważ liczba jest zwiększana wewnątrz setTimeout, a wywołanie funkcji nie czeka na wykonanie wewnątrz setTimeout i zwraca obiekt obietnicy.
Gdybyśmy mieli async/await na funkcji obsługi otrzyma dokładne dane wyjściowe z funkcji lambda.
Wywołanie programu obsługi w sposób asynchroniczny
Poniższy przykład przedstawia sposób wywoływania funkcji Lambda w sposób asynchroniczny -
exports.handler = async function(event, context, callback) {
let arrItems = [4,5,6,8,9,10,35,70,80,31];
function countevennumbers (items) {
return new Promise(resolve => {
setTimeout(() => {
let a = 0;
for (var i in items) {
if (items[i] % 2 == 0) {
a++;
}
}
resolve(a);
}, 2000);
});
}
let evennumber = await countevennumbers(arrItems);
callback(null,'even numbers equals ='+evennumber);
};
Dodaliśmy async i awaitw powyższym kodzie. Kiedy używamyawaitpoza wywołaniem funkcji, wykonanie zatrzymuje się, aż obietnica wewnątrz funkcji zostanie rozwiązana. Zwróć na to uwagęawait obowiązuje tylko dla async Funkcje.
Po przetestowaniu tego kodu w konsoli AWS można zaobserwować następujące dane wyjściowe -
ContextDetails w NodeJS
Obiekt kontekstowy podaje szczegóły, takie jak nazwa funkcji Lambda, pozostały czas w milisekundach, identyfikator żądania, nazwa grupy Cloudwatch, szczegóły limitu czasu itp.
W poniższych tabelach przedstawiono listę metod i atrybutów dostępnych z obiektem kontekstu -
Metoda dostępna dla obiektu kontekstu
Sr.No | Nazwa i opis metody |
---|---|
1 | getRemainingTimeInMillis() Ta metoda podaje pozostały czas w milisekundach do zakończenia funkcji przez funkcję Lambda |
Atrybuty dostępne dla obiektu kontekstu
Sr.No | Nazwa i opis atrybutu |
---|---|
1 | functionName Daje to nazwę funkcji AWS Lambda |
2 | functionVersion To daje wersję wykonywania funkcji AWS Lambda |
3 | nvokedFunctionArn To poda szczegóły ARN. |
4 | memoryLimitInMB Pokazuje limit pamięci dodany podczas tworzenia funkcji Lambda |
5 | awsRequestId Daje to identyfikator żądania AWS. |
6 | logGroupName W ten sposób zostanie podana nazwa grupy Cloudwatch |
7 | logStreamName Spowoduje to podanie nazwy strumienia dziennika usługi Cloudwatch, w którym zapisywane są dzienniki. |
8 | identity W ten sposób uzyskasz szczegółowe informacje na temat dostawcy tożsamości amazon cognito w przypadku korzystania z zestawu SDK AWS Mobile. Podane szczegóły są następujące -
|
9 | clientContext Spowoduje to szczegółowe informacje o aplikacji klienckiej używanej z zestawem aws mobile sdk. Podane szczegóły są następujące -
|
Spójrz na poniższy przykład, aby lepiej zrozumieć obiekt kontekstu -
exports.handler = (event, context, callback) => {
// TODO implement
console.log('Remaining time =>', context.getRemainingTimeInMillis());
console.log('functionName =>', context.functionName);
console.log('AWSrequestID =>', context.awsRequestId);
console.log('logGroupName =>', context.log_group_name);
console.log('logStreamName =>', context.log_stream_name);
console.log('clientContext =>', context.clientContext);
callback(null, 'Name of aws Lambda is=>'+context.functionName);
};
Po przetestowaniu tego kodu w konsoli AWS można zaobserwować następujące dane wyjściowe -
Po przetestowaniu tego kodu w konsoli AWS możesz zobaczyć następujące dane wyjściowe dziennika -
Logowanie do NodeJS
Do logowania w NodeJS możemy użyć console.log, a szczegóły dziennika można pobrać z usługi CloudWatch na podstawie funkcji Lambda.
Zapoznaj się z następującym przykładem, aby lepiej zrozumieć -
exports.handler = (event, context, callback) => {
// TODO implement
console.log('Logging for AWS Lamnda in NodeJS');
callback(null, 'Name of aws Lambda is=>'+context.functionName);
};
Po przetestowaniu tego kodu w konsoli AWS można zaobserwować następujące dane wyjściowe -
Możesz zobaczyć następujący zrzut ekranu z CloudWatch -
Obsługa błędów w NodeJS
Pozwól nam zrozumieć, w jaki sposób odbywa się powiadamianie o błędach w NodeJS. Przestrzegaj następującego kodu -
exports.handler = function(event, context, callback) {
// This Source code only throws error.
var error = new Error("something is wrong");
callback(error);
};
W danych wyjściowych dziennika można zaobserwować:
Szczegóły błędu są podane w wywołaniu zwrotnym w następujący sposób -
{
"errorMessage": "something is wrong",
"errorType": "Error",
"stackTrace": [ "exports.handler (/var/task/index.js:2:17)" ]
}