Łączenie z Cloud SQL: Compute Engine, prywatny adres IP i Cloud SQL Proxy

1. Wprowadzenie

Ostatnia aktualizacja: 2021-05-06

Zastanów się nad połączeniem

Istnieje wiele rodzajów aplikacji i platform. W tym module dowiesz się, jak połączyć się z Cloud SQL z aplikacji uruchomionej na zarządzanej maszynie wirtualnej w Google Compute Engine za pomocą wewnętrznego prywatnego adresu IP przy użyciu serwera proxy Cloud SQL. Jest to niezwykle bezpieczny sposób uruchamiania aplikacji stanowych w chmurze. Ograniczasz narażenie na dostęp z internetu, ponieważ używasz tylko prywatnego adresu IP i serwera proxy SQL, który obsługuje połączenia SSL.

Jednym z częstych zastosowań jest na przykład przeniesienie aplikacji lokalnej do chmury.

Co utworzysz

Te warsztaty są bardzo minimalistyczne. Chodzi o to, aby wyjaśnić Ci podstawy połączenia bez zbytniego zagłębiania się w samą aplikację. W idealnym świecie łączenie się z Cloud SQL jest takie samo jak łączenie się z dowolną inną instancją bazy danych SQL, więc to, co utworzysz w tym ćwiczeniu, możesz zastosować w dowolnej aplikacji produkcyjnej.

Instrukcje będą zawierać zarówno opis czynności do wykonania w konsoli Google Cloud, jak i odpowiedniki poleceń gcloud do użycia w interfejsie wiersza poleceń lub w automatyzacji.

Poszczególne kroki to:

  • Tworzenie konta usługi o minimalnych uprawnieniach, które umożliwia połączenie z instancją Cloud SQL
  • Tworzenie maszyny wirtualnej w Google Compute Engine (GCE)
  • Utwórz instancję Cloud SQL (w tym samouczku używamy Postgres, ale podobnie działa to w przypadku MySQL lub SQL Server).
  • Pobieranie i uruchamianie serwera proxy Cloud SQL na instancji GCE

Czego potrzebujesz

  • konto GCP, na którym masz uprawnienia do włączania interfejsów API i tworzenia usług;

2. Tworzenie konta usługi

Konta usługi służą do przyznawania uprawnień do korzystania z różnych usług w projekcie GCP. Na potrzeby tego laboratorium potrzebujemy jednego, aby przyznać serwerowi proxy Cloud SQL uprawnienia do łączenia się z naszą instancją Cloud SQL.

W konsoli

Otwórz stronę kont usługi w sekcji Uprawnienia i kliknij przycisk f8393a08b37a422c.png u góry strony.

Nadaj kontu usługi unikalną nazwę i identyfikator, a następnie kliknij UTWÓRZ.

Na następnej stronie kliknij menu Wybierz rolę. Filtruj według „Cloud SQL” i wybierz rolę Klient Cloud SQL. Kliknij DALEJ.

Kliknij GOTOWE.

Korzystanie z gcloud

Utwórz konto usługi:

gcloud iam service-accounts create <SERVICE_ACCOUNT_NAME> --display-name "<SERVICE_ACCOUNT_NAME> service account"

Spowoduje to utworzenie konta usługi, ale obecnie nie ma ono przypisanych ról ani uprawnień. Aby przypisać odpowiednią rolę, uruchom to polecenie:

gcloud projects add-iam-policy-binding <GCP PROJECT ID> --member serviceAccount:<SERVICE_ACCOUNT_NAME>@<GCP PROJECT ID>.iam.gserviceaccount.com --role roles/cloudsql.client

Jeśli na przykład konto usługi ma nazwę sa-test, a projekt to my-project-test, polecenie będzie wyglądać tak:

