Łączenie się z Cloud SQL za pomocą Cloud Functions

1. Wprowadzenie

Ostatnia aktualizacja: 11.05.2021

Co to jest Cloud SQL?

Cloud SQL to w pełni zarządzana usługa bazy danych ułatwiająca konfigurację i obsługę relacyjnych baz danych w Google Cloud Platform oraz zarządzanie i administrowanie nimi.

Co to jest Cloud Functions?

Cloud Functions to wymagające niewielu zasobów rozwiązanie obliczeniowe, które umożliwia programistom tworzenie samodzielnych funkcji o jednym przeznaczeniu, które reagują na zdarzenia w chmurze bez konieczności zarządzania serwerem lub środowiskiem wykonawczym.

Co utworzysz

W ramach tego ćwiczenia w Codelabs dowiesz się, jak napisać funkcję w Cloud Functions w Pythonie. Funkcja:

  • Łączy się z instancją bazy danych Cloud SQL.
  • Wysyła instrukcję wstawiania do tabeli w bazie danych.

Czego się nauczysz

  • Jak uzyskać dostęp do interfejsu internetowego Cloud Functions za pomocą konsoli Google Cloud.
  • Jak utworzyć funkcję w Cloud Functions.
  • Jak przetestować funkcję w Cloud Functions.
  • Jak nawiązać połączenie z instancją bazy danych Cloud SQL (MySQL lub PostgreSQL) za pomocą Pythona.
  • Jak zapisać dane w bazie danych Cloud SQL za pomocą Pythona.

2. Wymagania

  • Przeglądarka, na przykład Chrome lub Firefox.
  • Projekt Google Cloud Platform zawierający instancję Cloud SQL.
  • Jeśli nie masz jeszcze takiego konta, wykonaj czynności opisane w krótkim wprowadzeniu do MySQL lub PostgreSQL. Wykonaj wszystkie kroki oprócz czyszczenia.
  • Twoja instancja zawiera bazę danych MySQL lub PostgreSQL z tabelą.
  • Nazwa połączenia instancji, nazwy bazy danych i tabel, nazwa użytkownika bazy danych oraz hasło użytkownika.
  • konto usługi z przypisaną rolą klienta Cloud SQL;

3. Przygotowanie kodu i tworzenie funkcji

Przygotowywanie kodu

Kod funkcji w Cloud Functions pozwalający nawiązać połączenie z bazą danych Cloud SQL. Niektóre wartości zmiennych zależą od tego, czy baza danych Cloud SQL to MySQL czy PostgreSQL, oraz od informacji z Twojej własnej bazy danych.

Interfejs Cloud Functions w konsoli Cloud zawiera edytor tekstu. Możesz tam skopiować, wkleić i edytować kod lub najpierw zmodyfikować go lokalnie, a potem skopiować i wkleić w interfejsie użytkownika.

requirements.txt

# This file tells Python which modules it needs to import
SQLAlchemy==1.3.12      
# If your database is MySQL, uncomment the following line:
#PyMySQL==0.9.3
# If your database is PostgreSQL, uncomment the following line:
#pg8000==1.13.2

main.py

# This file contains all the code used in the codelab. 
import sqlalchemy

# Depending on which database you are using, you'll set some variables differently. 
# In this code we are inserting only one field with one value. 
# Feel free to change the insert statement as needed for your own table's requirements.

# Uncomment and set the following variables depending on your specific instance and database:
#connection_name = ""
#table_name = ""
#table_field = ""
#table_field_value = ""
#db_name = ""
#db_user = ""
#db_password = ""

# If your database is MySQL, uncomment the following two lines:
#driver_name = 'mysql+pymysql'
#query_string = dict({"unix_socket": "/cloudsql/{}".format(connection_name)})

# If your database is PostgreSQL, uncomment the following two lines:
#driver_name = 'postgres+pg8000'
#query_string =  dict({"unix_sock": "/cloudsql/{}/.s.PGSQL.5432".format(connection_name)})

# If the type of your table_field value is a string, surround it with double quotes.

