1. Wprowadzenie
Ostatnia aktualizacja: 6.05.2021
Z myślą o połączeniu
Jest wiele rodzajów aplikacji i platform. W tym ćwiczeniu w Codelabs dowiesz się, jak połączyć się z Cloud SQL z aplikacji uruchomionej na zarządzanej maszynie wirtualnej w Google Compute Engine z wykorzystaniem wewnętrznego prywatnego adresu IP przy użyciu serwera proxy Cloud SQL. To niezwykle bezpieczny sposób uruchamiania aplikacji stanowych w chmurze. Aby zminimalizować ryzyko narażenia na kontakt z internetem, możesz ograniczyć się do używania prywatnego adresu IP i używać serwera proxy SQL, który obsługuje połączenia SSL za Ciebie.
Jednym z typowych zastosowań tego rozwiązania jest na przykład aplikacja lokalna, która została uruchomiona w chmurze, a nie lokalnie.
Co utworzysz
To ćwiczenie z programowania jest bardzo minimalistyczne. Chodzi o to, aby przez cały proces przebiegać przez nakrętki i śrubki mocujące, nie zastanawiając się nad samą aplikacją. W idealnym świecie łączenie się z Cloud SQL przebiega tak samo jak łączenie się z inną instancją bazy danych SQL, więc powinno być możliwe przełączenie tego, co tworzysz z tego ćwiczenia, i zastosowanie go w dowolnej aplikacji produkcyjnej.
Będą one zawierać przewodnik po czynnościach w konsoli GCP, a także odpowiedniki poleceń gcloud do używania w interfejsie wiersza poleceń lub automatyzacji.
Poszczególne kroki:
- Utwórz minimalne konto usługi, aby umożliwić połączenie z instancją Cloud SQL
- Tworzenie maszyny wirtualnej w Google Compute Engine (GCE)
- Utwórz instancję Cloud SQL (ten samouczek korzysta z Postgres, ale działa podobnie w przypadku MySQL lub SQL Server)
- Pobieranie i uruchamianie serwera proxy Cloud SQL w 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 ćwiczenia w programie jest on potrzebny, aby przyznać serwerowi proxy Cloud SQL uprawnienia do nawiązywania połączenia z naszą instancją Cloud SQL.
W konsoli
Otwórz stronę kont usługi uprawnień i kliknij przycisk u góry strony.
Nadaj kontu usługi unikalną nazwę i identyfikator, a potem kliknij UTWÓRZ.
Na następnej stronie kliknij menu Wybierz rolę. Ustaw filtr „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 przypisanych żadnych ról ani uprawnień. Aby przypisać odpowiednią rolę, uruchom 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
Na przykład: Jeśli utworzone przez Ciebie konto usługi nazywało się sa-test
, a projekt ma nazwę 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, na której zostanie uruchomiona maszyna wirtualna zawierająca aplikację, z której chcemy się połączyć. W ramach tego ćwiczenia w Codelabs nie tworzymy aplikacji, ale potwierdzimy połączenie, uruchamiając psql.
W konsoli
Wejdź na stronę Google Compute Engine i kliknij przycisk .
Dostępnych jest wiele opcji. Jedyne, co musisz zrobić, to:
- Nazwij instancję
- Zmień
Machine type
naf1-micro
- W sekcji Tożsamość i dostęp do interfejsu API zmień opcję menu
Service account
zDefault compute service account
na to, które zostało utworzone w poprzednim kroku. - Na dole strony kliknij Utwórz.
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 MySQL, PostgreSQL i SQL Server. W ramach tego ćwiczenia w programie utworzymy bazę danych Postgres, ale instrukcje są podobne we wszystkich 3 przypadkach.
W konsoli
Otwórz stronę Cloud SQL i kliknij przycisk .
Jak już wspomnieliśmy, większość tych ćwiczeń w Codelabs ma charakter ogólny i dotyczy każdego rodzaju języka SQL, ale na potrzeby tego ćwiczenia z programowania wybierz PostgreSQL.
- Nadaj instancji identyfikator
- Wpisz hasło domyślnego użytkownika (nazwa użytkownika będzie domyślna dla wybranej bazy danych, np.
root
dla MySQL lubpostgres
dla PostgreSQL) - Jeśli zmienisz region instancji Compute, musisz też odpowiednio zmienić region.
- Przewiń w dół i kliknij
show configuration options
- Rozwiń sekcję
Connectivity
- Odznacz opcję
Public IP
i zaznacz pole wyboruPrivate IP
- Upewnij się, że w menu, które wyświetla się, gdy sprawdzany jest prywatny adres IP, jest zaznaczona opcja
default
- Przewiń w dół i kliknij Utwórz
Zwykle uruchamianie instancji trwa kilka minut.
Korzystanie z gcloud
Nie mamy tutaj żadnych ładnych promptów, które umożliwiłyby włączenie interfejsów API, więc musimy zrobić to ręcznie.
gcloud services enable servicenetworking.googleapis.com
Następnie musimy włączyć prywatne połączenie usług w naszej domyślnej sieci VPC. Pierwszym krokiem w tym celu jest przydzielenie nazwanego zakresu adresów IP do wykorzystania na potrzeby naszej instancji.
gcloud compute addresses create sql-codelab-allocation --global --purpose=VPC_PEERING --prefix-length=24 --network=default
Teraz 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
Pamiętaj, że samo tworzenie instancji jest obecnie dostępne tylko w wersji beta. Połączenie parametrów --no-assign-ip
i --network=default
umożliwia połączenie z użyciem prywatnego adresu IP. Obecnie nie ma możliwości jednoczesnego włączenia prywatnego i publicznego adresu IP, więc jeśli potrzebujesz dostępu publicznego, musisz zmodyfikować instancję po 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. Skonfiguruj i uruchom Cloud SQL Proxy
Gdy połączysz się z maszyną wirtualną, potrzebny będzie ciąg znaków połączenia instancji. Najpierw je pobierzemy, a potem połączymy się z tą maszyną wirtualną przez SSH. Instrukcje dotyczące tych elementów znajdują się w odpowiednich sekcjach konsoli i gcloud, a pozostałe polecenia będą uruchamiane z powłoki maszyny wirtualnej w osobnej sekcji.
W konsoli
Przejdź tutaj i kliknij nazwę swojej instancji Cloud SQL.
Przewiń trochę w dół i skopiuj element Connection name
, aby użyć go później.
Otwórz stronę z listą instancji Google Compute Engine i znajdź wiersz ze swoją maszyną wirtualną.
W kolumnie Connect
kliknij przycisk SSH
. Otworzy się osobne okno, które bezpiecznie łą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ą swojej instancji Cloud SQL:
gcloud sql instances describe <INSTANCE NAME> | grep connectionName
Zapisz nazwę połączenia instancji do użycia później.
<ZONE>
musisz zastąpić strefą używaną wcześniej podczas tworzenia instancji. Jeśli nie przez Ciebie, była ona ustawiona na us-central1-b
. Zastąp także instancję <INSTANCE_NAME> z tym, co określiłeś wcześniej.
gcloud compute ssh --zone <ZONE> <INSTANCE_NAME>
Po podłączeniu do maszyny wirtualnej
Najpierw musimy pobrać serwer proxy. Zależnie od systemu operacyjnego. Jeśli system operacyjny nie został zmieniony podczas tworzenia maszyny wirtualnej, będzie to Linux i dostępne opcje:
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy && chmod +x cloud_sql_proxy
W przypadku zmiany systemu operacyjnego możesz kliknąć tutaj, aby znaleźć odpowiednie polecenie umożliwiające pobranie serwera proxy dla Twojego systemu operacyjnego.
Aby uruchomić serwer proxy, pobierz nazwę połączenia instancji skopiowaną ze szczegółów instancji Cloud SQL, aby zastąpić <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 port domyślny, na którym baza danych nasłuchuje.
./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432 &
6. Testowanie połączenia i kończenia
Jak już wspomnieliśmy, jeśli masz aplikację, którą chcesz przetestować w instancji GCE, nie ma problemu. Na potrzeby tego ćwiczenia w Codelabs zainstalujemy psql i użyjemy tego klienta, aby sprawdzić, czy możemy połączyć się z naszą bazą danych.
Z poziomu sesji SSH w maszynie wirtualnej:
sudo apt-get install postgresql-client
psql "host=127.0.0.1 port=5432 sslmode=disable user=postgres"
Następnie podaj domyślne hasło użytkownika skonfigurowane podczas tworzenia instancji Cloud SQL.
Gratulacje! Jeśli wszystko pójdzie dobrze, powinien pojawić się prompt Postgres i umożliwić uruchamianie poleceń na podstawie bazy danych.
Co dalej?
Zapoznaj się z tymi ćwiczeniami z programowania...