gcloud projects add-iam-policy-binding my-project-test --member serviceAccount:sa-test@my-project-test.iam.gserviceaccount.com --role roles/cloudsql.client
gcloud iam service-accounts keys create service-account.json --iam-account <SERVICE_ACCOUNT_NAME>@<GCP PROJECT ID>.iam.gserviceaccount.com

3. Tworzenie maszyny wirtualnej Compute Engine

Google Compute Engine to usługa zarządzana, w której będzie działać maszyna wirtualna, na której znajduje się aplikacja, z którą chcemy się połączyć. W tym ćwiczeniu z programowania nie będziemy tworzyć aplikacji, ale potwierdzimy łączność, uruchamiając psql.

W konsoli

Otwórz stronę Google Compute Engine i kliknij przycisk 77c46cd1f51bed5c.png.

Masz tu wiele opcji. Musisz tylko:

  1. Nazwij instancję
  2. Zmień Machine type na f1-micro
  3. W sekcji Tożsamość i dostęp do interfejsu API zmień menu Service account z Default compute service account na to, które zostało utworzone w poprzednim kroku.
  4. Kliknij Utwórz u dołu strony.

Korzystanie z gcloud

Konto usługi to pełna nazwa utworzonego wcześniej konta usługi, więc będzie mieć format <NAME>@<PROJECT>.iam.gserviceaccount.com.

gcloud compute instances create <INSTANCE NAME> --machine-type=f1-micro --zone=us-central1-b --service-account=<SERVICE ACCOUNT FULL NAME>
gcloud compute zones list

4. Tworzenie instancji Cloud SQL

Cloud SQL to nasza oferta zarządzanych relacyjnych baz danych. Obsługuje bazy danych MySQL, PostgreSQL i SQL Server. W tym samouczku utworzymy bazę danych Postgres, ale instrukcje są podobne w przypadku wszystkich 3 usług.

W konsoli

Otwórz stronę Cloud SQL i kliknij przycisk 241836b315e11bf5.png.

Jak już wspomniałem, większość tego laboratorium jest ogólna dla każdego dialektu SQL, ale w tym laboratorium wybierz PostgreSQL.

  1. Określ identyfikator instancji
  2. Wpisz hasło domyślnego użytkownika (nazwa użytkownika będzie domyślna dla wybranej bazy danych, np.root w przypadku MySQL lub postgres w przypadku PostgreSQL).
  3. Jeśli zmienisz region instancji obliczeniowej, musisz też zmienić region tutaj, aby był zgodny.
  4. Przewiń w dół i kliknij show configuration options.
  5. Rozwiń sekcję Connectivity
  6. Odznacz opcję Public IP i zaznacz pole wyboru Private IP.
  7. Upewnij się, że w menu, które pojawi się po zaznaczeniu opcji Prywatny adres IP, wybrana jest opcja default.
  8. Przewiń w dół i kliknij Utwórz.

Uruchomienie instancji zajmuje zwykle kilka minut.

Korzystanie z gcloud

Nie mamy tu żadnych przydatnych promptów, które umożliwiałyby włączenie interfejsów API, więc musimy to zrobić ręcznie.

gcloud services enable servicenetworking.googleapis.com

Następnie musimy włączyć prywatne połączenie usługi w domyślnej sieci VPC. Pierwszym krokiem jest przydzielenie nazwanego zakresu adresów IP do użycia w naszej instancji.

gcloud compute addresses create sql-codelab-allocation --global --purpose=VPC_PEERING --prefix-length=24 --network=default

Następnie przypiszemy ten zakres adresów IP do naszych usług wewnętrznych (zajmie to około minuty).

gcloud services vpc-peerings update --service=servicenetworking.googleapis.com  --network=default     --project=<PROJECT ID> --ranges=sql-codelab-allocation --force

I wreszcie, tworzenie samej instancji jest obecnie możliwe tylko w wersji beta. Połączenie --no-assign-ip i --network=default umożliwia połączenia przy użyciu prywatnego adresu IP. Obecnie nie można włączyć jednocześnie prywatnego i publicznego adresu IP, więc jeśli potrzebujesz dostępu publicznego, musisz edytować instancję po jej utworzeniu. Potrwa to kilka minut.

