Lambda context
Uruchomienie funkcji Lambda powoduje wywołanie handlera, czyli funkcji, która może wywołać inne funkcje lub zająć się obsługą przesłanych do niej danych.
Szkielet takiego handlera w różnych językach wygląda podobnie:
Node.js
exports.handler = (event, context, callback) => { callback(null, 'Hello from Lambda'); };
Python
def lambda_handler(event, context): return 'Hello from Lambda'
W C# (NET.Core) sprawa jest trochę bardziej skomplikowna, ale wywoływana funkcja wygląda tak
public string FunctionHandler(string event, ILambdaContext context) { return event?.ToUpper(); }
Co łączy wszystkie technologie? Event i context. Event to dane przesłane „z zewnątrz” do funckji Lambda. Context to parametr, który przekazuje handlerowi informacje na temat tzw. runtime, czyli wszystko co trzeba wiedzieć o środowisku, w którym funkcja działa. I właśnie tym zajmiemy się dziś.
Lambda Context
Cześć właściwości kontekstu dostępna jest tylko, gdy funkcja wywoływana jest za pomocą AWS mobile SDK. Należą do nich identity oraz client_context. Pozostałe dostępne są jednak zawsze.
Dostępna jest jedna metoda get_remaining_time_in_millis(), która zwraca pozostały czas, po którym AWS przerwie działanie funkcji. Pozostałe to właściwości:
function_name – nazwa funkcji
function_version – wersja funkcji
invoked_function_arn – arn funkcji
memory_limit_in_mb – ilość pamięci, jaką ma do dyskozycji funkcja
aws_request_id – id wywołania (requestu)
log_group_name – grupa logów CloudWatch
log_stream_name – strumień logów CloudWatch
Poniżej kawałek kodu, który wystarczy wkleić jako kod lambdy (Python 3)
def lambda_handler(event, context): print('Nazwa funkcji: ' + context.function_name) print('Pozostały czas: {0} ms'.format(context.get_remaining_time_in_millis())) print('Pozostały czas: {0} s'.format(context.get_remaining_time_in_millis() / 1000)) print('Wersja funkcji: ' + context.function_version) print('Limit pamięci: ' + context.memory_limit_in_mb + 'MB') print('ARN wywoływacza: ' + context.invoked_function_arn) return "Hi ;-)"
i powinnśmy dostać wynik podobny do
Jak widać srodowisko uruchomieniowe udostępnia nam sporo danych. Nie musimy z nich korzystać, ale często mogą być przydatne.