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.