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

1. Wprowadzenie

Ostatnia aktualizacja: 2021-05-11

Co to jest Cloud SQL?

Cloud SQL to w pełni zarządzana usługa bazy danych, która ułatwia konfigurowanie, utrzymywanie, zarządzanie i administrowanie relacyjnymi bazami danych w Google Cloud Platform.

Co to jest Cloud Functions?

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

Co utworzysz

W tym samouczku napiszesz funkcję w Cloud Functions w języku Python. Funkcja:

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

Czego się nauczysz

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

2. Wymagania

  • przeglądarka, np. Chrome lub Firefox;
  • Projekt Google Cloud Platform, który zawiera instancję Cloud SQL.
  • Jeśli jeszcze nie masz instancji, możesz wykonać czynności opisane w artykule krótkie wprowadzenie dotyczącym MySQL lub PostgreSQL. Wykonaj wszystkie czynności oprócz zwalniania miejsca.
  • Instancja zawiera bazę danych MySQL lub PostgreSQL z tabelą.
  • nazwę połączenia z instancją, nazwy bazy danych i tabeli, nazwę użytkownika bazy danych oraz hasło użytkownika;
  • Konto usługi z rolą Klient Cloud SQL.

3. Przygotowywanie kodu i tworzenie funkcji

Przygotowywanie kodu

Kod Cloud Functions do łączenia się z bazą danych Cloud SQL znajdziesz tutaj. Niektóre wartości zmiennych zależą od tego, czy Twoja baza danych Cloud SQL to MySQL czy PostgreSQL, a także od informacji o Twojej bazie danych.

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

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. W menu nawigacyjnym 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 aktywatora. Będzie on miał format https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAME.
  6. W sekcji Uwierzytelnianie wybierz Zezwalaj na nieuwierzytelnione wywołania, aby ustawić funkcję jako publiczną.
  7. Rozwiń Ustawienia środowiska wykonawczego, kompilacji i połączeń. W sekcji Konto usługi środowiska wykonawczego wybierz konto usługi, które ma rolę Klient Cloud SQL.
  8. Kliknij przycisk DALEJ.
  9. Wybierz Python 3.7 jako środowisko wykonawcze.
  10. W przypadku opcji kod źródłowy wybierz Edytor wbudowany.
  11. W oknach edytora kodu źródłowego usuń dotychczasową zawartość plików requirements.txtmain.py i zastąp ją zmodyfikowanymi wersjami kodu powyżej.
  12. Wpisz insert jako nazwę punktu wejścia.
  13. Kliknij Wdróż i poczekaj na utworzenie funkcji. Gdy funkcja będzie gotowa do użycia, spinner przestanie się obracać, a na następnej stronie pojawi się zielona ikona potwierdzenia.

4. Testowanie funkcji

  1. W przeglądarce otwórz interfejs konsoli Google Cloud Platform.
  2. W menu nawigacyjnym wybierz Cloud Functions.
  3. Kliknij nazwę utworzonej wcześniej funkcji.
  4. Kliknij link TESTOWANIE na środku strony.
  5. Kliknij PRZETESTUJ FUNKCJĘ.
  6. Powinien pojawić się wynik: ok. Jeśli test się nie powiedzie, zobaczysz zrzut stosu, który pomoże Ci w debugowaniu.
  7. W przeglądarce otwórz adres URL zapisany wcześniej podczas tworzenia funkcji. Jeśli nie udało Ci się zapisać adresu URL, możesz go uzyskać, klikając link TRIGGER (WYWOŁAJ).
  8. Wynik ok powinien pojawić się też w przeglądarce.

5. Czyszczenie danych

Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym samouczku, wykonaj te czynności.

Usuwanie instancji Cloud SQL

  1. W konsoli Google Cloud otwórz stronę Instancje 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ę instancji, a następnie kliknij Usuń, aby ją usunąć. 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 obok funkcji i wybierz Usuń.
  3. Aby potwierdzić usunięcie, kliknij przycisk USUŃ.

6. Gratulacje

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

W szczególności utworzono funkcję w Cloud Functions, która łączy się z instancją bazy danych Cloud SQL i zapisuje w niej dane.

7. Co dalej?

Wypróbuj te ćwiczenia…

Więcej informacji

Dokumentacja