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
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
.
Masz tu wiele opcji. Musisz tylko:
- Nazwij instancję
- Zmień
Machine typenaf1-micro - W sekcji Tożsamość i dostęp do interfejsu API zmień menu
Service accountzDefault compute service accountna to, które zostało utworzone w poprzednim kroku. - 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
.
Jak już wspomniałem, większość tego laboratorium jest ogólna dla każdego dialektu SQL, ale w tym laboratorium wybierz PostgreSQL.
- Określ identyfikator instancji
- Wpisz hasło domyślnego użytkownika (nazwa użytkownika będzie domyślna dla wybranej bazy danych, np.
rootw przypadku MySQL lubpostgresw przypadku PostgreSQL). - Jeśli zmienisz region instancji obliczeniowej, musisz też zmienić region tutaj, aby był zgodny.
- Przewiń w dół i kliknij
show configuration options. - Rozwiń sekcję
Connectivity - Odznacz opcję
Public IPi zaznacz pole wyboruPrivate IP. - Upewnij się, że w menu, które pojawi się po zaznaczeniu opcji Prywatny adres IP, wybrana jest opcja
default. - 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: