Aurora Serverless Data API


Jedną z ostatnich zmian wprowadzonych przez AWS jest możliwość korzystania z relacyjnej bazy danych Aurora Serverless za pomocą tak zwanego Data API. Wykorzystanie takiego interfejsu oznacza, że w aplikacjach łączących się do bazy danych możemy zrezygnować ze sterowników MySQL, czy dodatkowych bibliotek. Na przykład programach zaimplementowanych w JAVIE możemy zrezygnować z interfejsu JDBC bazując wyłącznie na funkcjach SDK dostarczanego przez AWS. Co więcej - z bazą danych można się połączyć i wykonywać w niej polecenia przy pomocy AWS CLI. Data API jest dostępne wyłącznie dla Aurora Serverless MySQL, a więc nie użyjemy go do zwykłych instancji działających w ramach konta AWS.

Aurora Data API

Wykonanie pojedynczego polecenia przy pomocy Data API polega na wskazaniu instancji bazy danych, użytkownika bazy danych oraz podania polecenia SQL, które powinno być wykonane. Nie ma ograniczeń co do typu poleceń - wspierane jest pobieranie danych, modyfikowanie danych (DML) oraz definiowanie schematu bazy (DDL), oczywiście pod warunkiem, że użytkownik użyty do połączenia ma odpowiednie uprawnienia.

Przykładowa operacja SQL wywołana przy pomocy AWS CLI mogłoby mieć następującą postać

aws rds-data execute-statement --resource-arn "arn:aws:rds:us-east-1:123456789012:cluster:sklep" \
--secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:admin" \
--sql "SELECT imie, nazwisko FROM klienci"

Parametry polecenia execute-statement: * resource-arn - wskazuje instancję bazy danych z którą ma zostać nawiązane połączenie, * secret-arn - nazwa użytkownika i hasło zapisane w serwisie AWS Secrets Manager * sql - operacja SQL

Wynikiem polecenia jest obiekt JSON zawierający wszystkie wiersze z tabeli KLIENCI.

Transakcje

Data API umożliwia wykonywanie wielu operacji SQL w ramach transakcji. W tym celu wywołuje się polecenie begin-transaction na rozpoczęcie transakcji oraz commit-transaction albo rollback-transaction na zakończenie. begin-transaction zwraca identyfikator transakcji, który następnie wykorzystuje się do uruchomienia poleceń SQL.

TX_ID = $(aws rds-data begin-transaction --resource-arn "arn:aws:rds:us-east-1:123456789012:cluster:sklep" \
--secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:admin")

aws rds-data execute-statement --resource-arn "arn:aws:rds:us-east-1:123456789012:cluster:sklep" \
--secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:admin" \
--sql "INSERT INTO klienci(imie, nazwisko) VALUES ('Jan', 'Kowalski')" \
--transaction-id $TX_ID

aws rds-data commit-transaction --resource-arn "arn:aws:rds:us-east-1:123456789012:cluster:sklep" \
--secret-arn "arn:aws:secretsmanager:us-east-1:123456789012:secret:admin \
-- transaction-id $TX_ID"

Transakcja jest automatycznie wycofywana po upływie 24 godzin.

Więcej szczegółów na temat Data API można znaleźć w dokumentacji.

Wnioski

Wprowadzenie Data API jest ciekawą próbą unifikacji standardu dostępu do bazy danych. W teorii oczywiście zawsze korzystamy z języka SQL, ale w praktyce, w zależności od wybranej bazy danych musimy zadbać o odpowiednie sterowniki, sprawdzenie domyślnego portu, hosta i innych parameterów wymaganych do nawiązania połączenia. Wykorzystując fakt, że baza danych działa w ramach konta AWS, gdy używamy Data API możemy nawiązać połączenie przy pomocy standardowego identyfikatora zasobu ARN. Na tej podstawie Data API określi wszystkie informacje niezbędne do rozpoczęcia pracy. Konsekwencją użycia Data API jest oczywiście rezygnacja z bibliotek ORM (np. Hibernate) i innych ułatwiających wykonywanie operacji SQL.

Szkoda, że do korzystania z Data API konieczne jest zapisywanie haseł do bazy danych w Secrets Manager. To na pewno pozytywnie wpływnie na bezpieczeństwo Naszej aplikacji, ale tu prosiłaby się możliwość uwierzytelniania / autoryzacji w bazie danych wyłącznie przy pomocy użytkowników i ról AWS IAM.

Zobacz też