def insert(request):
    request_json = request.get_json()
    stmt = sqlalchemy.text('insert into {} ({}) values ({})'.format(table_name, table_field, table_field_value))
    
    db = sqlalchemy.create_engine(
      sqlalchemy.engine.url.URL(
        drivername=driver_name,
        username=db_user,
        password=db_password,
        database=db_name,
        query=query_string,
      ),
      pool_size=5,
      max_overflow=2,
      pool_timeout=30,
      pool_recycle=1800
    )
    try:
        with db.connect() as conn:
            conn.execute(stmt)
    except Exception as e:
        return 'Error: {}'.format(str(e))
    return 'ok'

Tworzenie funkcji

  1. W przeglądarce otwórz interfejs konsoli Google Cloud Platform.
  2. Z menu nawigacyjnego wybierz Cloud Functions.
  3. Na pasku przycisków kliknij UTWÓRZ FUNKCJĘ.
  4. Wpisz nazwę funkcji.
  5. Wybierz regułę HTTP. (Zanotuj adres URL wyświetlany pod elementem reguły. Będzie on w formacie: https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAME).
  6. W sekcji Uwierzytelnianie wybierz Zezwalaj na nieuwierzytelnione wywołania, aby funkcja była publiczna.
  7. Rozwiń Ustawienia środowiska wykonawczego, kompilacji i połączeń. W sekcji Konto usługi środowiska wykonawczego wybierz konto usługi z przypisaną rolą Klient Cloud SQL.
  8. Kliknij przycisk DALEJ.
  9. Jako opcję środowiska wykonawczego wybierz Python 3.7.
  10. Jako opcję Kod źródłowy wybierz Edytor wbudowany.
  11. W oknach edytora kodu źródłowego usuń istniejącą zawartość zarówno z pliku requirements.txt, jak i main.py, a następnie zastąp ją zmodyfikowanymi wersjami kodu powyżej.
  12. Wpisz insert jako nazwę punktu wejścia.
  13. Kliknij Wdróż i poczekaj na utworzenie funkcji. Wskaźnik przestanie się obracać, a na kolejnej stronie pojawi się zielony znacznik wyboru, gdy funkcja będzie gotowa do użycia.

4. Testowanie funkcji

  1. W przeglądarce otwórz interfejs konsoli Google Cloud Platform.
  2. Z menu nawigacyjnego wybierz Cloud Functions.
  3. Kliknij nazwę utworzonej wcześniej funkcji.
  4. Kliknij link TESTOWANIE na środku strony.
  5. Wybierz PRZETESTUJ FUNKCJĘ.
  6. Wynik powinien wyświetlić się: ok (jeśli test się nie powiedzie, zobaczysz zrzut stosu, który pomoże w debugowaniu).
  7. W przeglądarce otwórz adres URL zapisany wcześniej podczas tworzenia funkcji. Jeśli zapomnisz zapisać URL, możesz go uzyskać, klikając link AKTYWUJ.
  8. Wynik ok również powinien pojawić się w przeglądarce.

5. Czyszczenie danych

Wykonaj te czynności, aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym ćwiczeniu z programowania.

Usuwanie instancji Cloud SQL

  1. W konsoli Google Cloud otwórz stronę instancji Cloud SQL.
  2. Wybierz utworzoną instancję, aby otworzyć stronę Szczegóły instancji.
  3. Na pasku ikon u góry strony kliknij Usuń.
  4. W oknie „Usuń instancję” wpisz nazwę swojej instancji, a następnie kliknij Usuń, aby usunąć instancję. Po usunięciu instancji nie możesz ponownie użyć jej nazwy przez około 7 dni.

Usuwanie funkcji w Cloud Functions

  1. W konsoli Google Cloud otwórz stronę Cloud Functions.
  2. Kliknij 3 kropki w sekcji Działania przy odpowiedniej funkcji i wybierz Usuń.
  3. Potwierdź usunięcie, klikając przycisk USUŃ.

6. Gratulacje

Gratulujemy! Udało Ci się utworzyć funkcję w Cloud Functions, która współpracuje z Cloud SQL.

Utworzyliśmy funkcję w Cloud Functions, która łączy się z instancją bazy danych Cloud SQL i zapisuje w niej dane.

7. Co dalej?

Zapoznaj się z tymi ćwiczeniami z programowania...

Więcej informacji

Dokumentacja