Lambda context

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
Lambda log
Jak widać srodowisko uruchomieniowe udostępnia nam sporo danych. Nie musimy z nich korzystać, ale często mogą być przydatne.

Comments are closed.