gcloud beta sql instances create test-sql-codelab-00 --no-assign-ip --database-version=POSTGRES_11 --tier=db-f1-micro --region=us-central1 --network=default --root-password=<PASSWORD>

5. Konfigurowanie i uruchamianie serwera proxy Cloud SQL

Po połączeniu się z maszyną wirtualną będziemy potrzebować ciągu połączenia z instancją. Najpierw pobierzemy ten adres, a potem połączymy się z samą maszyną wirtualną za pomocą SSH. Instrukcje dotyczące tych elementów znajdziesz w odpowiednich sekcjach dotyczących Konsoli i gcloud. Pozostałe polecenia będą uruchamiane w powłoce na maszynie wirtualnej w osobnej sekcji.

W konsoli

Kliknij tutaj i kliknij nazwę instancji Cloud SQL.

Przewiń nieco w dół i skopiuj Connection name, aby użyć go później.

Otwórz stronę z listą instancji Google Compute Engine i znajdź wiersz z maszyną wirtualną.

W kolumnie Connect kliknij przycisk SSH. Otworzy się osobne okno, które bezpiecznie połączy się z maszyną wirtualną.

Przejdź do sekcji Using gcloud, aby zapoznać się z pozostałymi instrukcjami, ponieważ są one takie same w obu przypadkach.

Korzystanie z gcloud

Zastąp <INSTANCE NAME> nazwą instancji Cloud SQL:

gcloud sql instances describe <INSTANCE NAME> | grep connectionName

Zapisz nazwę połączenia instancji, aby użyć jej później.

Zastąp <ZONE> strefą, która była używana podczas tworzenia instancji. Jeśli nie została zmieniona, jej wartość to us-central1-b. Zastąp też <INSTANCE_NAME> nazwą, którą podano wcześniej.

gcloud compute ssh --zone <ZONE> <INSTANCE_NAME>

Po połączeniu z maszyną wirtualną

Najpierw musimy pobrać serwer proxy. Zależy to od systemu operacyjnego. Jeśli podczas tworzenia maszyny wirtualnej nie zmienisz systemu operacyjnego, będzie to Linux. Możesz wtedy użyć tego polecenia:

wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy && chmod +x cloud_sql_proxy

Jeśli system operacyjny został zmieniony, tutaj znajdziesz odpowiednie polecenie, aby uzyskać serwer proxy dla swojego systemu operacyjnego.

Aby uruchomić serwer proxy, użyj nazwy połączenia z instancją skopiowanej ze szczegółów instancji Cloud SQL i zastąp nią <INSTANCE_CONNECTION_NAME>. Pamiętaj też, że numer portu TCP może się zmienić, jeśli nie używasz bazy danych Postgres lub jeśli zmienisz domyślny port, na którym nasłuchuje baza danych.

./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432 &

6. Sprawdzanie połączenia i podsumowanie

Jak już wspomnieliśmy, jeśli chcesz uruchomić aplikację na instancji GCE w celu przetestowania, możesz to zrobić. W tym laboratorium zainstalujemy klienta psql i użyjemy go, aby sprawdzić, czy możemy połączyć się z bazą danych.

W sesji SSH na maszynie wirtualnej:

sudo apt-get install postgresql-client
psql "host=127.0.0.1 port=5432 sslmode=disable user=postgres"

Następnie podaj hasło domyślnego użytkownika, które zostało skonfigurowane podczas tworzenia instancji Cloud SQL.

Gratulacje! Jeśli wszystko przebiegło pomyślnie, powinien pojawić się wiersz poleceń Postgresa, w którym możesz uruchamiać polecenia dotyczące bazy danych.

Co dalej?

Sprawdź te ćwiczenia z programowania:

Dokumentacja